Разобрать лог с помощью Losgtash

Я использую Logstash для анализа файла журнала. Образец строки журнала показан ниже.

2011/08/10 09:51:34.450457,1.048908,tcp,213.200.244.217,47908, ->,147.32.84.59,6881,S_RA,0,0,4,244,124,flow=Background-Established-cmpgw-CVUT

Я использую следующий фильтр в моем файле конфигурации.

 grok {
       match => ["message","%{DATESTAMP:timestamp},%{BASE16FLOAT:value},%{WORD:protocol},%{IP:ip},%{NUMBER:port},%{GREEDYDATA:direction},%{IP:ip2},%{NUMBER:port2},%{WORD:status},%{NUMBER:port3},%{NUMBER:port4},%{NUMBER:port5},%{NUMBER:port6},%{NUMBER:port7},%{WORD:flow}" ]
    }

Он хорошо работает для безошибочных строк журнала. Но когда у меня есть строка, как показано ниже, она терпит неудачу. Обратите внимание, что второе поле отсутствует.

2011/08/10 09:51:34.450457,,tcp,213.200.244.217,47908, ->,147.32.84.59,6881,S_RA,0,0,4,244,124,flow=Background-Established-cmpgw-CVUT

Я хочу поместить значение по умолчанию в свой выходной объект Json, если значение отсутствует. Как мне это сделать?


person user1097675    schedule 16.02.2016    source источник


Ответы (2)


Используйте (%{BASE16FLOAT:value})? для второго поля, чтобы сделать его необязательным, т.е. регулярное выражение ()? .

Даже если второе поле пустое, грок будет работать.

Итак, весь грок выглядит так:

%{DATESTAMP:timestamp},(%{BASE16FLOAT:value})?,%{WORD:protocol},%{IP:ip},%{NUMBER:port},%{GREEDYDATA:direction},%{IP:ip2},%{NUMBER:port2},%{WORD:status},%{NUMBER:port3},%{NUMBER:port4},%{NUMBER:port5},%{NUMBER:port6},%{NUMBER:port7},%{WORD:flow}
person jijinp    schedule 16.02.2016

Используйте его в своем файле conf. Теперь, если поле значения пусто, оно будет опущено в ответ.

input {
   stdin{
   }
}
filter {

grok {
       match => ["message","%{DATESTAMP:timestamp},%{DATA:value},%{WORD:protocol},%{IP:ip},%{NUMBER:port},%{GREEDYDATA:direction},%{IP:ip2},%{NUMBER:port2},%{WORD:status},%{NUMBER:port3},%{NUMBER:port4},%{NUMBER:port5},%{NUMBER:port6},%{NUMBER:port7},%{WORD:flow}" ]
    }

}
output {
  stdout {
        codec => rubydebug
  }
}
person Mukrram Rahman    schedule 16.02.2016
comment
Если вам нужен фиксированный ответ в случае пустого поля значения, просто дайте мне знать, я также вставлю эту часть конфигурации. - person Mukrram Rahman; 16.02.2016
comment
Однако это дало исключение. Но большое спасибо за вашу помощь. - person user1097675; 18.02.2016
comment
Поделитесь своим сообщением об исключении. - person Mukrram Rahman; 18.02.2016