I have the following ruby code to do a conversion:
ruby {
code => "event.set('redis.slowlog.duration.ms', event.get('redis.slowlog.duration.us').to_f / 1000)"
}
But it doesn't seem to produce any output:
I've tried adding an exception handler but it doesn't produce anything either. The data is being sent via filebeat using the redis slowlog prospector.
Badger
February 21, 2019, 4:01pm
2
It works for me
"redis.slowlog.duration.us" => "12613",
"redis.slowlog.duration.ms" => 12.613
Yes, everything says it should work but it isn't.
Here's the full logstash config:
input {
beats {
port => 5045
host => "0.0.0.0"
}
}
filter {
if [fields][data_type] == "redis-slowlog" {
date {
match => [ "timestamp", "UNIX" ]
}
mutate {
remove_field => ["headers","fields","type"]
rename => ["host", "server"]
convert => {"server" => "string"}
}
ruby {
code => "begin
event.set('redis.slowlog.duration.ms', event.get('redis.slowlog.duration.us').to_f / 1000)
rescue Exception => e
event['ruby_exception'] = 'Exception:' + e.message
end"
}
if "_grokparsefailure" not in [tags] {
mutate {
remove_field => ["message"]
}
}
}
}
output {
if "redis-slowlog" in [tags] {
elasticsearch {
hosts => "localhost:9200"
index => "redis-slowlog-%{+YYYY.MM.dd}"
}
}
}
And the filebeat config:
filebeat.modules:
- module: redis
filebeat.prospectors:
- type: redis
hosts: ["localhost:6379"]
fields:
data_type: redis-slowlog
tags: ["redis-slowlog"]
output.logstash:
hosts: ["10.0.0.76:5045"]
guyboertje
(Guy Boertje)
February 21, 2019, 5:05pm
4
You could install the logstash-filter-math
filter (docs) .
You will need to convert any string based numbers to integers or floats first though.
Example:
math {
calculate => [
["fdiv", "[millimeters_f]", 25.4, "[inches]"]
]
}
system
(system)
Closed
March 21, 2019, 5:06pm
5
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.