logstash grok 从主机名和 igone ip 中删除 fqdn

logstash grok remove fqdn from hostname and igone ip

我的 logstash 输入收到 json 看起来像这样的:

{"src":"comp1.google.com","dst":"comp2.yehoo.com","next_hope":"router4.ccc.com"}

还有 json 可以像这样(有些键可以保存 ip 而不是主机名:

{"src":"comp1.google.com","dst":"192.168.1.20","next_hope":"router4.ccc.com"}

我想删除 fqdn,如果它包含 ip(忽略它)则保留 ip

我试过了,但没用

filter {
   grok  {
           match => {
               "src" => "%{IP:src}"
               "src" => "%{WORD:src}"
           }
           overwrite => ["src"]
           break_on_match => true
         }
    grok  {
           match => {
               "dst" => "%{IP:dst}"
               "dst" => "%{WORD:dst}"
           }
           overwrite => ["dst"]
           break_on_match => true
         }
     grok  {
           match => {
               "next_hope" => "%{IP:next_hope}"
               "next_hope" => "%{WORD:next_hope}"
           }
           overwrite => ["next_hope"]
           break_on_match => true
         }
}

这个过滤器在第一个 json 上运行良好。 但这不适用于第二个 json ( dst 键) 我得到这个结果:

{
   "src" => "comp1",
   "dst" => "192", 
   "next_hope" => "router4"
}

我希望 dst 字段保持原始值,因为他有 ip 地址而不是主机名。

我期望的结果是:

    {
      "src" => "comp1",
       "dst" => "192.168.1.20", 
       "next_hope" => "router4"
     }

有什么想法吗? 还有可能在 1 个 grok 过滤器中完成所有这些技巧吗?

您的问题是 WORD 的正则表达式与数字匹配。最简单的做法是保护 grok,这样它们就不会 运行 获取 IP 地址:

if [src] !~ /\d+\.\d+\.\d+\.\d+/ {
   grok  {
       match => {
           "src" => "%{WORD:src}"
       }
       overwrite => ["src"]
     }     
}

并对其他字段重复此操作。