无法解析流利的JSON日志字段

时间:2020-06-23 14:11:04

标签: docker fluentd

我正在关注https://docs.fluentd.org/container-deployment/docker-logging-driver上的fluentd教程

但是我无法使JSON解析器正常工作。

我的流利操作如下:

# ./demo.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match *>
  @type stdout
</match>

<filter docker.**>
  @type parser
  key_name log
  reserve_data true
  <parse>
    @type json # apache2, nginx, etc...
  </parse>
</filter>
docker run -it -p 24224:24224 -v $(pwd)/demo.conf:/fluentd/etc/demo.conf -e FLUENTD_CONF=demo.conf fluent/fluentd:v1.3.2

并且我正在使用以下docker run命令来模拟JSON日志到fluentd

docker run --log-driver=fluentd ubuntu echo '{"test":"test"}'
Expected: 2020-06-23 13:52:31.000000000 +0000 e54806b99130: {"log":"{\"test\":\"test\"}","container_id":"e54806b9913010d5ecb79b305d227db9e706299ad94bd070be6042dce735ed3b","container_name":"/wizardly_kalam","source":"stdout","test":"test"}
Actual:   2020-06-23 13:52:31.000000000 +0000 e54806b99130: {"log":"{\"test\":\"test\"}","container_id":"e54806b9913010d5ecb79b305d227db9e706299ad94bd070be6042dce735ed3b","container_name":"/wizardly_kalam","source":"stdout"}

根据reserve_data文档,它应该可以工作,但是我无法理解问题所在。

1 个答案:

答案 0 :(得分:1)

也许我遗漏了一些东西,但是Fluentd不尊重配置中步骤的顺序吗?您在解析字段之前将其打印到标准输出。试试这个:

# ./demo.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<filter docker.**>
  @type parser
  key_name log
  reserve_data true
  <parse>
    @type json # apache2, nginx, etc...
  </parse>
</filter>

<match *>
  @type stdout
</match>
相关问题