我是 fluentd 的新手。
我有一些在 Docker 容器中运行的应用程序。它们是 Java 应用程序,以 JSON 格式记录。JSON 消息通常分为多行。
我想使用 Docker fluentd 日志驱动程序将这些消息发送到中央 fluentd 服务器。
Docker 驱动程序将每一行单独发送到 fluentd,所以我需要能够合并这些多行消息。
我正在寻找一些关于如何实现这一目标的指示。
使用开箱即用的 fluentd 配置我的日志如下所示:
20170501T050820+0000 docker.fa5077070a33 {"log":"{\"timestamp\":\"2017-05-01T05:08:20.168Z\", \"applicationName\":\"my-event-publisher\", \"applicationVersion\":\"0.0.6-SNAPSHOT\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout"}
20170501T050820+0000 docker.fa5077070a33 {"container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":" \"logLevel\":\"INFO\", \"pid\":\"1\", \"threadId\":\"Thread-4\", \"host\":\"fa5077070a33\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e"}
20170501T050820+0000 docker.fa5077070a33 {"source":"stdout","log":" \"logger\":\"org.springframework.context.support.DefaultLifecycleProcessor\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"}
20170501T050820+0000 docker.fa5077070a33 {"container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":" \"message\":\"Stopping beans in phase 2147483647\""}
20170501T050820+0000 docker.fa5077070a33 {"source":"stdout","log":"}","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"}
我应该按照什么顺序来处理这个问题?
我需要:
- 提取每行的“日志”部分
- 查找正则表达式 /^{"timestamp/ 来确定消息的开始
- 将每个日志语句合并为一个
- 将日志字符串解析为实际的 JSON
说实话,我不太关心 fluentd 的格式——添加时间戳和 docker..
我宁愿只拥有一个包含我的 JSON 消息的文件,而不添加任何由 fluentd 添加的附加字段。
我已经看到了有关使用“解析器”的文档,但正如我所说,我只是不太确定顺序,因为我正试图将多行 JSON 结合在一起。