Начало работы с фильтрами Logstash

Ищете небольшую помощь при запуске... У меня установлен Logstash (а также ElasticSearch), но я борюсь с моим первым фильтром.

В качестве теста я настроил его для чтения из обрезанного файла журнала, который содержит 6 строк, каждая строка начинается с отметки времени, например [11/5/13 4: 09: 21: 327 PST], за которым следует куча других данных.

На данный момент у меня есть файл conf conf, чтобы прочитать этот файл, и я пытаюсь сделать очень простой фильтр grok для соответствия строкам, возможно, чтобы захватить метку времени, а затем остальную часть данных (откуда я могу начать разделяя его).

Вот что у меня есть:

input {
  file {
    type => "chris"
    path => "/home/chris/Documents/test.log" 
  }
}
filter {
  grok {
    type => "chris"
    pattern => "%{GREEDYDATA:logline}"
  }
}
output {
  stdout {debug => true debug_format => "json"}
}

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

Есть ли у кого-нибудь подобный файл conf, с которым они могли бы поделиться? Большинство примеров, которые я могу найти, более продвинутые, и я, кажется, застреваю, пытаясь выбраться из ворот.

Спасибо,

Крис.

Ответ 1

Начните с удаления содержимого фильтра.

Документы для текущей версии (1.3.2) плагина фильтра logstash grok находятся здесь http://logstash.net/docs/1.3.2/filters/grok

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

Пример фильтра Grok:

filter {
  grok {
    match => [ "message", "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" ]
  } 
 }

Но это вряд ли соответствует вашим данным.

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

Следующая часть создает 5 новых полей, клиент, метод, запрос, байты и продолжительность, читая логлайн и соответствующие части с предопределенными шаблонами Grok, такими как IP, WORD и т.д. Это вам нужно изменить.

Начните с

filter {
  grok {
    match => [ "message", "%{GREEDYDATA:logline}" ]
  } 
 }

Которая фактически просто дублирует поле сообщения в отдельное поле журнала, но где-то запускается. Когда вы добавляете больше шаблонов Grok в фильтр, поле logline будет содержать только что-либо не grokked.

Вы можете проверить свои шаблоны Grok здесь http://grokdebug.herokuapp.com/

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

filter {
  grok {
    match => [ "message", "%{TIMESTAMP_ISO8601:syslog_timestamp} %{GREEDYDATA:syslog5424_msg}" ]
  }
  date {
    match => [ "syslog_timestamp", "ISO8601" ]
  }
 }

TIMESTAMP_ISO8601 соответствует временным меткам в очень подробном формате (http://grokdebug.herokuapp.com/patterns#), это может не сработать для вас.

ISO8601 - это тот же формат, который задан для фильтра даты, вам может потребоваться вручную указать здесь формат даты. См. Документы: http://logstash.net/docs/1.3.2/filters/date