假设您的日志防火墙文件中有3条不同的行,您需要:
使用专用的弹性搜索输出将其存储到弹性搜索簇中。
我应该在logstash.conf中做什么?
感谢。
答案 0 :(得分:0)
假设不同的日志来自同一个日志源(即同一个文件)并且应该被视为属于同一类型(即判断调用),您只需列出多个grok模式:
filter {
grok {
match => ["message", "pattern1", "pattern2", ..., "patternN"]
}
}
将按顺序尝试列出的模式。
如果日志消息来自不同的输入并且完全不同,请使用type字段来区分不同的消息:
filter {
if [type] == "foolog" {
grok {
match => ["message", "pattern1"]
}
} else if [type] == "barlog" {
grok {
match => ["message", "pattern2"]
}
}
}
此模式也适用于来自同一输入的消息,但由于您首先必须在条件中检查消息以确定要选择的类型,因此需要更多工作。
答案 1 :(得分:0)
在Magnus帖子下查看你的评论,我可以分享一些更具体的例子。
选项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
过滤器可能比任何模式都更有帮助。
在你的情况下,它可能很简单:
input {
...
}
filter {
kv { }
date { ... pull in the date data ... }
}
output {
..
}
希望这些都有效。总的来说,我还发现现在有一些unittests可用的日志格式非常有用。
干杯