как заменить logstash @timestamp на временную метку журнала

Моя отметка времени в журналах имеет следующий формат.

2016-04-07 18:11:38.169  which is  yyyy-MM-dd HH:mm:ss.SSS

Этот файл журнала не является живым (сохраненным / старым), и я пытаюсь заменить этот timpestamp значением logstash @timestamp для улучшения в визуализации Kibana.

Мой фильтр в logstash выглядит следующим образом

     grok {
       match => {
            "message" => [ "(?<timestamp>(\d){4}-(\d){2}-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){3}) %{SYSLOG5424SD} ERROR u%{BASE16FLOAT}.%{JAVACLASS} - TransId:2b948ed5-12c0-4ae0-9b99-f1ee01191001 - TransactionId ::\"2b948ed5-12c0-4ae0-9b99-f1ee01191001\"- Actual Time taken to process \:\: %{NUMBER:responseTime:int}" ]
            } 

  }

date {
        match => [ "timestamp:date" , "yyyy-MM-dd HH:mm:ss.SSS Z"  ]
        timezone => "UTC"
        target => "@timestamp" 
         } 

Но это не заменяет значение @timestamp, значение Json

{
  "_index": "logstash-2017.02.09",
  "_type": "logs",
  "_id": "AVoiZq2ITxwgj2avgkZa",
  "_score": null,
  "_source": {
    "path": "D:\\SoftsandTools\\Kibana\\Logs_ActualTimetakentoprocess.log",
    "@timestamp": "2017-02-09T10:23:58.778Z", **logstash @timestamp**
    "responseTime": 43,
    "@version": "1",
    "host": "4637",
    "message": "2016-04-07 18:07:01.809 [SimpleAsyncTaskExecutor-3] ERROR s.v.wsclient.RestClient - TransId:2b948ed5-12c0-4ae0-9b99-f1ee01191001 - TransactionId ::\"2b948ed5-12c0-4ae0-9b99-f1ee01191001\"- Actual Time taken to process :: 43",
    "timestamp": "2016-04-07 18:07:01.809"   **Mine time stamp**
  }

Строка журнала пробы -

2016-04-07 18:11:38.171 [SimpleAsyncTaskExecutor-1] ERROR s.v.wsclient.RestClient - TransId:2b948ed5-12c0-4ae0-9b99-f1ee01191001 - TransactionId ::"2b948ed5-12c0-4ae0-9b99-f1ee01191001"- Actual Time taken to process :: 521

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


person Vishwa    schedule 09.02.2017    source источник
comment
Пожалуйста, добавьте образец лога.   -  person Fairy    schedule 09.02.2017
comment
спасибо за ответ .. Обновлено   -  person Vishwa    schedule 09.02.2017


Ответы (2)


У вас должно быть соответствие grok, чтобы использовать timestamp вашей строки журнала:

grok {
    patterns_dir => ["give your path/patterns"]
    match => { "message" => "^%{LOGTIMESTAMP:logtimestamp}%{GREEDYDATA}" }          
}

Убедитесь, что в вашем файле шаблона есть шаблон, соответствующий вашему timestamp в журнале, который может выглядеть примерно так:

LOGTIMESTAMP %{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME}

А затем, как только вы выполнили grok фильтрацию, вы можете использовать отфильтрованное значение, например:

mutate {
    add_field => { "newtimestamp" => "%{logtimestamp}" }
    remove_field => ["logtimestamp"]
}
date {
    match => [ "newtimestamp" , "ISO8601" , "yyyy-MM-dd HH:mm:ss.SSS" ]
    target => "@timestamp"  <-- the timestamp which you wanted to apply on
    locale => "en"
    timezone => "UTC"
}

Надеюсь это поможет!

person Kulasangar    schedule 09.02.2017
comment
Спасибо за ответ. Приношу свои извинения ... снова обновленный вопрос. Я попробую изменить и обновить .. еще раз спасибо - person Vishwa; 09.02.2017
comment
Да, пожалуйста, дайте мне знать. - person Kulasangar; 09.02.2017
comment
И не забудьте отрегулировать соответствие grok в соответствии с вашим. - person Kulasangar; 09.02.2017
comment
@Vishwa удачи в этом? - person Kulasangar; 13.02.2017
comment
Приносим извинения за задержку. Я попробовал тот, который вы предложили .. Не удалось пройти, но настройка зрения на этом сработала. Ниже приведен фильтр даты, который работал у меня date {match = ›[timestamp, ISO8601] target =› @ Logtimestamp locale = ›en timezone =› UTC} Я получаю @ Logtimestamp в качестве нового атрибута в поле даты в Kibana Visulization, что я могу использовать для построения графика. Не использовал mutate, а мой Grok - {TIMESTAMP_ISO8601: timestamp} - person Vishwa; 13.02.2017
comment
Вы также можете скопировать зарегистрированную строку даты / времени в [@metadata][logtimestamp], чтобы вам не нужно было удалять поле logtimestamp, явно указав предложение remove_field, поскольку все в поле @metadata НЕ будет выводиться. - person Han; 01.01.2021

вы можете использовать плагин фильтра даты logstash

date {
    match => ["timestamp", "UNIX"]
}
person code_code    schedule 25.12.2018