Шаблон logstash grok для фильтрации настраиваемого сообщения журнала

Я новичок в logstash и хочу отфильтровать поля из сообщения журнала. Вот сообщение журнала:

[2015-03-16 13:12:05,130]  INFO - LogMediator ServiceName = TestService_v1,SystemDate = 3/16/15 1:12 PM,ServerIP = 127.0.1.1,ServerHost = Inspiron-3521,SequenceName = Validation,Message = Going to Validate Request ,MessageCode = null,ErrorMessage = null,ErrorDetail = null,ErrorException = null

Из приведенного выше сообщения журнала я хочу извлечь все поля, такие как ServiceName, SystemDate, SequenceName и т. Д. Каким будет шаблон Grok или регулярное выражение для этого сообщения журнала?

Любая помощь будет оценена.


person Waqas Ali Razzaq    schedule 16.03.2015    source источник


Ответы (1)


сначала вы можете разделить свое сообщение на три части (отметка времени, уровень журнала и оставшиеся данные журнала), используя:

\[%{TIMESTAMP_ISO8601:timestamp}\]\s+%{WORD:loglevel}\s+-\s+%{GREEDYDATA:logData}

Затем вы можете применить фильтр csv к полю logdata следующим образом:

csv {
  columns => ["serviceName","systemDate","serverIP","serverHost","sequenceName","message","messageCode","errorMessage","errorDetail","errorException"]
  separator => ","
}

Это разделит ваши logData после каждого, поэтому вы получите новое поле с именем message, содержащее текст «Message = Going to Validate Request». Теперь вы можете редактировать отдельные поля, например, вы можете извлечь фактическое сообщение, используя следующий фильтр grok:

Message = %{GREEDYDATA:messageText}

Я нашел очень полезным использовать отладчик Grok для разработки отдельных шаблонов Grok: http://grokdebug.herokuapp.com/

person markus    schedule 23.03.2015