删除系统日志过滤器中的多个日期字段
Remove multiple date fields in syslog filter
我已经设置了 logstash 并正在使用 "default" 系统日志过滤器,如下所示:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
这会导致创建两个字段,@timestamp
和 syslog_timestamp
,它们基本上包含相同的值,尽管格式不同。
有没有办法在 grok 中创建一个临时 syslog_timestamp
字段,以便它可以传递到日期插件中,或者我是否必须在 [=24= 之后通过 mutate 显式删除该字段] 它?例如:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
mutate {
remove_field => [ "syslog_timestamp" ]
}
}
}
感谢您的指点。
没有真正的临时字段,如果您不想syslog_timestamp
,则必须将其删除。
不过我建议您执行 remove_field
in your date filter。这样做只会在成功应用日期过滤器时删除该字段,这意味着如果日期过滤器失败,它将留下 syslog_timestamp
字段,可能会揭示失败的原因。
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
remove_field => [ "syslog_timestamp" ]
}
我已经设置了 logstash 并正在使用 "default" 系统日志过滤器,如下所示:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
这会导致创建两个字段,@timestamp
和 syslog_timestamp
,它们基本上包含相同的值,尽管格式不同。
有没有办法在 grok 中创建一个临时 syslog_timestamp
字段,以便它可以传递到日期插件中,或者我是否必须在 [=24= 之后通过 mutate 显式删除该字段] 它?例如:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
mutate {
remove_field => [ "syslog_timestamp" ]
}
}
}
感谢您的指点。
没有真正的临时字段,如果您不想syslog_timestamp
,则必须将其删除。
不过我建议您执行 remove_field
in your date filter。这样做只会在成功应用日期过滤器时删除该字段,这意味着如果日期过滤器失败,它将留下 syslog_timestamp
字段,可能会揭示失败的原因。
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
remove_field => [ "syslog_timestamp" ]
}