Logstash 用Grok捕捉逗号分隔的模式

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]。这由%

我正在解析一组日志,其中一个字段给了我问题。 格式是

标题、日期等字段1=数据,字段2=数据,字段3=数据,字段4=数据 我有一个通用的解析器,它读起来像

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.Req‌​uest-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}...