logstash混合json和普通内容



我使用logstash作为syslog中继,它将数据转发到graylog并将数据写入文件。

我使用dns过滤器模块将IP替换为FQDN,之后我无法将原始内容写入文件,IP为"json-ed"。

结果:

2022-05-17T15:17:01.580175Z {ip=vm2345.lab.com} <86>1 2022-05-17T17:17:01.579496+02:00 vm2345 CRON 2057538 - -  pam_unix(cron:session): session closed for user root

我想要得到的:

2022-05-17T15:17:01.580175Z vm2345.lab.com <86>1 2022-05-17T17:17:01.579496+02:00 vm2345 CRON 2057538 - -  pam_unix(cron:session): session closed for user root

我的配置:

input {
syslog {
port => 514
type => "rsyslog"
}
}
filter {
if [type] == "rsyslog" {
dns {
reverse => [ "[host][ip]" ]
action => "replace"
}
}
}
output {
if [type] == "rsyslog" {
gelf {
host => "graylog.lab.com"
port => 5516
}
file {
path => "/data/%{+YYYY}/%{+MM}/%{+dd}/%{[host][ip]}/%{[host][ip]}_%{{yyyy_MM_dd}}.log"
codec => "line"
}
stdout { }
}
}

处理这个问题最好的方法是什么?

使用编解码器时=>第一行,@format选项没有默认设置,因此编解码器在事件上调用.to_s。事件的toString方法将@timestamp、[host]字段和[message]字段连接起来。您需要[host][ip]字段,而不是[host]字段(它是一个对象),因此告诉编解码器

codec => line { format => "%{@timestamp} %{[host][ip]} %{message}" }

相关内容

  • 没有找到相关文章

最新更新