计算 logstash 中不同事件之间的差异或增量
Calculate difference or delta between different events in logstash
假设我有一个如下所示的日志文件:
# time, count
2016-09-07 23:00:00, 1108731
2016-09-07 23:00:02, 1108733
2016-09-07 23:00:03, 1108734
现在,接下来的每一行都包含过去发生的所有事件的总和。我想在 kibana
中使用它,自然的方法是将 count
作为增量数字。
所以我希望效果为:
# time, count, deltaCount
2016-09-07 23:00:00, 1108731, 0
2016-09-07 23:00:02, 1108733, 2
2016-09-07 23:00:03, 1108734, 1
如何在 logstash
中实现这一点。我知道我可以事先编辑这些文件。
谢谢!
解决方案 #1:编写您的插件
一种方法是创建一个插件。同样的问题解决了here。然而,那里发布的过滤器不是公开可用的,更糟糕的是,它实际上是 5 行代码。
解决方案 #2:Ruby 代码段
我在 elastic
论坛的这个帖子中找到了解决方案:Keeping global variables in LS?!。标题说明了一切。
长话短说,解决方案如下:
filter {
...
ruby {
init => "@@previous_count = -1"
code => "
if (@@previous_count == -1)
delta = 0
else
delta = event.get('count') - @@previous_count
end
event.set('requests', delta)
# remember event for next time
@@previous_count = event.get('count')
"
}
}
毕竟没那么难。
假设我有一个如下所示的日志文件:
# time, count
2016-09-07 23:00:00, 1108731
2016-09-07 23:00:02, 1108733
2016-09-07 23:00:03, 1108734
现在,接下来的每一行都包含过去发生的所有事件的总和。我想在 kibana
中使用它,自然的方法是将 count
作为增量数字。
所以我希望效果为:
# time, count, deltaCount
2016-09-07 23:00:00, 1108731, 0
2016-09-07 23:00:02, 1108733, 2
2016-09-07 23:00:03, 1108734, 1
如何在 logstash
中实现这一点。我知道我可以事先编辑这些文件。
谢谢!
解决方案 #1:编写您的插件
一种方法是创建一个插件。同样的问题解决了here。然而,那里发布的过滤器不是公开可用的,更糟糕的是,它实际上是 5 行代码。
解决方案 #2:Ruby 代码段
我在 elastic
论坛的这个帖子中找到了解决方案:Keeping global variables in LS?!。标题说明了一切。
长话短说,解决方案如下:
filter {
...
ruby {
init => "@@previous_count = -1"
code => "
if (@@previous_count == -1)
delta = 0
else
delta = event.get('count') - @@previous_count
end
event.set('requests', delta)
# remember event for next time
@@previous_count = event.get('count')
"
}
}
毕竟没那么难。