logstash-grok中的数据模式
我试图理解logstash的grok插件中的logstash-grok中的数据模式,logstash,logstash-grok,Logstash,Logstash Grok,我试图理解logstash的grok插件中的数据模式。 根据文档数据匹配如下: 数据。*?-->我将其解释为长度为1到n的任何内容[请 如果我的理解有误,请纠正我] 在我的脚本中,它无法正确解析我的输入。 日志存储配置: input{ file { path => ["/home/osboxes/logstash_conf/mydir/test_logs/*"] start_position => beginning sincedb_p
数据模式。
根据文档数据
匹配如下:
数据。*?
-->我将其解释为长度为1到n的任何内容[请
如果我的理解有误,请纠正我]
在我的脚本中,它无法正确解析我的输入。
日志存储配置:
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"
}
输入:
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"
}
输出:
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
]一样],但它从输出中被忽略。任何人请帮助我理解数据
模式的行为 *?
在零次和无限次之间进行匹配,匹配次数尽可能少,并根据需要进行扩展。它可以匹配零次这一事实是您看不到结果的原因
写出后,问题部分如下所示:
,(.*),(.*)
(为了可读性而添加了捕获组)
这与:,a,
1.取第一个,
并匹配它
2.尽可能少地匹配*?
(一个字符一个字符地匹配,直到模式有效),这与a
3.尝试匹配下一个,
。这成功了,第一个*?
就完成了
4.尝试匹配*?
。因为它可以匹配零次,所以它将这样做,并且匹配完成
解决问题的简单方法是在模式末尾添加一个$
$
是一个字符串结束锚,因此您的第二个*?
将被迫与另一个a
匹配。谢谢您的回答。在这种情况下,是否有数据
模式可靠,或者我需要寻找其他模式?正如您所提到的,它可能匹配零字符,在某些情况下,它可能会跳过我确实感兴趣的值…@G.S如果您使用$
终止您的模式,您应该可以继续。这将确保您的第二个数据必须匹配某些内容。请理解。我只是担心类似的行为发生在<代码>数据< /代码>中间。代码>$
只能用于最后一个字段。不确定中间字段的数据是否会失败。只是为了确保它是正确的reliable@G.S如果你真的想确保你的模式工作,你可以使用Grokdebugger。非常感谢!这很有帮助。以防万一,如果有人遵循此线程并希望调试-这是grok在线调试器-