【问题标题】:Is the @timestamp field needed when using Logstash to store in Elasticsearch?使用 Logstash 存储在 Elasticsearch 中时是否需要 @timestamp 字段?
【发布时间】:2014-01-22 19:35:28
【问题描述】:

我有以下设置:我有一个将 JSON 消息发送到 RabbitMQ 的 Java 工具。它们看起来像这样:

{
"a": 0,
"b": 1,
"c": 2
}

现在我使用 Logstash 读取 RabbitMQ 队列并将它们存储到 Elasticsearch 中,这样我就可以使用 Kibana 分析数据。存储在 Elasticsearch 中的 JSON 如下所示:

{
"a": 0,
"b": 1,
"c": 2,
"@version": "1",
"@timestamp": "2014-01-22T19:05:19.136Z"
}

我认为@timestamp 字段对我正在做的事情没有任何用处。当我使用 cURL 在 Elasticsearch 中存储相同的 JSON 时,只有 @version 字段存在,@timestamp 字段不存在。有什么方法可以配置 Logstash 不保存@timestamp?

【问题讨论】:

  • 托本;您是否愿意分享您如何让 logstash 从 rabbitMQ 服务器读取以及如何删除 ElasticSearch 从 logstash 读取的消息的知识?所有这些数据都只是累积在您的服务器上吗?

标签: java json elasticsearch logstash kibana


【解决方案1】:

当 Logstash 读取消息时,Logstash 将消息视为Event。 事件将具有时间戳和消息日志。因此,@timestamp 字段是必需的。

因此,如果要删除@timestamp 字段,则会导致错误。 Logstash 无法将事件输出到 elasticsearch。

Exception in thread "LogStash::Runner" org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `tv_sec' for nil:NilClass
    at RUBY.sprintf(file:/tmp/logstash-1.2.1-flatjar.jar!/logstash/event.rb:239)
    at org.jruby.RubyString.gsub(org/jruby/RubyString.java:3062)
    at RUBY.sprintf(file:/tmp/logstash-1.2.1-flatjar.jar!/logstash/event.rb:225)
    at RUBY.receive(file:/tmp/logstash-1.2.1-flatjar.jar!/logstash/outputs/elasticsearch.rb:153)

到目前为止,并不是所有的@-prefix 字段都会导致错误,只有删除@timestamp 会导致这个错误。

【讨论】:

    【解决方案2】:

    任何@-prefixed 字段都在Logstash 内部使用。删除它们往往会导致错误。

    例如,我在 Logstash 1.3.3 中尝试了以下配置文件:

    input { 
        generator {
            type => "timestrip"
            message => "This is a test message."
            count => 1
        }
    }
    
    filter {
        mutate {
            remove_field => ["@timestamp"]
        }
    }
    
    output {
        elasticsearch_http {
            host => "127.0.0.1"
            flush_size => 1
        }
    }
    

    ES 输出报告“无法刷新传出项目”,但有以下异常:

    NoMethodError: undefined method `tv_sec' for nil:NilClass
    

    【讨论】:

    • 并非所有 @-prefix 字段都会导致错误。到目前为止,只有删除@timestamp 会导致这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2019-04-10
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多