logstash 中的数据模式 - grok
DATA pattern in logstash - grok
我想了解 logstash 的 grok 插件中的 DATA
模式。
根据文档 DATA
匹配如下:
DATA .*?
--> I interpreted it as anything with length 1 to n [Please
correct me if my understanding is wrong].
在我的脚本中,它无法正确解析我的输入。
Logstash 配置文件:
input{
file {
path => ["/home/osboxes/logstash_conf/mydir/test_logs/*"]
start_position => beginning
sincedb_path => "/home/osboxes/logstash_conf/mydir/.sincedb"
}
}
filter{
grok {
match => { "message" => "^%{TIMESTAMP_ISO8601:timeStamp},%{DATA:ID},%{DATA:somedata}" }
}
}
output {
stdout {
codec => json_lines
}
}
输入:
2017-01-09 02:00:03.887,a,a
输出:
{
"message": "2017-01-09 02:00:03.887,a,a",
"@version": "1",
"@timestamp": "2017-01-09T12:28:20.958Z",
"path": "/home/osboxes/logstash_conf/mydir/test_logs/data",
"host": "osboxes",
"timeStamp": "2017-01-09 02:00:03.887",
"ID": "a"
}
我预计标签 somedata
将填充值 [就像标签 ID
] 一样,但输出中省略了它。任何人都请帮助我理解 DATA
模式的行为。
.*?
零次到无限次匹配,越少越好,按需扩展。它可以匹配 零 次的事实是您看不到结果的原因。
写出来,有问题的部分是这样的:
,(.*?),(.*?)
(添加捕获组以提高可读性)
这匹配:,a,
1.Take第一个,
并匹配它。
2.Try 以尽可能少的方式匹配 .*?
(逐个字符直到模式有效)这匹配 a
3.Try 匹配下一个 ,
。这样就成功了,所以第一个 .*?
就完成了。
4.Try 匹配 .*?
。由于这可以匹配 零 次,因此它会这样做并且匹配完成。
解决您问题的简单方法是在模式末尾添加一个 $
。 $
是字符串锚点的结尾,因此您的第二个 .*?
被迫匹配另一个 a
.
我想了解 logstash 的 grok 插件中的 DATA
模式。
根据文档 DATA
匹配如下:
DATA .*?
--> I interpreted it as anything with length 1 to n [Please correct me if my understanding is wrong].
在我的脚本中,它无法正确解析我的输入。
Logstash 配置文件:
input{
file {
path => ["/home/osboxes/logstash_conf/mydir/test_logs/*"]
start_position => beginning
sincedb_path => "/home/osboxes/logstash_conf/mydir/.sincedb"
}
}
filter{
grok {
match => { "message" => "^%{TIMESTAMP_ISO8601:timeStamp},%{DATA:ID},%{DATA:somedata}" }
}
}
output {
stdout {
codec => json_lines
}
}
输入:
2017-01-09 02:00:03.887,a,a
输出:
{
"message": "2017-01-09 02:00:03.887,a,a",
"@version": "1",
"@timestamp": "2017-01-09T12:28:20.958Z",
"path": "/home/osboxes/logstash_conf/mydir/test_logs/data",
"host": "osboxes",
"timeStamp": "2017-01-09 02:00:03.887",
"ID": "a"
}
我预计标签 somedata
将填充值 [就像标签 ID
] 一样,但输出中省略了它。任何人都请帮助我理解 DATA
模式的行为。
.*?
零次到无限次匹配,越少越好,按需扩展。它可以匹配 零 次的事实是您看不到结果的原因。
写出来,有问题的部分是这样的:
,(.*?),(.*?)
(添加捕获组以提高可读性)
这匹配:,a,
1.Take第一个,
并匹配它。
2.Try 以尽可能少的方式匹配 .*?
(逐个字符直到模式有效)这匹配 a
3.Try 匹配下一个 ,
。这样就成功了,所以第一个 .*?
就完成了。
4.Try 匹配 .*?
。由于这可以匹配 零 次,因此它会这样做并且匹配完成。
解决您问题的简单方法是在模式末尾添加一个 $
。 $
是字符串锚点的结尾,因此您的第二个 .*?
被迫匹配另一个 a
.