如何解决Grok 没有返回有效的 JSON
以下日志行为 grok 模式提供无效的 json
2021-06-15 10:05:55:617|[28]|test-backend|ERROR|STDOUT|test|test-service|abcd1234|API_CALL|test|Error|Controller {"testtag":["test error message"]}
格罗克
(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}.%{NONNEGINT})\|\[(?<thread>[^\]]+)\]\|%{IPORHOST:pod_instance}\|%{LOGLEVEL:severity}\|%{GREEDYDATA}\|%{GREEDYDATA:application}\|%{GREEDYDATA:microservice}\|%{UUID:uuid}\|(?<message_type>[^|]*)\|(?<message>[^|]*)(?<options>(?:(\|.*)|(|AD.*)|()))
和选项标签返回为
"options": [
[
"|Error|Controller {"testtag":["test error message"]}"
...
因此整个 json 都失效了。我希望生成一个有效的 json 是否有任何方法可以在 json 字符串中为附加引号 "
添加转义符,例如 belo
"|Error|Controller {\"testtag\":[\"test error message\"]}"
解决方法
您可以尝试结合GROK和KV过滤器来过滤掉日志消息。
首先使用下面的 grok 模式将日志消息过滤到不同的字段中:
(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}.%{NONNEGINT})\|\[(?<thread>[^\]]+)\]\|%{IPORHOST:pod_instance}\|%{LOGLEVEL:severity}\|%{GREEDYDATA}\|%{GREEDYDATA:application}\|%{GREEDYDATA:microservice}\|%{UUID:uuid}\|(?<message_type>[^|]*)\|(?<message>[^|]*)\|(?<message_error>[^|]*)\|(?<message_error_part>[^|]*) \{%{GREEDYDATA:tagmsg}\}
现在,我们将使用 KV 过滤包含 json 部分的字段 tag
。
filter {
kv {
source => "tagmsg",value_split => ":",trim_value => "\[\]"
}
}
有关更多过滤器配置选项,请参阅 KV Filter。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。