c# - 如何在 FluentD 中使用转发插件时将输入读取为 json 并转发相同内容?
问题描述
我正在将数据从我的 .Net 应用程序发送到 FluentD,然后将其转发到 Elastic 搜索。数据以字符串 "{\"foo\":\"abc\"}" 的形式发送,此数据应在 FluentD 级别读取为 Json,然后将其转发到 Elastic Search。我尝试在 FluentD 中使用 Json 解析器和格式化程序,但是转发插件不支持格式化程序,解析器也没有帮助,下面是我尝试的配置
<source>
@type forward
@id input_forward
</source>
<match abc.*>
@type elasticsearch
index_name trans
format json
<parse>
@type json
</parse>
</match>
我尝试将 Json 对象设置为 FluentD,但我不断收到错误消息,因为“不支持此操作,因为无法实例化 'Newtonsoft.Json.Linq.JToken'。”
我如何将 FluentD 和 Elastic Search 的输出视为"{"foo":"abc"}"
???
解决方案
避免这种情况的一种方法是添加一个JSON 摄取处理器,该处理器将在索引文档之前解析消息。
首先,您需要创建摄取管道,因此运行以下命令:
PUT _ingest/pipeline/json-parser
{
"processors": [
{
"json": {
"field": "message",
"add_to_root": true
}
}
]
}
然后您需要修改索引设置以确保上述管道在每个文档索引上运行:
PUT trans/_settings
{
"index.default_pipeline": "json-parser"
}
然后您可以启动 FluentD,它应该会自动运行。