Как накапливать фильтры с помощью logstash? - PullRequest
1 голос
/ 17 июня 2019

В настоящее время я обнаруживаю упругий поиск, кибану и logstash с докером. (версия 7.1.1) Три контейнера работают нормально.

У меня есть несколько файлов данных, содержащих такие строки, как эта:

foo=bar    type=alpha    T=20180306174204527

Мой logstash.conf содержит:

input {
  file {
    path => "/tmp/data/*.txt"
    start_position => "beginning"
  }
}
filter {
  kv { 
    field_split => "\t"
    value_split => "="
  }
}
output {
  elasticsearch { hosts => ["elasticsearch:9200"] }
  stdout {
    codec => rubydebug
  }
}

Я работаю с этими данными:

{
          "host" => "07f3051a3bec",
           "foo" => "bar",
       "message" => "foo=bar\ttype=alpha\tT=20180306174204527",
             "T" => "20180306174204527",
    "@timestamp" => 2019-06-17T13:47:14.589Z,
          "path" => "/tmp/data/ucL12018_03_06.txt",
          "type" => "alpha"
      "@version" => "1",
}

Первый шаг работы сделан. Теперь я хочу добавить фильтр для преобразования значения ключа T в качестве отметки времени.

{
...
             "T" => "2018-03-06T17:42:04.527Z",
    "@timestamp" => 2019-06-17T13:47:14.589Z,
...
}

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

1 Ответ

1 голос
/ 18 июня 2019

Добавьте этот фильтр после фильтра kv:

date { 
  match => [ "T", "yyyyMMddHHmmssSSS" ] 
  target => "T"
}

Фильтр date попытается проанализировать поле T, используя предоставленный шаблон для создания даты, которая будет записана в поле T (по умолчанию оно перезаписывает поле @timestamp ).

...