【问题标题】:fluentd output json value as json without message_keyfluentd 将 json 值输出为没有 message_key 的 json
【发布时间】:2023-03-08 09:52:01
【问题描述】:

我正在创建一个带有过滤、转换和多个输出路由的日志管道。

我在输出原始日志时遇到问题(没有“message_key”)。

目前,日志如下:

{"log": {"type": "debug", "log" :"This is the log message" , <More Entries>} }

我想删除“日志”message_key 并输出:

{"type": "debug", "log" :"This is the log message", <More Entries>}

我试过了:

1.

<filter *>
  @type parser
  key_name log
  <parse>
    @type json
  </parse> 
</filter>

由于类型已经是 json,可能会出错。

2.

<filter *>
  @type parser
  key_name log
  <parse>
    @type none
  </parse> 
</filter>

并得到了这个输出(消息“message_key”而不是当前的“日志”):

{"message": {"type": "debug", "log" :"This is the log message"} }
  1. 尝试使用@type record_transformer,但&lt;record&gt; 是键值,我只想选择值。

  2. 尝试使用单个值格式化,但输出为:

    {"type" =&gt; "debug", "log" =&gt; "This is the log message"}

如何做到这一点?在输出日志之前删除 message_key 的最佳方法是什么?

【问题讨论】:

    标签: fluentd


    【解决方案1】:

    在浏览了 fluentd 插件here 之后,我没有找到一种方法来做我想做的事,所以我最终写出了自己的插件。

    我不会接受我的回答,因为我希望有人会使用经过认证的插件提供更好的服务。

    以防万一您急需解决方案,这里是插件:

    require "fluent/plugin/filter"
    
    module Fluent
      module Plugin
        class JsonRecordByKeyFilter < Fluent::Plugin::Filter
          Fluent::Plugin.register_filter("json_record_by_key", self)
    
          config_param :key
    
          def filter(tag, time, record)
            record[@key]
          end
        end
      end
    end
    

    用法:

    <filter *>
      @type json_record_by_key
      key log
    </filter>
    

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      相关资源
      最近更新 更多