自动映射 syslog "message" 部分中的字段
automatically map fields in syslog "message" section
是否可以自动映射我将通过 syslog 接收的事件的字段,如果它们遵循格式 field1=value1 field2=value2 ...
?一个例子是
name=john age=15
age=29 name=jane
name=mark car=porshe
(注意字段不同,并不总是存在)
我正在考虑的解决方案之一是将系统日志 "message" 部分作为 JSON 发送,但我不确定是否可以自动解析它(当日志的其余部分在系统日志格式)。我目前的方法因 _jsonparsefailure
而失败,但我会继续尝试
input {
tcp
{
port => 5514
type => "syslogandjson"
codec => json
}
}
filter{
json{
source => "message"
}
}
output ...
可以使用 kv filter 解析具有 key=value 格式的字段,但它不支持具有双引号值的字段,即
key1=value1 key2="value2 with spaces" key3=value3
或(更糟)
key1=value1 key2=value2 with spaces key3=value3
结果不会很好。
将消息作为 JSON 发送更好,但正如您发现的那样,您不能使用 json codec since the codec applies to the whole message (timestamp and all) and not just the message part where your serialized JSON string can be found. You're on the right track with the json filter though. Just make sure you have that filter after the grok filter 解析原始系统日志消息来提取时间戳、严重性等.你会想要这样的东西:
filter {
grok {
match => [...]
# Allow replacement of the original message field
overwrite => ["message"]
}
date {
...
}
json {
source => "message"
}
}
由于可能并非您收到的所有消息都是 JSON 消息,因此您可能需要在 json 过滤器周围设置条件。或者,尝试 JSON 解析所有消息,但删除过滤器为无法解析的消息添加的任何 _jsonparsefailure 标记。
是否可以自动映射我将通过 syslog 接收的事件的字段,如果它们遵循格式 field1=value1 field2=value2 ...
?一个例子是
name=john age=15
age=29 name=jane
name=mark car=porshe
(注意字段不同,并不总是存在)
我正在考虑的解决方案之一是将系统日志 "message" 部分作为 JSON 发送,但我不确定是否可以自动解析它(当日志的其余部分在系统日志格式)。我目前的方法因 _jsonparsefailure
而失败,但我会继续尝试
input {
tcp
{
port => 5514
type => "syslogandjson"
codec => json
}
}
filter{
json{
source => "message"
}
}
output ...
可以使用 kv filter 解析具有 key=value 格式的字段,但它不支持具有双引号值的字段,即
key1=value1 key2="value2 with spaces" key3=value3
或(更糟)
key1=value1 key2=value2 with spaces key3=value3
结果不会很好。
将消息作为 JSON 发送更好,但正如您发现的那样,您不能使用 json codec since the codec applies to the whole message (timestamp and all) and not just the message part where your serialized JSON string can be found. You're on the right track with the json filter though. Just make sure you have that filter after the grok filter 解析原始系统日志消息来提取时间戳、严重性等.你会想要这样的东西:
filter {
grok {
match => [...]
# Allow replacement of the original message field
overwrite => ["message"]
}
date {
...
}
json {
source => "message"
}
}
由于可能并非您收到的所有消息都是 JSON 消息,因此您可能需要在 json 过滤器周围设置条件。或者,尝试 JSON 解析所有消息,但删除过滤器为无法解析的消息添加的任何 _jsonparsefailure 标记。