带有 grokPattern 的子串

Substring with grokPattern

有了这个例子数据

GigabitEthernet102/0/0/28 = TLU-46356_CAR_ONE_RIVERO_AUTO_CENTER_PRINCIPAL Traffic (SNMP Traffic) Down (The interface is disconnected: ifOperStatus=down (2) (code: PE058))

我尝试获取找到“TLU”模式的子字符串并创建一个像这样的新字段“TLU-46356”

我使用这样的 grok 模式

if ([logMessage] =~ /TLU-/){ grok { match => { "logMessage" => 'TLU=(?<TLU>[0-9a-fx]{8})' } }

但是不起作用,结果是“grokparsefailure”

任何想法,请。

我刚刚在 Kibana 的 Grok Debugger 中测试了您的示例,这对我有用

(?<TLU>[0-9a-fx]{5})

出于某种原因 TLU= 一开始不起作用,但 grok 无论如何都会选择命名的捕获组,所以即使没有它,你也会得到名为 TLU 的字段。

问题的另一部分是您试图匹配从 09、从 af 或 [=18] 的 8 个字符=],但在您的示例中 TLU- 之后的数字只有 5 个字符长。因此,要么日志具有您未提及的可变字符数,您应该使用 {n, m} 之类的内容来定义要捕获的字符串的长度。或者你可以只说 * 并用 _ 终止它,就像这样

(?<TLU>[0-9a-fx]*)_

如果我遗漏了什么,请用额外的数据更新问题并告诉我。祝你好运!