Глядя на ваши комментарии под постом Магнуса, я могу поделиться более конкретным примером.
Вариант 1) Журналы нашего Fortigate похожи, а соответствующий фильтр Grok выглядит следующим образом:
grok {
match => [
"message" , "%{FORTIGATE_50_BASE} %{FORTIGATE_50_V1}",
"message" , "%{FORTIGATE_50_BASE} %{FORTIGATE_50_V2}",
"message" , "%{FORTIGATE_50_BASE} %{FORTIGATE_50_V3}",
"message" , "%{FORTIGATE_50_BASE}"
]
tag_on_failure => [ "failure_grok_fortigate" ]
break_on_match => false
}
И связанные с этим закономерности таковы:
FORTIGATE_50_BASE %{SYSLOG5424PRI:syslog_index}date=%{FORTIDATE:date} time=%{TIME:time} devname=%{HOST:hostname} devid=%{HOST:devid} logid=%{NUMBER:logid} type=%{WORD:fortigate_type} subtype=%{WORD:subtype} level=%{WORD:loglevel} vd=\"?%{WORD:vdom}\"?
FORTIGATE_50_V1 srcip=%{IP:srcip} srcintf=\"%{HOST:srcintf}\" dstip=%{IP:dstip} dstintf=\"%{HOST:dstintf}\" sessionid=%{NUMBER:sessionid} status=%{DATA:status} policyid=%{DATA:policyid} dstcountry=\"%{DATA:dstcountry}\" srccountry=\"%{DATA:dstcountry}\" trandisp=%{WORD:trandisp} service=%{WORD:service} proto=%{INT:proto} app=%{WORD:app} duration=%{INT:duration} sentbyte=%{INT:sentbyte} rcvdbyte=%{INT:rcvdbyte} sentpkt=%{INT:sentpkt} rcvdpkt=%{INT:rcvdpkt}
FORTIGATE_50_V2 user=\"%{PROG:user}\" ui=%{GREEDYDATA:ui} msg=\"%{GREEDYDATA:msg}\"
FORTIGATE_50_V3 action=\"%{PROG:action}\" tunneltype=\"%{PROG:tunneltype}\" tunnel_id=%{NUMBER:tunnel_id} remote_ip=(%{IP:remote_ip}|\(null\)) tunnel_ip=(%{IP:tunnel_ip}|\(null\)) user=\"%{PROG:user}\" group=\"%{PROG:group}\" dst_host=\"%{PROG:dst_host}\" reason=\"%{PROG:reason}\" msg=\"%{GREEDYDATA:msg}\"
Таким образом, существует базовый шаблон, общий для всех журналов и некоторых конкретных частей, и способ настройки фильтра grok заключается в том, чтобы сначала обрабатывать более конкретные шаблоны и возвращаться к общему.
Вариант 2) Журналы очень похожи на списки значений ключей, поэтому, возможно, более простой kv
filter поможет вам гораздо больше, чем любой шаблон.
В вашем случае это может быть так просто:
input {
...
}
filter {
kv { }
date { ... pull in the date data ... }
}
output {
..
}
Надеюсь, что это сработает. В общем, мне также было очень полезно иметь unittests теперь доступен формат журнала.
Ваше здоровье
person
pagid
schedule
14.04.2015