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

时间:2016-05-15 20:02:25

标签: logstash logstash-configuration

如何根据字段值在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版

由于

2 个答案:

答案 0 :(得分:1)

我猜你可以用它作为:

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

答案 1 :(得分:0)

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

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

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

根据当前事件,无法在“运行时”修改字典路径。

在弹性支持论坛中,您可以检查更多的解释(第一个链接甚至包含所涉及源代码的参考)和解决方法,但最后它围绕着配置中显示的相同思想: 设置一堆静态字典文件名,并通过条件控制它们的使用。您可以在dictionary_path中使用环境变量,但是每次logstash启动/重新加载时将使用它们一次。