2013-12-18 2 views
4

Надеюсь, кто-то может мне помочь. Ik имеют следующую настройку:Извлечь временную метку из JSON и использовать ее как временную отметку события стартаста

shipper >> redis >> logstash >> elasticsearch 

Logstash имеет вход, который извлекает данные журнала из redis. Следующий JSON проходит линия Redis:

{ 
    "@fields": { 
    "level": "INFO", 
    "mdc": {}, 
    "file": "ContextLoader.java", 
    "class": "org.springframework.web.context.ContextLoader", 
    "line_number": "273", 
    "method": "initWebApplicationContext" 
    }, 
    "@timestamp": "2013-12-18T11::29:29.115+01:00", 
    "@message": "Root WebApplicationContext: initialization started", 
    "@source_host": "test-host" 
} 

Конфигурация logstash Я использую прост:

input { 
    redis { 
    data_type => "list" 
    key => "logstash:test:host" 
    codec => "json" 
    } 
} 
filter{ 
    date { 
    match => [ "@timestamp", "dd-MMM-YYYY:HH:mm:ssZ", "dd-MMM-YYYY:HH:mm:ss Z", "ISO8601" ] 
    } 
} 
output { 
    stdout{ 
    debug => true 
    } 
} 

Когда я использую вышеуказанную конфигурацию, я вижу, что отметка времени события logstash используется (2013-12-18T12:53:14.169Z) и Я получаю следующее сообщение об ошибке с моей отладки экрана:

Failed parsing date from field {:field=>"@timestamp", :value=>"2013-12-18T12:53:14.177Z", :exception=>#<TypeError: cannot convert instance of class org.jruby.RubyTime to class java.lang.String>, :level=>:warn} 

из этого я могу сделать следующий вывод:

Когда запись журнала входит в качестве входных данных, метка времени записи журнала json перезаписывается событием timestamp в журнале старта. Затем, когда фильтр даты пытается проанализировать временную метку, он терпит неудачу, потому что нет совпадения.

Я хочу использовать временную метку записи журнала json как метку времени события logstash. Как я могу это достичь? Я использую версию logstash 1.3.1.

+0

Ошибка выглядит связанной: [LOGSTASH-1340: Если фильтр заменяет @timestamp строкой, то сброс события завершился неудачей] (https://logstash.jira.com/browse/LOGSTASH-1340). Несколько человек предложили обходные пути, которые вы могли бы попробовать. – rutter

+0

Да, я так думаю. Thnx. – user3115768

+0

«T11 :: 29: 29» в вашем примере должна быть опечатка, или? – Rbjz

ответ

2

Я думаю, что вы, возможно, неправильно поняли, как работает date filter (там, как представляется, документы для 1.3.1), он берет поле и анализирует его по шаблону, который вы установили, и использует его для установки значения поля @timestamp (по умолчанию). Поскольку вы берете поле @timestamp, сопоставляя его с шаблоном, а затем пытаетесь установить с ним поле @timestamp, то, что вы делаете, является избыточным.

Если у вас другое поле метки времени, вы хотите взять дату, я ожидаю, что это, вероятно, сработает, если вы используете правильный шаблон для этого поля.

Я бы также рекомендовал вам обновить до 1.4.2, поскольку более ранняя версия, которую вы используете, может быть ошибкой.

Смежные вопросы