如何根据字段值在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版
由于
答案 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启动/重新加载时将使用它们一次。