Grok模式可从Nifi日志中检索处理器ID

问题描述

谁能帮助我正确的Grok模式从nifi的以下示例日志(仅消息部分)中仅检索id值

  1. o.a.n.c.s.StandardControllerServiceNode StandardControllerServiceNode [service = DBCPConnectionPool [id = 5609ac16-0174-1000-eeee-ffffd19aae44]
  2. o.a.n.c.s.StandardControllerServiceNode无法调用DBCPConnectionPool [id = 5609ac16-0174-1000-hhhh-ffffd19aae44]的@OnEnabled方法
  3. o.a.n.c.s.StandardControllerServiceNode无法调用DBCPConnectionPool [id = 5609ac16-0174-1000-gggg-ffffd19aae44] *的@OnEnabled方法*

我尝试使用下面的模式,但是它正在检索整个消息,但无法单独获取id值

  • %{TIMESTAMP_ISO8601:timestamp}%{LOGLEVEL:severity} [%{DATA:thread}]%{DATA:class}%{GREEDYDATA:message}

解决方法

如果您只想提取ID,则可以使用以下模式。

\[id=%{DATA:id}\]

这将匹配[id =,然后在下一个]之前获取所有内容。

您可以通过定义一个更准确地匹配ID模式的自定义模式(而不是使用DATA)来使其更强大。

我将以下资源用于GROK模式

  1. https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
  2. https://grokconstructor.appspot.com/do/match
,

您可以使用类似下面的方法从日志中捕获UUID。

filter {
   grok{
     match =>  { "message" => "%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{LOGLEVEL:severity}%{SPACE}\[%{DATA:thread}\]%{SPACE}%{DATA:class}%{SPACE}%{GREEDYDATA}\[id=%{UUID:id}\]%{GREEDYDATA}"} 
   }
}

它应该提供如下输出

{
        "thread" => "Curator-Framework-0","id" => "5609ac16-0174-1000-eeee-ffffd19aae44","@timestamp" => 2020-10-06T11:24:24.703Z,"path" => "/usr/share/logstash/stack/data/data.log","timestamp" => "2016-08-04 13:26:35,475","severity" => "DEBUG","@version" => "1","host" => "356136d6f0b4","message" => "2016-08-04 13:26:35,475 DEBUG [Curator-Framework-0] o.a.n.c.s.StandardControllerServiceNode StandardControllerServiceNode[service=DBCPConnectionPool[id=5609ac16-0174-1000-eeee-ffffd19aae44]"
}

假设示例日志条目为

2016-08-04 13:26:35,475 DEBUG [Curator-Framework-0] o.a.n.c.s.StandardControllerServiceNode StandardControllerServiceNode[service=DBCPConnectionPool[id=5609ac16-0174-1000-eeee-ffffd19aae44]