在 logstash 配置文件中,如何计算两个 UNIX 格式日期字段之间的差异?
In logstash config file, How to calculate the difference between two UNIX format date fields?
这是我的 logstash 配置文件中的过滤器部分。
filter {
mutate {
split => ["message", "|"]
add_field => {
"start_time" => "%{[message][1]}"
"end_time" => "%{[message][2]}"
"channel" => "%{[message][5]}"
"[range_time][gte]" => "%{[message][1]}"
"[range_time][lte]" => "%{[message][2]}"
# "duration" => "%{[end_time]-[start_time]}"
}
# remove_field => ["message"]
}
date {
match => ["start_time", "yyyyMMddHHmmss"]
target => "start_time"
}
date {
match => ["end_time", "yyyyMMddHHmmss"]
target => "end_time"
}
ruby {
code =>
"
event.set('start_time', event.get('start_time').to_i)
event.set('end_time', event.get('end_time').to_i)
"
}
mutate {
remove_field => ["message", "@timestamp"]
}
ruby {
init => "require 'time'"
code => "event['duration'] = event['end_time'] - event['start_time'];"
}
最后,我想创建一个名为 duration 的新字段来表示 end_time 和 start_time 之间的差异。
显然,最后 ruby 部分是错误的。这部分怎么写?
首先,您必须确保在设置值之前存在要放置持续时间的字段。
确保您预先添加该字段。
因为它将是数字,你可以这样做
mutate {
add_field {
"duration" => 0
}
}
在此之后,您可以计算该值并使用 ruby
进行设置
ruby {
code => "event.set('duration', event.get('end_time').to_i - event.get('start_time').to_i)"
}
这是我的 logstash 配置文件中的过滤器部分。
filter {
mutate {
split => ["message", "|"]
add_field => {
"start_time" => "%{[message][1]}"
"end_time" => "%{[message][2]}"
"channel" => "%{[message][5]}"
"[range_time][gte]" => "%{[message][1]}"
"[range_time][lte]" => "%{[message][2]}"
# "duration" => "%{[end_time]-[start_time]}"
}
# remove_field => ["message"]
}
date {
match => ["start_time", "yyyyMMddHHmmss"]
target => "start_time"
}
date {
match => ["end_time", "yyyyMMddHHmmss"]
target => "end_time"
}
ruby {
code =>
"
event.set('start_time', event.get('start_time').to_i)
event.set('end_time', event.get('end_time').to_i)
"
}
mutate {
remove_field => ["message", "@timestamp"]
}
ruby {
init => "require 'time'"
code => "event['duration'] = event['end_time'] - event['start_time'];"
}
最后,我想创建一个名为 duration 的新字段来表示 end_time 和 start_time 之间的差异。
显然,最后 ruby 部分是错误的。这部分怎么写?
首先,您必须确保在设置值之前存在要放置持续时间的字段。 确保您预先添加该字段。 因为它将是数字,你可以这样做
mutate {
add_field {
"duration" => 0
}
}
在此之后,您可以计算该值并使用 ruby
进行设置ruby {
code => "event.set('duration', event.get('end_time').to_i - event.get('start_time').to_i)"
}