Нужен файл logstash-conf для извлечения количества разных строк в файле журнала
Как написать файл конфигурации logstash, чтобы отделить две разные (S:Info & S:Warn) строки от файла журнала и отобразить соответствующий счетчик в Kibana?
Пробовал использовать фильтр grep в logstash, но не уверен, что получу счетчик двух разных строк (Info и Warn) в Kibana.
Ниже приведен фрагмент файла журнала:
Apr 23 21:34:07 LogPortSysLog: T:2015-04-23T21:34:07.276 N:933086 S:Info P:WorkerThread0#783 F:USBStrategyBaseAbs.cpp:724 D:T1T: Power request disabled for this cable. Defaulting to 1000mA
Apr 23 21:34:10 LogPortSysLog: T:2015-04-23T21:34:10.570 N:933087 S:Warn P:DasInterfaceThread#791 F:USBStrategyBaseAbs.cpp:1696 D:CP_CONTROL:Unexpected DasChildTag: 27 B:{}
1 ответ
Вы хотите grok
фильтр. Я не обязательно получаю весь формат, но это мои догадки:
Apr 23 21:34:07 LogPortSysLog: T:2015-04-23T21:34:07.276 N:933086 S:Info P:WorkerThread0#783 F:USBStrategyBaseAbs.cpp:724 D:T1T: Power request disabled for this cable. Defaulting to 1000mA
Это переводится как:
LOG_TIMESTAMP LOG_NAME: T:ACTUAL_TIMESTAMP N:LOGGED_EVENT_NUMBER S:SEVERITY P:THREAD_NAME F:FILENAME:LINE_NUMBER D:MESSAGE
Похоже, что я собираю некоторую дополнительную информацию в MESSAGE
, но это должно помочь вам начать.
файлы:
data.log
содержит две строки из вашего ввода.portlogs.conf
содержит "конфигурацию" Logstash для анализа журнала.input { # You can change this to the file/other inputs stdin { } } filter { grok { # "message" is the field name filled in by most inputs with the # current line to parse # Note: I throw away the log's timestamp and use the message timestamp, # which may not be true for all of your logs! match => [ "message", "%{SYSLOGTIMESTAMP} %{DATA:name}: T:%{TIMESTAMP_ISO8601:timestamp} N:%{INT:log_number:int} S:%{DATA:severity} P:%{DATA:thread} F:%{DATA:filename}:%{INT:line_number:int} D:%{GREEDYDATA:log_message}" ] } } output { # Change this to go to your Elasticsearch cluster stdout { codec => rubydebug } }
Комбинируя два, с Logstash, я получаю вывод (работает Logstash 1.5 RC3, но RC4 вышел на этой неделе):
{
"message" => "Apr 23 21:34:07 LogPortSysLog: T:2015-04-23T21:34:07.276 N:933086 S:Info P:WorkerThread0#783 F:USBStrategyBaseAbs.cpp:724 D:T1T: Power request disabled for this cable. Defaulting to 1000mA",
"@version" => "1",
"@timestamp" => "2015-04-24T01:34:07.276Z",
"host" => "Chriss-MBP-2",
"name" => "LogPortSysLog",
"log_number" => 933086,
"severity" => "Info",
"thread" => "WorkerThread0#783",
"filename" => "USBStrategyBaseAbs.cpp",
"line_number" => 724,
"log_message" => "T1T: Power request disabled for this cable. Defaulting to 1000mA"
}
{
"message" => "Apr 23 21:34:10 LogPortSysLog: T:2015-04-23T21:34:10.570 N:933087 S:Warn P:DasInterfaceThread#791 F:USBStrategyBaseAbs.cpp:1696 D:CP_CONTROL:Unexpected DasChildTag: 27 B:{}",
"@version" => "1",
"@timestamp" => "2015-04-24T01:34:10.570Z",
"host" => "Chriss-MBP-2",
"name" => "LogPortSysLog",
"log_number" => 933087,
"severity" => "Warn",
"thread" => "DasInterfaceThread#791",
"filename" => "USBStrategyBaseAbs.cpp",
"line_number" => 1696,
"log_message" => "CP_CONTROL:Unexpected DasChildTag: 27 B:{}"
}
Это будут те два документа, которые отправляются в Elasticsearch, если вы правильно настроите свой вывод. Сообщения Grok - это просто регулярные выражения, поэтому вы можете создать шаблон, который специально анализирует (или не анализирует) внутреннюю часть log_message
, который включает в себя игнорирование вещей, таких как B:{}
выше. Чтобы игнорировать это, просто не указывайте имя поля (например, :log_message
называет совпавший образец log_message
, поэтому, не называя его, он игнорируется).
Оттуда, это просто вопрос загрузки Kibana и создания визуализации. Он будет автоматически использовать поля сверху, чтобы сделать их доступными для поиска. Например, вы можете искать severity:warn
чтобы видеть только строки журнала с серьезностью "Предупреждать" (без учета регистра). Чтобы найти точные совпадения, вы можете использовать автоматически добавленные severity.raw
искать это как severity.raw:Warn
, но это, как правило, не то, что делают пользователи.