Logstash进行日志采集:
在Logstash进行日志采集的时候需要使用Filter对数据进行过滤,这里可能会出现message无法匹配的问题,导致message里面存在一些信息如下:
{"@timestamp":"2018-05-26T10:13:58.335Z","beat":{"hostname":"iZm5e2n9hyq2mxqp6jl4m2Z","name":"iZm5e2n9hyq2mxqp6jl4m2Z","version":"5.6.7"},"input_type":"log","message":"[
然后才是message,在使用grok进行过滤前,先使用json对数据进行格式转换,后面的正则表达式才能匹配出来,具体filter如下:
filter {
if [type] == "pay" {
json {
source => "message"
}
grok {
match => {
"message" => "正则"
}
overwrite => ["message"]
}
}
其中 Grok可以使用多个进行配置,比如第一个正则里面分离出来了一个字段,在第二个grok里面,可以直接使用第一个里面的字段进行继续分离,如下,message分离出来msg,msg分离出来method,method分离出来module:
grok {
match => [
"message","\[(?\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\]\[(?\w*)\s\]\[(?\S*)\]\s(?.*)",
"message","\[(?\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\]\[(?\w*)\s\]\s(?.*)"
]
}
grok{
match => {
"msg" => "^(?[A-Za-z0-9$.*]*)"
}
}
grok {
match => {
"method" => "[A-Za-z0-9$*]*.[A-Za-z0-9$*]*.(?[A-Za-z0-9$*]*)"
}
}