如何在Yaml文件中使用正则表达式进行Logstash Translate过滤?

时间:2017-01-07 14:06:20

标签: regex yaml logstash

我正在尝试使用Logstash Translate Filter来丰富兄弟正在生成的网络数据以及我正在摄取到我的ELK堆栈中的网络数据。例如,以下是我手动丰富数据的方式:

translate {
field => "id.orig_h"
destination => "src_comp_name"
dictionary => [
    "192.168.1.1", "Home_Router",
    "192.168.1.150", "My_Laptop",
    "192.168.1.210", "My_Desktop"
    ]
}

虽然这有效,但它不能扩展我最终需要的东西。所以我试图将我的字典移动到yaml文件并使用正则表达式来匹配IP地址以为它们分配标签。所以我将翻译功能编辑为:

translate {
field => "id.orig_h"
destination => "src_comp_name"
dictionary_path => '/etc/logstash/config/compNames.yaml'
}

以下是我想要在yaml文件中做的大致内容:

'^192\.168\.1\.[1-2]$': "Home_Routers"
'^192\.168\.1\.1[0-9]{2}$': "Home_Laptops"
'^192\.168\.1\.2[0-9]{2}$': "Home_Desktops"

这会导致192.168.1.1/2被标记为路由器,.100-199范围内的任何内容都被标记为Home_Laptops,而.200-255中的任何内容都被标记为"Home_Desktops"。我已经尝试了在Yaml文件中使用正则表达式的多种方法,但我要么得到像

这样的错误
  

“LogStash :: Filters :: Translate:在/etc/logstash/config/compNames.yaml加载字典文件时无法将Array转换为Hash”*

或者logstash正在启动但没有标记应该匹配的流量。

有关如何在yaml文件中实现正则表达式匹配以通过Logstash Translate Filter实现数据丰富的指导吗?

1 个答案:

答案 0 :(得分:1)

将其添加到翻译功能:

    "exact" => true,
    "regex" => true