当名称中有句点时,Logstash 过滤器不起作用

Logstash Filter not working when something has a period in the name

所以我需要编写一个过滤器,将字段名称中的所有句点更改为下划线。我正在使用 mutate,我可以做一些事情而不是其他事情。作为参考,这里是我在 Kibana 中的当前输出。

看到那些写着 "packet.event-id" 等等的字段了吗?我需要重命名所有这些。这是我写的过滤器,我不知道为什么它不起作用

filter {
    json {
        source => "message"
    }
    mutate {
        add_field => { "pooooo" => "AW CMON" }
        rename => { "offset" = "my_offset" }
        rename => { "packet.event-id" => "my_packet_event_id" }
    }
}

问题是我可以添加一个字段,"offset" 的重命名是可行的。但是当我尝试做数据包时,没有任何改变。我觉得这应该很简单,但我很困惑为什么只有带句点的那个不起作用。

我已经刷新了Kibana的索引,还是没有任何变化。有人有解决方案吗?

当它们在 Kibana 中以点分符号出现时,这是因为您最初以 json 格式加载的文档有结构。

要使用 logstash 访问文档结构,您需要在重命名过滤器中使用 [packet][event-id] 而不是 packet.event-id

例如:

filter {
    mutate { 
        rename => { 
            "[packet][event-id]" => "my_packet_event_id" 
        }
    }
}

您可以通过向 filebeat.yml 添加几行配置直接在 Filebeat 中进行 JSON 解析。

filebeat.prospectors:
- paths:
    - /var/log/snort/snort.alert
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log

您不需要重命名字段。如果您确实需要访问 Logstash 中的某个字段,您可以将该字段引用为 [packet][length] 等。有关语法的文档,请参阅 Logstash field references

顺便说一下,有一个 de_dot 用于替换字段名称中的点,但在这种情况下不应应用。