Recently some guys came by and were curious about the date filter in logstash (both 2.4 and 5.x, but I am using logstash 2.4 in this post). The basic function for date filter is to convert a free style date string to a timestamp (or datetime), which shall be used to set @timestamp
of the this message.
But it seemed that people often came across issues during this procedure, so I post this passage to make this whole process easier.
PS. this post does not contain much information, and is quite easy for understanding. It serves as a quick help to new guys here.
In this post, I am going to set up a debug solution of debugging date filter in logstash. With this set up, we can:
Download logstash 2.4 or logstash 5.X and unzip them to your local PC.
add a logstash.json
in this folder (or anywhere you like). The content of this file may look like the following.
input {
stdin {}
}
filter {
# used for convert a customized date string to a timestamp
# which will be set as '@timestamp' field of the event
date {
# message means the full body of a single incoming event
match => [ "message", "dd/MMM/yyyy:HH:mm:ss Z"]
}
# used to add additional field to this event
ruby {
# convert timestamp to customized time string
init => "require 'date'"
# BUT be careful, for logstash 5.X, you cannot direct set event's field, but instead you can use event.set method to make it. Please refer here: https://www.elastic.co/guide/en/logstash/current/event-api.html
code => "event['@testST'] = DateTime.strptime('1318996912','%s').strftime('%a, %d %b %Y')"
}
}
output {
stdout { codec => rubydebug }
}
I will explain some items of the configuration here.
input {
stdin {}
}
This will take the input data directly from standard input. So later we can freely set the input data through terminal.
output {
stdout { codec => rubydebug }
}
It sets the output with fairly debug info.
As for the other filters in the logstash, please refer to the official doc.
With logstash.json created, now let’s play.
echo "14/Jul/2017:00:57:29 +0800" | bin/logstash -e -f ./logstash.json
In this demo, I am feeding logstash with a single piece of message 14/Jul/2017:00:57:29 +0800
, which is referred as message
in logstash configuration.
Our task here is to extract the date string and put that date as the @timestamp
of this message. (Otherwise logstash is going to set @timestamp
to when it receives this message, which might not meet our need)
You can check with the output and see whether your converting with date filter
is correctly working. If it is not working as expected, you can easily change your logstash configuration file and test again! It saves a lot of time.
If you get any question, you are welcome to contact me via: