Logstash 用Grok捕捉逗号分隔的模式
我正在解析一组日志,其中一个字段给了我问题。 格式是 标题、日期等字段1=数据,字段2=数据,字段3=数据,字段4=数据 我有一个通用的解析器,它读起来像Logstash 用Grok捕捉逗号分隔的模式,logstash,logstash-grok,Logstash,Logstash Grok,我正在解析一组日志,其中一个字段给了我问题。 格式是 标题、日期等字段1=数据,字段2=数据,字段3=数据,字段4=数据 我有一个通用的解析器,它读起来像 match => [ "message","%{DATA:..header..} %{DATA}=%{DATA:service},%{DATA}=%{DATA:roles}],%{DATA}=%{DATA:macaddress},%{DATA}=%{DATA:nasip}"] 有时,角色字段的值部分如下所示 值,[Admin]。这由%
match => [ "message","%{DATA:..header..} %{DATA}=%{DATA:service},%{DATA}=%{DATA:roles}],%{DATA}=%{DATA:macaddress},%{DATA}=%{DATA:nasip}"]
有时,角色字段的值部分如下所示
值,[Admin]。这由%{DATA}=%%{DATA:roles}]中的]处理,
但在其他情况下,我会
subvalue1, subvalue2, subvalue3,
或
或
解析器只捕获子值1。如你所见。。子VAL的数量可变,当缺少]时,很难捕捉到它们
下面是一个日志创建问题的示例:
local1--debug--10.47.130.2--2017-03-24--2017-03-24T11:29:51-04:00--11:29:51,545 10.241.186.253 ZTP0 SESSION 20 1 0 Common.Username=LABF5CHK,Common.Service=F5_HealthCHK,Common.Roles=Employee, [User Authenticated],Common.NAS-IP-Address=xxxxxxxxxxxx,Common.Request-Timestamp=2017-03-24 11:27:56-04
这有什么办法吗 对于可变长度逗号分隔的数据,我建议将整个值集捕获为一个字段,然后使用 对于解析一组key=value对,我建议使用 因此,您的配置将像这样工作
filter {
grok {
match => [ "message","%{DATA:..header..} %{GREEDYDATA:kv_pairs}"]
}
kv {
source => "kv_pairs"
field_split => ","
}
csv {
# assumes that the key was 'roles'
source => "roles"
target => "role_list"
}
}
我不确定日志消息的确切格式,但如果消息的格式不将子值csv列表与k=v对列表分开,则kv filter about可能会出错,如下所示:
...,key=value,roles=subval1,subval2,subval3,key2=value2...
或者使用[打开列表,但不关闭它
编辑:看起来第一个破案事实上就是你所面临的
如果角色部分始终位于同一位置,后跟同一个键,则可以使用
...Common.Roles=%{DATA:roles},Common.NAS-IP-Address=%{DATA:nasip}...
如果这些kv对一致地处于相同的排列中,则使用此模式应该有效。如果字段完全一致或可由比。*更具体的正则表达式匹配?您应该使用它,因此使用实际的键名/模式,而不是%{DATA}=这很容易引起不匹配。如果您提供一些logslocal1-debug-10.47.130.2-2017-03-24-2017-03-24T11:29:51-04:00-11:29:51545 10.241.186.253 ZTP0会话20 1 0 Common.Username=LABF5CHK,Common.Service=F5_HealthCHK,Common.Roles=Employee,[用户验证],Common.NAS IP Address=xxxxxxxxxxx,Common.Request Timestamp=2017-03-24 11:27:56-04这是一个示例日志行…看到我的问题了吗?我不认为真的不能使用csv筛选器。是的,我可以理解为什么这个问题真的让你很烦恼。这对我未来的解析项目也很有帮助。谢谢。
...,key=value,roles=subval1,subval2,subval3,key2=value2...
...Common.Roles=%{DATA:roles},Common.NAS-IP-Address=%{DATA:nasip}...