如何从字符串中提取关键字值

问题描述 投票:0回答:1

我正在使用此工具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,但找不到合适的解析器。

logstash-grok grok
1个回答
0
投票
尝试以下模式:

%{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中更具可读性:enter image description here

由于您只对某些领域感兴趣,请使用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"] } } …

© www.soinside.com 2019 - 2024. All rights reserved.