logstash mix json 和普通内容
logstash mix json and plain content
我使用 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 选项没有默认设置,因此事件的 codec calls, .to_s on the event. The toString method 连接了 @timestamp、[host] 字段和 [message] 字段.你想要 [host][ip] 字段,而不是 [host] 字段(它是一个对象)所以告诉编解码器
codec => line { format => "%{@timestamp} %{[host][ip]} %{message}" }
我使用 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 选项没有默认设置,因此事件的 codec calls, .to_s on the event. The toString method 连接了 @timestamp、[host] 字段和 [message] 字段.你想要 [host][ip] 字段,而不是 [host] 字段(它是一个对象)所以告诉编解码器
codec => line { format => "%{@timestamp} %{[host][ip]} %{message}" }