Splunk 如何区分 Docker 上下文中的 stdout 和 stderr 输出?

How can Splunk distinguish between output to stdout and stderr in Docker context?

我们有一个 Java 应用程序,可以 运行 在 Docker 容器中。它向 stdoutstderr 生成针对不同受众具有不同详细程度的消息。

将 Splunk 配置为日志驱动程序 Splunk a 收到的所有日志行都标有来源 stdout 尽管必须有日志行被记录到 stderr.

docker-compose:

中的 Splunk 日志驱动配置
logging:
    driver: splunk
    options:
        splunk-url: https://splunkhf:8088
        splunk-token: [TOKEN]
        splunk-index: splunk_index
        splunk-insecureskipverify: "true"
        splunk-sourcetype: log4j
        splunk-format: "json"
        tag: "{{.Name}}/{{.ID}}"

发送到 splunk 的示例日志消息:

{
   line: 2021-01-12 11:37:49,191;10718;INFO ;[Thread-1];Logger; ;Executed all shutdown events. 
   source: stdout 
   tag: service_95f2bac29286/582385192fde 
}

如何配置 Docker 或 Splunk 以正确区分这些不同的流?`

如果您 运行 来自 docker-compose 的服务没有 -d,那么日志将失去其原始来源。 Docker 和 Docker-Compose 似乎将容器的输出流中的所有内容都放到了 stdout 中,并将 stderr 用于它们的日志。

使用 -d 标志,日志消息不会丢失其原始输出流。