2014-01-22 70 views
4

我有以下设置:我有一个Java工具,它发送JSON消息给RabbitMQ。他们是这样的:使用Logstash存储在Elasticsearch中时,是否需要@timestamp字段?

{ 
"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吗?

+0

Torben;您是否愿意分享您如何从rabbitMQ服务器读取logstash以及如何从Logstash中删除ElasticSearch读取的消息?所有这些数据是否只是在您的服务器上积累? – vbNewbie

回答

2

当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) 

到目前为止,并非所有的@ - 前缀领域导致错误,只删除@timestamp将导致此错误。

1

任何@ -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 
+0

并非所有@ -prefix字段都会导致错误。到目前为止,只有删除@timestamp会导致此错误。 –

相关问题