Как извлечь данные об использовании ЦП из файла журнала в logstash

Я пытаюсь извлечь использование ЦП и метку времени из сообщения:

2015-04-27T11:54:45.036Z| vmx| HIST ide1 IRQ 4414 42902 [  250 -   375 ) count:    2 (0.00%) min/avg/max: 250/278.50/307

Я использую logstash, и вот мой файл logstash.config:

input {
    file {
    path => "/home/xyz/Downloads/vmware.log"
    start_position => beginning
    }
}

 filter {
    grok{
            match => ["message", "%{@timestamp}"]
    }
}
 output{
    stdout {
    codec => rubydebug
    }
    }

Но это дает мне ошибку синтаксического анализа grok, любая помощь будет очень признательна. Спасибо.


person Katie    schedule 28.04.2015    source источник
comment
Ваше выражение grok недопустимо; @timestamp — это имя поля, а не шаблон. Но где в сообщении указана загрузка ЦП? 0,00%?   -  person Magnus Bäck    schedule 28.04.2015
comment
Значения min/avg/max представляют загрузку ЦП. Как написать шаблоны для получения этих значений?   -  person Katie    schedule 28.04.2015


Ответы (1)


Согласно сообщению Магнуса, вы неправильно используете функцию сопоставления grok, @timestamp — это имя системного поля, которое logstash использует в качестве временной метки, по которой было получено сообщение, а не имя шаблона grok.

Сначала я рекомендую вам взглянуть на некоторые шаблоны grok по умолчанию, которые вы можете использовать, которые можно найти здесь, то я также рекомендую вам использовать отладчик grok, наконец, если ничего не помогает, зайдите на irc-канал #logstash (на freenode), мы там довольно активны, так что я уверен, что кто-то вам поможет.

Просто чтобы помочь вам, я создал быстрый шаблон grok, который должен соответствовать вашему примеру (я использовал только отладчик grok, чтобы проверить это, поэтому результаты в производстве могут быть не идеальными — так что проверьте!)

filter {
  grok {
    match => [ "message", "%{TIMESTAMP_ISO8601}\|\ %{WORD}\|\ %{GREEDYDATA}\ min/avg/max:\ %{NUMBER:minimum}/%{NUMBER:average}/%{NUMBER:maximum}" ]
  }
}

Чтобы немного объяснить, %{TIMESTAMP_ISO8601} — это шаблон grok по умолчанию, который соответствует метке времени в вашем примере.

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

Я использовал шаблон %{GREEDYDATA}, так как он будет захватывать что угодно, это может быть полезно, когда вы просто хотите захватить остальную часть сообщения, если вы поместите его в конец шаблона grok, он захватит весь оставшийся текст. Затем я взял немного из вашего примера (min/avg/max), чтобы не дать GREEDYDATA захватить остальную часть сообщения, так как после этого нам нужны данные.

%{NUMBER}, очевидно, будет захватывать числа, но бит после : внутри фигурных скобок определяет имя, которое поле будет присвоено logstash и впоследствии сохранено в elasticsearch.

Надеюсь, это поможет!

person Rumbles    schedule 28.04.2015