ruby - elasticsearch-logstash时差计算(ELK 5.3)

标签 ruby elasticsearch logstash elasticsearch-5

我需要在不使用插件的情况下手动计算时差,因为我的结束时间有所不同,并且可能需要大量的日志才能达到24小时。
我设法通过以下方式从旧日志中获取开始时间:

elasticsearch {
                query => "Event:'Sent' AND ID:%{[ID]}"
                index => "mylog*"
                result_size => "1"
                enable_sort => "false"
                fields => { "@timestamp" => "SentTime" }
        }

它实际上可以正常工作并以“2017-03-29T22:00:03.000Z”格式返回正确的日期

但是它的缺点是:
返回格式为“1970年1月18日,08:07:09.056”的值
 ruby {
          code => "event.set('[SecondsToDeliver]', event.get('@timestamp').to_f - event.get('SentTime').to_f)"
          add_tag => [ "rubyfilter" ]
         }

我敢肯定这是一个琐碎的语法错误,但我无法捕获它。

最佳答案

通过这个数学解决:

elasticsearch {
                        hosts => ["Your elastic host"]
                        query => 'Event:"Sent" AND ID:"%{ID}"'
                        fields => { "@timestamp" => "SentTime" }
                        tag_on_failure => [ "NoSent_ID" ]
                }

             date {
                match => ["[SentTime]", "ISO8601"]
                target => "[SentTime]"
             }
        ruby {
                    init => "require 'time'"
                    code => "duration = (event.get('@timestamp') - event.get('SentTime')) rescue nil; event.set('Log_duration', duration); "
                 }

关于ruby - elasticsearch-logstash时差计算(ELK 5.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313470/

相关文章:

elasticsearch - 如何使用过滤器查询优化 Elasticsearch aggs

elasticsearch - 多个Logstash实例与Filebeats

docker - Logstash 不处理 filebeat 发送的文件

ruby - 如何在每个项目的基础上使用 RVM 将目录添加到 PATH?

ruby - 在单个 Ruby 文件上使用 guard-minitest

Ruby 1.9 的 Ruby Pony 替代品?

elasticsearch - Elasticsearch-条件嵌套获取

mysql - 如何节省时间以及用户在 Rails 中的时间戳中输入日期

shell - 使用 'yes'安装X-Pack时,要安装Elasticsearch的Shell脚本会引发错误

elasticsearch - Logstash 根据现有字段创建新字段