2014-01-31 2 views
1

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

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

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

Мой лог-файл выглядит примерно следующим образом:

[2014-01-31 12:00:00] [FIELD1: SomeValue] [FIELD2: SomeValue]

и мой logstash фильтр выглядит follwing:

if[type] == "mytype { grok { match => [ "message", "(?<TIMESTAMP>regex)", "message", "(?<FIELD1>regex)", "message", "(?<FIELD2>regex)" ] } } 

Я verfied регулярных выражений для всех моих полей являются правильными, но когда я иду к приборной панели Kibana FIELD1 и FIELD2 не появляются.

Если бы кто-нибудь мог пролить свет на это, я был бы благодарен.

Благодаря

Кевин

+0

добро пожаловать в stackoverflow! я ничего не знаю о кибане, но если вы можете опубликовать то, что вы на самом деле получаете, вы получите лучшие ответы. –

ответ

0

После обучения немного больше о разборе использования ГРОК я нашел много времени это не нужно иметь, чтобы написать свои собственные регулярные выражения. Существует несколько предопределенных шаблонов grok, которые я могу использовать, и я могу расширить их, чтобы создавать свои собственные шаблоны при анализе журналов журналов.

Полезная ссылка на шаблоны grok, поддерживаемые logstash: https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns.

Используя новые знания, я смог изменить конфигурацию своего соответствия ниже.

if[type] == "mytype" { 
    grok { 
     match => ["\[%{TIMESTAMP_ISO8601:dateTime}\]%{SPACE}\[%{WORD}\:%{FLOATINGPOINT:cpu}\]%{SPACE}\[%{WORD}\:%{FLOATINGPOINT:memory}\]"] 
    } 
} 

Это использует встроенный в шаблонов ГРОК TIMESTAMP: ISO8601, чтобы выбрать дату в моих журналах, и я создал очень простой пользовательский шаблон с плавающей точкой, чтобы выбрать значения с плавающей точкой для памяти и процессора в моем примере , Образец FLOATINGPOINT выглядит так:

FLOATINGPOINT %{INT}\.%{INT} 
2

поведение ГРОК по умолчанию, чтобы остановить обработку после первого матча.

Вы можете изменить это, установив break_on_match ложь:

if[type] == "mytype { 
    grok 
    { 
     match => [ 
      "message", "(?<TIMESTAMP>regex)", 
      "message", "(?<FIELD1>regex)", 
      "message", "(?<FIELD2>regex)" 
     ] 
     break_on_match => false 
    }  
} 
+0

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

+0

Ack! Запятая была синтаксической ошибкой, которую я только что исправил. Что касается групп захвата, соответствуют ли они, если вы пытаетесь отлаживать [grok debugger] (http://grokdebug.herokuapp.com/)? Это может быть проще устранить с помощью некоторого примера ввода. – rutter

+0

Да, поэтому я пробовал все мои регулярные выражения с помощью отладчика grok, и все они совпадали с тем же входом, который я дал, как и в журнале, который я пытался проанализировать. Пример ввода, который я пытаюсь проанализировать, - [2014-02-12 14:08:00] \ t [CPU: 44.9] \ t [ПАМЯТЬ: 55.1]. Мои регулярные выражения для каждого из этих полей, следующих за порядком, были: (? \\ d {4} - \\ d {2} - \\ d {2} \\ s {1} \\ d {2}: \\ d {2}: \\ d {2}) (? CPU: \\ d {1,2} \. \\ d {1,2}) (? ПАМЯТЬ: \\ d {1,2} \ . \\ d {1,2}) ' –

Смежные вопросы