Logstash 自动映射syslog中的字段;讯息;部分
如果事件遵循格式Logstash 自动映射syslog中的字段;讯息;部分,logstash,logstash-grok,Logstash,Logstash Grok,如果事件遵循格式field1=value1 field2=value2…,是否可以自动映射syslog接收的事件的字段?例如 name=john age=15 age=29 name=jane name=mark car=porshe (请注意,字段是不同的,并不总是存在) 我正在考虑的解决方案之一是将syslog“message”部分作为JSON发送,但我不确定是否可以自动解析它(当日志的其余部分是syslog格式时)。我当前的方法因\u jsonparsefailure而失败,但我会继续尝
field1=value1 field2=value2…
,是否可以自动映射syslog接收的事件的字段?例如
name=john age=15
age=29 name=jane
name=mark car=porshe
(请注意,字段是不同的,并不总是存在)
我正在考虑的解决方案之一是将syslog“message”部分作为JSON发送,但我不确定是否可以自动解析它(当日志的其余部分是syslog格式时)。我当前的方法因\u jsonparsefailure
而失败,但我会继续尝试
input {
tcp
{
port => 5514
type => "syslogandjson"
codec => json
}
}
filter{
json{
source => "message"
}
}
output ...
可以使用解析键=值格式的字段,但它不支持双引号值的字段,即
key1=value1 key2="value2 with spaces" key3=value3
或者(更糟)
结果不会好的
将消息作为JSON发送要好得多,但正如您所发现的,您不能使用,因为编解码器应用于整个消息(时间戳和all),而不仅仅是可以找到序列化JSON字符串的消息部分。不过,你的想法是对的。只需确保在解析原始syslog消息以提取时间戳、严重性等信息之后有该过滤器。你会想要这样的东西:
filter {
grok {
match => [...]
# Allow replacement of the original message field
overwrite => ["message"]
}
date {
...
}
json {
source => "message"
}
}
由于您拾取的消息可能不是所有的都是JSON消息,因此您可能希望JSON过滤器周围有一个条件。或者,尝试对所有消息进行JSON解析,但删除过滤器为无法解析的消息添加的任何_jsonparsefailure标记。谢谢-这是一个完美的答案。我只想为我的记忆添加一个链接
filter {
grok {
match => [...]
# Allow replacement of the original message field
overwrite => ["message"]
}
date {
...
}
json {
source => "message"
}
}