首页 > 解决方案 > 如何在 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"}"???

标签: c#elasticsearchfluentd

解决方案


避免这种情况的一种方法是添加一个JSON 摄取处理器,该处理器将在索引文档之前解析消息。

首先,您需要创建摄取管道,因此运行以下命令:

PUT _ingest/pipeline/json-parser
{
  "processors": [
    {
      "json": {
        "field": "message",
        "add_to_root": true
      }
    }
  ]
}

然后您需要修改索引设置以确保上述管道在每个文档索引上运行:

PUT trans/_settings
{
   "index.default_pipeline": "json-parser"
}

然后您可以启动 FluentD,它应该会自动运行。


推荐阅读