fluentd - Fluentd 消息解析以发送到多个目的地
问题描述
我们有如下消息。
{"message":"[{\"date\":1630060740.621981,\"log\":\"tenant 1 testing 10\",\"filename\":\"/var/log/input/tenant1/file1.log\",\"tenantid\":\"tenant1\"}]"}
{"message":"[{\"date\":1630060740.621981,\"log\":\"tenant 2 testing 10\",\"filename\":\"/var/log/input/tenant2/file1.log\",\"tenantid\":\"tenant2\"}]"}
根据租户 ID,我们希望将日志发送到不同的目的地。我们尝试使用解析器插件将内部字符串化的 JSON 解析为实际的 JSON,然后使用重写标签过滤器根据租户 ID 进行标记,最终对不同的标签使用不同的匹配。配置看起来像这样。
<filter *>
@type parser
key_name message
reserve_time true
<parse>
@type json
</parse>
</filter>
<match something>
@type rewrite_tag_filter
<rule>
key tenantid
pattern /tenant1/
tag ${tag}.a
</rule>
<rule>
key tenantid
pattern /tenant2/
tag ${tag}.b
</rule>
</match>
<match something.a>
@type http
endpoint xyz
open_timeout 2
<auth>
method basic
username abcd
password abcd
</auth>
<format>
@type json
</format>
<buffer>
flush_interval 10s
</buffer>
</match>
<match something.b>
@type http
endpoint abc
open_timeout 2
<auth>
method basic
username efgh
password efgh
</auth>
<format>
@type json
</format>
<buffer>
flush_interval 10s
</buffer>
</match>
但这不起作用,可能是因为我们将 JSON 数组作为message
. 有没有办法做到这一点?
基本上,解析器插件在 JSON 中制作记录,如下所示。
[{"date":1630060200.145695,"tenantid":"tenant1","filename":"/var/log/input/tenant1/file1.log","log":"tenant 1 testing 8"}]
这包含一个[]
我们无法在 rewrite_tag_filter 中正确解析的额外内容。有没有办法从 JSON 数组中获取 JSON 对象?解析应该包含类似下面的内容,以便 rewrite_tag_filter 工作。{"date":1630060200.145695,"tenantid":"tenant1","filename":"/var/log/input/tenant1/file1.log","log":"tenant 1 testing 8"}
解决方案
推荐阅读
- c - 使用 4 维立方体的指针
- arduino - 如何存储按下按钮,然后等到“millis() - changeTime >= 10000”,然后调用函数 changeLights()?
- html - 自动加载甚至没有链接的 css 文件
- macos - 如何取消 gdb 以进行卸载?
- html - iOS 上的 IFrame padding-bottom 问题(mobile-safari)
- bash - 使用 Bash 从文本文件中获取文本
- android - 使用 ACTION_GET_CONTENT 或 OPEN_DOCUMENT 从 Google 相册提供商处挑选
- c# - 解释器参数
- java - Spring boot REST api,通过外键而不是整个对象传递id
- vue.js - 尝试加载图像文件时出错 - Vuejs