Logstash 如何区分相似日志的grok筛选器
我有这类日志用于Logstash 如何区分相似日志的grok筛选器,logstash,logstash-grok,Logstash,Logstash Grok,我有这类日志用于dhcpack: Jun 30 06:34:18主机名dhcpd:DHCPACK通过eth2连接到IP(MAC) Jun 30 06:34:28主机名dhcpd:DHCPACK在IP上通过eth2连接到MAC 如何使用grok,使用两个不同的匹配项? 对于dhcpack,我有两个匹配项,但只使用第一个: ((({SYSLOGTIMESTAMP:timestamp})\s*({HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%{WORD:dhcp\u action}
dhcpack
:
Jun 30 06:34:18主机名dhcpd:DHCPACK通过eth2连接到IP(MAC)
Jun 30 06:34:28主机名dhcpd:DHCPACK在IP上通过eth2连接到MAC
如何使用grok
,使用两个不同的匹配项?
对于dhcpack
,我有两个匹配项,但只使用第一个:
((({SYSLOGTIMESTAMP:timestamp})\s*({HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%{WORD:dhcp\u action})?。[用于| on]
({IPV4:dhcp_客户端_ip})?[从|到]
({COMMONMAC:dhcp_client_mac})?*via(%%{USERNAME:interface}))
((({SYSLOGTIMESTAMP:timestamp})\s*({HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%{WORD:dhcp\u action})?..[to]
({IPV4:dhcp_客户端_ip})?*via(%%{USERNAME:interface}))
有人可以帮忙吗?我建议先把普通的东西(一直到冒号)去掉,然后用更具体的模式处理更具体的东西。一些细节 如中所示,grok{}可以采用多种模式:
filter {
grok { match => { "message" => [
"Duration: %{NUMBER:duration}",
"Speed: %{NUMBER:speed}"
] } }
}
默认情况下,它将在第一次匹配后停止处理,但这是可配置的
编辑:
根据其他注释,您还可以根据条件进行分支:
if [myField] == "someValue" {
grok {
...
}
}
else {
grok {
...
}
}
在本例中,您正在运行比较(“==”)或regexp(“=~”),以查看是否应该运行regexp(grok{})。根据完整的业务逻辑,这似乎是一种浪费。我想做以下事情:
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\u操作并使用if语句,如:
if (mCursor != null && mCursor.moveToFirst()) {
......
} else {
......
}
有可能吗?我用以下方法解决问题: 滤器 { 格罗克 { match=>[“message”,“(dhcpd\S+\S*({WORD:dhcp\u action\u test}))”] } 如果[消息]中有“DHCPINFORM” { 格罗克 { match=>[“message”,“((((({SYSLOGTIMESTAMP:timestamp})\s*(({HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%{WORD:dhcp\u action})]。[来自](({IPV4:dhcp\u client\u ip})]” } } 如果[消息]中的“DHCPDISCOVER”,则为 { 格罗克 { match=>[“message”,“(((({SYSLOGTIMESTAMP:timestamp})\s(%{HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%{WORD:dhcp\u action})。..[来自]({COMMONMAC:dhcp\u client\u mac})]] } } 其他的 { 删除{} } }
我想做一些像这样的事情:if(dhcp\u action==“dhcpinfo”){((({SYSLOGTIMESTAMP:timestamp})\s*({HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%%{WORD:dhcp\u action}).[for | on]({IPV4:dhcp\u client\u ip}).[从|到({COMMONMAC dhcp\u client\u mac}).*通过(%{USERNAME:interface})其他{(({SYSLOGTIMESTAMP:timestamp})s*({HOSTNAME:HOSTNAME})\sdhcpd\s+\s(%%{WORD:dhcp\u action})..[to]({IPV4:dhcp\u client\u ip}).*通过(%%{USERNAME:interface}))}这是可能的吗?是的,您可以使用条件,尽管您可能不想使用。我已经更新了我的原始答案。