2014-01-22 3 views
4

다음과 같은 설정이 있습니다. RabbitMQ에 JSON 메시지를 보내는 Java 도구가 있습니다. 그들은 다음과 같이 : Logstash를 사용하여 Elasticsearch에 저장할 때 @timestamp 필드가 필요합니까?

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

는 지금은 RabbitMQ 큐를 읽고 Elasticsearch에 보관하는 Logstash를 사용, 그래서 키바와 데이터를 분석 할 수 있습니다. Elasticsearch에 저장된 JSON은 다음과 같습니다

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

은 내가 @timestamp 필드 내가 뭘하는지에 대한 모든 사용이 될 것입니다 생각하지 않습니다. cURL을 사용하여 Elasticsearch에 동일한 JSON을 저장하면 @version 필드 만 존재하며 @timestamp 필드는 존재하지 않습니다. @timestamp를 저장하지 않도록 Logstash를 구성 할 수있는 방법이 있습니까?

+0

Torben; rabbitMQ 서버에서 읽는 logstash를 얻는 방법에 대한 지식을 공유하고 ElasticSearch가 logstash에서 읽는 메시지를 어떻게 제거합니까? 이 모든 데이터가 서버에 누적됩니까? – 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) 

지금까지 모든 @ -prefix 필드에서 오류가 발생하는 것은 아니며 @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 만 제거하면이 오류가 발생합니다. –