如何区分类似日志的grok过滤器

时间:2015-07-04 15:04:23

标签: logstash logstash-grok

我有dhcpack的日志类型:

  

Jun 30 06:34:18 HOSTNAME dhcpd:通过eth2将DHCPACK转换为IP(MAC)

     

Jun 30 06:34:28 HOSTNAME dhcpd:通过eth2在IP到MAC上的DHCPACK

如何使用grok来使用两种不同的匹配? 我有dhcpack的这两个匹配项,但只使用第一个:

  

((%{SYSLOGTIMESTAMP:时间戳})\ S *(%{主机名:主机名})\ S 的dhcpd \ S + \ S (%{WORD:dhcp_action}?)。 [为|上]   ?(%{IPV4:dhcp_client_ip}) [从|至]   (%{COMMONMAC:dhcp_client_mac})?。* via(%{USERNAME:interface}))

     

((%{SYSLOGTIMESTAMP:时间戳})\ S *(%{主机名:主机名})\ S 的dhcpd \ S + \ S (%{WORD:dhcp_action}?)。* [给]   (%{IPV4:dhcp_client_ip})?。* via(%{USERNAME:interface}))

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

我建议首先关闭常见的东西(直到冒号)然后用更具体的模式处理更具体的东西。一些细节here

the doc所示,grok {}可以采用多种模式:

filter {
  grok { match => { "message" => [
     "Duration: %{NUMBER:duration}",
     "Speed: %{NUMBER:speed}"
  ] } }
}

默认情况下,它会在第一次匹配后停止处理,但这是可配置的。

编辑:

根据您的其他评论,您还可以根据条件进行分支:

if [myField] == "someValue" {
    grok {
        ...
    }
}
else {
    grok {
        ...
    }
}

在这种情况下,您正在运行比较(“==”)或regexp(“=〜”)以查看是否应运行regexp(grok {})。根据完整的业务逻辑,这似乎是一种浪费。

答案 1 :(得分:0)

我想做类似的事情:

In ((%{SYSLOGTIMESTAMP:timestamp})\s*(%{HOSTNAME:hostname})\sdhcpd\S+\s(%{WORD:dhcp_action})?.[for|on] (%{IPV4:dhcp_client_ip})?.[from|to] (%{COMMONMAC:dhcp_client_mac})?.*via (%{USERNAME:interface})) 

获取dhcp_action并使用if语句,如:

 if (mCursor != null && mCursor.moveToFirst()) {
         ......
 } else {
         ......
 }

可能吗?

答案 2 :(得分:0)

我解决了这个问题:

  

过滤器   {       神交         {             match => [“message”,“(dhcpd \ S + \ s *(%{WORD:dhcp_action_test}))”]         }         如果[消息]中有“DHCPINFORM”           {              神交                {                   match => [“message”,“((%{SYSLOGTIMESTAMP:timestamp})\ s *(%{HOSTNAME:hostname})\ s dhcpd \ S + \ s (%{WORD:dhcp_action})? [from](%{IPV4:dhcp_client_ip}))“]                }           }         否则如果[消息]中的“DHCPDISCOVER”           {              神交                {                   match => [ “消息”,“((%{SYSLOGTIMESTAMP:时间戳})\ S (%{主机名:主机名})\ S 的dhcpd \ S + \ S (%{WORD:dhcp_action} )?。* [from](%{COMMONMAC:dhcp_client_mac})“]                }           }         其他           {               丢弃{}           }

     

}