格罗克过滤器如何在 logstash 中工作



我正在编写一个 Logstash 配置文件。

我有一个格罗克过滤器。我想知道 grok 过滤器中的匹配是如何工作的。

我参考了logstash方面的一个例子,并看到了以下内容:

防爆日志:55.3.244.1 GET /index.html 15824 0.043
它使用以下过滤器解析:

filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }

这意味着我们正尝试按顺序匹配整个日志行?我的日志行不同。它们并不总是在一个适当的框架内。
它就像下面的那些:

 1. 11:10:15---somedata
 2. 11:10:20---source--destination-- somedata
 3. somedata

我想捕获所有三种类型的行那么我应该编写不同的匹配过滤器吗?或者是否可以在 SIGLE 匹配中分别捕获源、目标、某些数据字段?

寻求这方面的信息。

是的,我确实了解正则表达式和 grok 模式的基础知识。但我仍然对如何为以下内容编写匹配块感到困惑。

line 1: timestamp source destination a=0,b=1,c=3,d=4
line 2: timestamp a=1,e=5, b=1
line 3: g=0

假设我的日志文件中有这 3 行,我想捕获具有 b 和 g 值的行。我的匹配块会是什么样子?

match => message ["b=":variable_b,"g=":variable_g]

这会捕获所有带有 b 和 g 的行吗?? 对于 b,它应该捕获 1 行和 2 行。 对于 g,它必须捕获 3。所以我的输出应该有所有三行??这是它的工作原理还是会抛出 grokparse 错误?

grok 过滤器与匹配块中的模式一起工作。它用作正则表达式(有关定义,请参阅此处)。每个模式由两部分组成:%{SYNTAX:SEMANTIC}
如果从模式创建的正则表达式与整行匹配,则SYNTAX中的值将添加为名称为 SEMANTIC 的字段。
有关详细信息,请参阅文档。

您可以在过滤器中有多个 grok 模式:

grok {
    match => {
        "message" => [
            "%{TIME}--%{DATA:source}--%{DATA:destination}--%{DATA:somedata}",
            "%{TIME:timestamp}--%{GREEDYDATA:somedata}",
            "%{GREEDYDATA:somedata}"
        ]
    }
}

另外,从 Chro 的评论中:默认情况下,Grok 过滤器将尝试按照提供的顺序匹配模式。因此,如果您将第三个(GREEDYDATA)放在第一位,它将简单地匹配然后离开过滤器。您可以通过将其设置为 false(默认情况下为 true)来使其与break_on_match设置匹配多个模式。


通过更新:

在您的情况下,如果您有这些行:

timestamp source destination a=0,b=1,c=3,d=4
timestamp a=1,e=5, b=1
g=0

并且您希望提取bg值,仅此而已,您必须使用多个模式,一个用于获取b值,另一个用于'g 值:

match => message [
    "b=%{NUMBER:b}",
    "g=%{NUMBER:g}"
]

Logstash 逐行处理日志,输出将是在该行上完成的流程的结果。如果解析成功,grok 过滤器会尝试分析具有模式和添加字段的行。它不会捕获线条。

相关内容

  • 没有找到相关文章

最新更新