如何在logstash中根据字段值动态地翻译字典



如何在logstash中根据字段值动态翻译字典?例如,我当前的配置是:

if [host] == "1.1.1.1" {
    translate {
        field => "[netflow][input_snmp]"
        destination => "[netflow][interface_in]"
        dictionary_path => "/etc/logstash/yaml/1.1.1.1.yml"
    }
} 
if [host] == "2.2.2.2" {
            translate {
                    field => "[netflow][input_snmp]"
                    destination => "[netflow][interface_in]"
                    dictionary_path => "/etc/logstash/yaml/2.2.2.2.yml"
            }
}

有没有通用的方法来实现这一点?Logstash 2.2.4版

感谢

我想您可以将其用作:

translate {
    field => "[netflow][input_snmp]"
    destination => "[netflow][interface_in]"
    dictionary_path => "/etc/logstash/yaml/%{host}.yml"
}

检查:https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#sprintf

您不能根据字段值动态加载字典文件,这不是语法问题。至少目前(当前logstash版本为7.6.2)

在处理任何事件之前,所有字典文件都会在logstash启动时(我想是在重新加载logstash配置之后)加载到内存中。

然后根据refresh_interval选项动态地重新加载现有字典文件的内容。

字典路径不能在"运行时"根据当前事件进行修改。

在弹性支持论坛中,你可以查看额外的解释(第一个链接甚至引用了相关的源代码)和解决方案,但最终它围绕着你的配置中显示的相同想法:设置一组静态字典文件名,并用条件语句控制它们的使用。您可以在dictionary_path中使用环境变量,但每次logstash启动/重新加载都会使用一次。

  • https://discuss.elastic.co/t/dynamic-dictionary/138798/5
  • https://discuss.elastic.co/t/logstash-translate-plugin-dynamic-dictionary-path/129889

最新更新