Fluentd 过滤器以排除具有空值的键

Dar*_*Oem 3 regex fluentd

我想排除 serive_name 为空的行"service_name":""。这是我流利的 ​​conf

## match tag=debug.** and dump to console
<match debug.**>
  @type stdout
</match>
<source>
  @type tail
  path  /opt/wso2esb-4.9.0-wkr-1/repository/logs/wso2carbon.log
  pos_file /var/log/td-agent/tmp/wso2carbon.log.pos
  tag debug.wso2.esb
  format /^([TID:]* [^ ]* [^ ]* \[(?<time>[^\]]*)\]) ([^ ]* (?<level>[^ ]*))([^***]*[^=]*[^ ]*(?<service_name>[^,]*)[^=]*[^ ]*(?<step>[^,]*)[^ ]*[^=]*[^ ]*(?<message_id>[^,]*))/
  time_format %Y-%m-%d %H:%M:%S
#  keep_time_key true
</source>
Run Code Online (Sandbox Code Playgroud)

这是日志输出

2017-08-21 09:57:10 +0700 debug.wso2.esb: {"level":"INFO","service_name":" SA_VasGWLogSeq","step":" before vasgwInsertlog","message_id":" urn:uuid:2046f0ed-690d-47b1-aa86-d4a71c021a74"}
2017-08-21 09:57:10 +0700 debug.wso2.esb: {"level":"INFO","service_name":"","step":"","message_id":""}
2017-08-21 09:57:10 +0700 debug.wso2.esb: {"level":"INFO","service_name":" SA_VasGWLogSeq","step":" after vasgwInsertlog","message_id":" urn:uuid:2046f0ed-690d-47b1-aa86-d4a71c021a74"}
2017-08-21 10:16:10 +0700 debug.wso2.esb: {"level":"INFO","service_name":" SERVICE_NAME","step":" Before - SA_ServiceApiDSEp","message_id":" urn:uuid:39e0ecc1-dda5-4cd9-91fc-90e7ed4f5233"}
Run Code Online (Sandbox Code Playgroud)

我想排除下面的行。怎么做?

{"level":"INFO","service_name":"","step":"","message_id":""}
Run Code Online (Sandbox Code Playgroud)

第二个问题是为什么我在 value 之前有一个空格"service_name":" SERVICE_NAME",当我尝试Fluentular 时,我得到了一个没有空格的不错的输出

我已经通过向正则表达式添加一个空格解决了第二个任务。例如改变

[^=]*[^ ]*(?<service_name>[^,]*)[^=]*[^ ]* (?<service_name>[^,]*)


但我不知道如何编写过滤器以通过 key_name 排除具有空值的记录,例如"service_name":"".

Mas*_*rAM 7

grep过滤器插件exclude指令的使用似乎相当简单。

匹配一条空消息并使用“开始”( ^)排除它,后跟空消息和结束( $) 可以通过以下方式完成。

<filter **>
  @type grep
  <exclude>
    key service_name
    pattern /^$/
    # or, to exclude all messages that are empty or include only white-space:
    # pattern /^\s*$/
  </exclude>
</filter>
Run Code Online (Sandbox Code Playgroud)

请注意,0.12 和 1.x 之间的正则表达式符号发生了变化(现在使用前导和尾随斜杠)。