Regex(grok)-为日志创建一般模式,但不必这样做

ruarlubt  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(121)

我很抱歉这个神秘的题目,但是我不知道如何正确的表达它。这些是日志类型:

{vpnclient} Client[10.10.10.10:54576](11764): sending R_KEYCHANGE message

{vpnclient} Client[10.10.10.10:54576](16031): sending R_IPCONFIG message - client IP = 172.11.11.11/255.255.255.0, CEP = 3600 s, DNS = 172.11.1.101, 172.11.1.102

这是我的grok模式:

^{vpnclient} %{WORD}\[%{IP:[client][ip]}:%{NUMBER:[source][port]}\]\(%{INT:[process][pid]}\): %{GREEDYDATA:message} (:?%{GREEDYDATA:kv_vpn_message})

我想做的是将连字符后的日志(- client IP)转发到kv过滤器。我的问题是-这种类型的日志并不总是出现,所以我想 Package 整个grok模式,所以它匹配到%{GREEDYDATA:message}%{GREEDYDATA:kv_vpn_message},但只有当它出现时。

hfyxw5xn

hfyxw5xn1#

您可以使用

^{vpnclient} %{WORD}\[%{IP:[client][ip]}:%{NUMBER:[source][port]}\]\(%{INT:[process][pid]}\): %{DATA:message}(?: - %{GREEDYDATA:kv_vpn_message})?$

有以下几个变化:

  • %{DATA:message}-message图案转换为非贪婪点图案.*?GREEDYDATA更改为DATA
  • (?: - %{GREEDYDATA:kv_vpn_message})?-是可选的非捕获组,它匹配-的一个或零个出现,然后将零个或更多个字符尽可能多地捕获到"kv_vpn_message"组中
  • $-字符串锚点的结尾,它允许"消息" DATA模式匹配到行尾。

相关问题