是否可以自动映射syslog收到的事件的字段,如果它们遵循格式field1=value1 field2=value2 ...
?一个例子是
name=john age=15
age=29 name=jane
name=mark car=porshe
(请注意,字段不同,并不总是存在)
我正在考虑的解决方案之一是将syslog“message”部分作为JSON发送,但我不确定是否可以自动解析它(当其余日志采用syslog格式时)。我当前的方法失败了_jsonparsefailure
,但我会继续尝试
input {
tcp
{
port => 5514
type => "syslogandjson"
codec => json
}
}
filter{
json{
source => "message"
}
}
output ...
答案 0 :(得分:1)
具有key = value格式的字段可以使用kv filter进行解析,但不支持具有双引号值的字段,即
key1=value1 key2="value2 with spaces" key3=value3
或(甚至更糟)
key1=value1 key2=value2 with spaces key3=value3
不会好。
将消息作为JSON发送更好,但正如您所发现的那样,您无法使用json codec,因为编解码器适用于整个消息(时间戳和所有消息),而不仅仅是您的消息部分可以找到序列化的JSON字符串。尽管你在json filter的正确轨道上。只需确保在解析原始syslog消息的grok filter之后有过滤器,以提取时间戳,严重性等。你会想要这样的东西:
filter {
grok {
match => [...]
# Allow replacement of the original message field
overwrite => ["message"]
}
date {
...
}
json {
source => "message"
}
}
由于可能并非您收到的所有邮件都是JSON邮件,因此您可能需要围绕json过滤器设置条件。或者,尝试对所有消息进行JSON解析,但删除过滤器为无法解析的消息添加的任何_jsonparsefailure标记。