#elasticsearch #filter #logstash #kivy-language
#elasticsearch #Фильтр #logstash #kivy-language
Вопрос:
Я анализирую журналы из многих демонов решения UTM. Конфигурация Grok и kv выглядит следующим образом:
grok {
match => [ "message", "%{SYSLOGPROG} %{NOTSPACE:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" ]
}
kv {
id => "syslogkv"
source => "syslog_message"
trim_key => " "
trim_value => " "
value_split => "="
field_split => " "
}
Обычно события выглядят так
<30>2019:04:23-20:13:38 hostname ulogd[5354]: id="2001" severity="info" sys="SecureNet" sub="packetfilter" name="Packet dropped" action="drop" fwrule="60002" initf="eth3.5" outitf="eth5" srcmac="c8:9c:1d:af:68:7f" dstmac="00:1a:8c:f0:f5:23" srcip="x.x.x.x" dstip="y.y.y.y" proto="17" length="56" tos="0x00" prec="0x00" ttl="63" srcport="5892" dstport="53"
и анализируется без каких-либо проблем
Но когда некоторые демоны генерируют события, похожие (например, WAF)
<139>2019:04:23-16:21:38 hostname httpd[1475]: [security2:error] [pid 1475:tid 3743300464] [client x.x.x.x] ModSecurity: Warning. Pattern match "([\\~\\!\\@\\#\\$\\%\\^\\amp;\\*\\(\\)\\-\\ \\=\\{\\}\\[\\]\\|\\:\\;\"\\'\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*?){8,}"
мой вывод прерывается, и logstash прекращает обработку любых журналов.
Как я могу исключить события синтаксического анализа kv с помощью регулярного выражения или любого шаблона?
Простыми словами — не используйте kv, если первые слова в syslog_message начинаются с «[» или любого другого регулярного выражения.
Комментарии:
1. Если я исключу эти события из фильтра kv, он не будет анализировать события. Помогите мне, пожалуйста, написать фильтр для событий, который начинается с символа «[» и содержит события типа:
[field:string] [field:string] [field string]
также может содержать случайные данные, которые я не хочу разбирать между[][]
, например:[field:string] randomdata [field:string]
Ответ №1:
Оберните свой фильтр kv в условие для поля:
if [syslog_message] !~ /^[/ {
kv { }
}
Комментарии:
1. разве это не должно выглядеть так
if [syslog_message] !~ /^[/ { kv { } }
?2. Исправлено, чтобы отменить условие.
3. Если я исключу эти события из фильтра kv, он не будет анализировать события. Помогите мне, пожалуйста, написать фильтр для событий, который начинается с символа «[» и содержит события типа:
[field:string] [field:string] [field string]
также может содержать случайные данные, которые я не хочу разбирать между[][]
, например:[field:string] randomdata [field:string]
4. Я думаю, у вас есть три варианта: (1) измените исходный вывод на лучший формат; (2) преобразуйте вывод во что-то, что может быть проанализировано с помощью kv{}; (3) создайте свой собственный шаблон grok для сообщения. Я бы выбрал # 1 или # 3.