我正在使用此工具https://grokdebug.herokuapp.com/测试我的grok解析器。我拥有的原始字符串类似于:
2020-05-01 01:59:10 server1 17.5.36.8 POST /v1/user.aspx r=1000&11:59:11.219&Method=Start&Credentials=xxxxxx:++http://localhost/v1/user.aspx&Reque
我想将数据解析为:
{
Method: Start,
r: 1000
Credential: xxxxx
}
我正在查看解析器https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns,但找不到合适的解析器。
%{TIMESTAMP_ISO8601:timestamp}\s%{GREEDYDATA:server}\s%{IP:ip}\s%{GREEDYDATA:request_type}\s%{PATH:path}\sr=%{NUMBER:r}&%{TIME:some_time}&Method=%{GREEDYDATA:method}&Credentials=%{GREEDYDATA:username}:%{GREEDYDATA:password}%{MY_URI:uri}
它与下面显示的custom pattern一起使用:
MY_URI http://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
我使用了自定义模式,因为原始%{URI}模式中的%{URIPROTO}无法正确将凭据与uri分开。我假设凭据以以下格式给出:
username:password
如果我错了,请替换:
Credentials=%{GREEDYDATA:username}:%{GREEDYDATA:password}
with:
Credentials=%{GREEDYDATA:credentials}
如果:++
字符串将凭据与uri分开,则可以使用它来应用%{URI}而不是%{MY_URI}。它在Grok Debugger中起作用。但是,输出在Grok Constructor Matcher中更具可读性:
由于您只对某些领域感兴趣,请使用remove_field插件。
您的
logstash.conf
文件可能看起来像这样(如果您将具有自定义模式的文件放在配置文件旁边的patterns
目录中:]
# logstash.conf … filter { grok { patterns_dir => ["./patterns"] match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s%{GREEDYDATA:server}\s%{IP:ip}\s%{GREEDYDATA:request_type}\s%{PATH:path}\sr=%{NUMBER:r}&%{TIME:some_time}&Method=%{GREEDYDATA:method}&Credentials=%{GREEDYDATA:username}:%{GREEDYDATA:password}%{MY_URI:uri}" } mutate { remove_field => ["timestamp", "server", "ip", "request_type", "path", "some_time", "uri"] } } …