Пометка журналов с помощью Logstash — Grok — ElasticSearch

Резюме:

Я использую Logstash — Grok и эластичный поиск, и моя главная цель — сначала принять журналы с помощью logstash, проанализировать их с помощью grok и связать теги с сообщениями в зависимости от типа журнала, а затем, наконец, передать его на сервер Elastic для запрос с Kibana.

Я уже написал этот код, но не могу получить теги в Elastic Search. Это мой файл конфигурации logstash.

input {
  stdin {
    type => "stdin-type"
  }
}
filter {
  grok {
    tags    => "mytags"
    pattern => "I am a %{USERNAME}"
    add_tag => "mytag"
    named_captures_only => true
  }
}
output {
  stdout { debug => true debug_format => "json"}
  elasticsearch {}
}

Где я ошибаюсь?


person user2359303    schedule 10.05.2013    source источник
comment
Я не так много играл с тегами, но вы пробовали удалить строку тегов? В результате, я думаю, каждый документ должен получить тег mytag.   -  person javanna    schedule 11.05.2013


Ответы (2)


1) Я бы сначала начал с редактирования ваших значений, чтобы они соответствовали типу данных, который они представляют. Например

     add_tag => "mytag"

на самом деле должен иметь массив в качестве значения, а не простую строку. Измените это на

     add_tag => ["mytag"]

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

2) Вы ограничиваете свои фильтры grok сообщениями, которые уже помечены «mytags» на основе строки конфигурации.

    tags => "mytags"

Я не вижу нигде, где вы добавили этот тег раньше времени. Поэтому ни одно ваше сообщение даже не пройдет через фильтр grok.

3) Внимательно прочитайте документацию logstash. Я также новичок в мире Logstash/Grok/ES/Kibana и т. д., но у меня были проблемы, очень похожие на те, что были у вас, и все они были решены, если обратить внимание на то, что написано в документации.

person Adam    schedule 17.05.2013

Вы можете запустить LogStash вручную (возможно, вы уже делаете это) с помощью /opt/logstash/bin/logstash -f $CONFIG_FILE и можете проверить правильность вашего файла конфигурации с помощью /opt/logstash/bin/logstash -f $CONFIG_FILE --configtest. Держу пари, вы уже это делаете.

Вам может понадобиться поместить add_tag строфу в массив

grok {
    ...
    add_tag => [ "mytag" ]
}

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

Лучший способ сделать это может быть...

input {
  stdin {
    type => 'stdin'
  }
}
filter {
  if [type] = 'stdin' {
    mutate {
     add_tag => [ "mytag" ]
    }
  }
}
output {
  stdout {
    codec => 'rubydebug'
  }
}

Это добавит тег "mytag" ко всем вещам, поступающим из стандарта, независимо от того, были ли они грокнуты или нет.

person Gary Rogers    schedule 19.09.2014