如何使用 Logstash 的 grok 捕获和替换某些文本后的数字字符串?

How to capture and replace string of numbers after certain text with Logstash's grok?

我们在日志中有一条消息具有以下结构,我们想使用 Logstash 的 grok 隐藏 accountId 信息:

Message: Timestamp: 19-02-2015 13:55:37 CorrelationId: xx999-9999-99999-9999-xxxxxxxx Data: RequestMessageId - sdgersc-345frh-346yfh-34563sd-345634d Data: ReplyMessageId - 1123223-xx235-xx234-x46sdg-654segsdg Data: -100 - NameOfTheService_020: Error message Data: accountId - 1324235234 Data: caseNumber - 123235345

我们要过滤掉accountId的信息,最好用"hidden".

的文字代替

我们找不到在grok中替换数据的方法,所以我们尝试在过滤器中使用grok如下:

grok { 
    drop_if_match => "message", "Data: accountId - ${NUMBER}" ]
}

这 return 表达式不是 return 布尔值。

有人知道如何让它工作吗?

有一种方法可以替换 grok 中的内容。您需要在过滤器中使用 overwritehttp://logstash.net/docs/1.4.2/filters/grok

例如

grok { 
    overwrite => "message"
    match [ "message", "%{SYSLOGBASE} %{GREEDYDATA:message}" ]
}

通常这是为了砍掉时间戳之类的东西,并保留消息文本。但我不明白为什么你不能用它来破坏帐户 ID。

没那么难,

gsub => ["message", "Data: accountId - \d+", "Data: accountId - hidden"]

有效。