我正在编写一个 Logstash 配置文件。
我有一个 grok 过滤器。我想知道 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
我想捕获所有三种类型的行所以我应该编写不同的匹配过滤器吗?还是可以在一个匹配中分别捕获 source、destination、somedata 字段?
寻求这方面的信息。
是的,我确实了解正则表达式和 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 错误?