Logstash использует дату поля JSON вместо @timestamp - PullRequest
0 голосов
/ 27 июня 2018

Я сталкиваюсь с этой проблемой. Я пытаюсь использовать пользовательскую дату журнала JSON в качестве моей «годной к употреблению» даты вместо поля даты @timestamp.

Мой JSON-файл, который будет обработан Logstash (приходит из filebeat):

{
    "start":    {
       "timestamp": {
            "time": "Wed, 04 Apr 2018 09:36:39 GMT",
            "timesecs": 1522834599
        }
    }
}

Мой файл logstash.yml:

input {
  beats {
    port => 1337
    codec => "json_lines"
  }
}

filter {
   date {
      match => [ "time", "EEE, dd MM yyyy hh:mm:ss ZZZ" ]
   }
}

output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => "localhost:9200"
    index => "testing"
  }
}

Также пытался:

match => [ "[start][timestamp][time]", "EEE, dd MM yyyy hh:mm:ss ZZZ" ]

Все еще не повезло.

Любая помощь будет приветствоваться.

Приветствия

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Когда вы match даты используете фильтр date, он сохраняет соответствующую метку времени в указанном поле target . Если target не предоставлено, оно просто обновит поле @timestamp события новым соответствием time.

1012 * цель *

Сохранить соответствующую временную метку в заданном целевом поле. Если не при условии, по умолчанию обновляется поле @timestamp события.

target автоматически создаст поле, если оно не существует.

Так что следующего кода достаточно,

date {
     match => [ "[start][timestamp][time]", "EEE, dd MMM yyyy HH:mm:ss z" ]
     target => "newTimeField"
     locale => "en"
     remove_field => [ "[start][timestamp][time]" ]  
}

remove_field выше - еще одна распространенная опция, доступная для фильтра date. Используется для удаления поля [start][timestamp][time] после его сохранения в новом поле.

0 голосов
/ 28 июня 2018

Получил решение, как это:

mutate {
     add_field => {
             "mytime" => ""
     }
}

date {
     match => [ "[start][timestamp][time]", "EEE, dd MMM yyyy HH:mm:ss z" ]
     target => "mytime"
     locale => "en"
}
...