У меня проблема с созданием отпечатка пальца на основе IP-адреса клиента и отметки времени, содержащей дату + час.Я использую logstash 7.3.1.Вот соответствующая часть моего файла конфигурации
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date{
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
...
ruby{
code => "
keydate = Date.parse(event.get('timestamp'))
event.set('keydate', keydate.strftime('%Y%m%d-%H'))
"
}
fingerprint {
key => "my_custom_secret"
method => "SHA256"
concatenate_sources => "true"
source => [
"clientip",
"keydate"
]
}
}
Проблема в блоке 'ruby'.Я пробовал несколько методов для вычисления ключевой даты, но ни один из них не работает без ошибок.Последний (с использованием этого файла конфигурации):
[ERROR][logstash.filters.ruby ] Ruby exception occurred: Missing Converter handling for full class name=org.jruby.ext.date.RubyDateTime, simple name=RubyDateTime
входной документ
{
"timestamp" => "19/Sep/2019:00:07:56 +0200",
"referrer" => "-",
"@version" => "1",
"@timestamp" => 2019-09-18T22:07:56.000Z,
...
"request" => "index.php",
"type" => "apache_access",
"clientip" => "54.157.XXX.XXX",
"verb" => "GET",
...
"tags" => [
[0] "_rubyexception" # generated by the ruby exception above
],
"response" => "200"
}
ожидаемый вывод
{
"timestamp" => "19/Sep/2019:00:07:56 +0200",
"referrer" => "-",
"@version" => "1",
"@timestamp" => 2019-09-18T22:07:56.000Z,
...
"request" => "index.php",
"type" => "apache_access",
"clientip" => "54.157.XXX.XXX",
"verb" => "GET",
...
"keydate" => "20190919-00", #format : YYYYMMDD-HH
"fingerprint" => "ab347766ef....1190af",
"response" => "200"
}
Как всегда, большое спасибо за вашу помощь!