我有一个在 docker 内运行的小型 Java 应用程序。申请是 Dropwizard应用程序,这意味着它具有使用 log4j 记录的 Java 类,以及具有请求记录功能的 Web 端点 (JaxRS)。
现在,我想将我的容器日志转发到 Splunk。问题是我真的希望它们分成两个索引;一个用于应用程序日志,一个用于请求日志。我们可以调用索引 cool_app
和 cool_req
.
有没有办法做到这一点?启动我的 dropwizard 应用程序会导致它将应用程序日志和请求日志都输出到 stdout
. (同时也记录到两个文件)
我已经尝试过 docker logdriver,但它似乎只适用于一个索引。
我可能会补充一点,如果可以选择,可以很容易地通过 regEx 分隔日志
最佳答案
让我首先建议(如果可能的话)将此容器拆分为多个容器。在同一个容器中运行多个进程是一种反模式,应该避免。所以这基本上是你有这个问题的一个原因。如果您将使用 Kubernetes,它将允许您在同一个 Pod 中调度多个容器,允许它们共享相同的卷和环回接口(interface),从而为您提供许多用于进程间通信的各种选项。
但我知道这并不总是可以做到的。这样,可能最好的解决方案是将这些日志保存为应用程序日志,这意味着您将拥有此容器的数据卷,它将存储这些日志,而不是将它们转发到标准输出。要将这些日志发送到 Splunk,您可以使用带有 Splunk Universal Forwarder 的 Sidecar 容器或我们的 collector (如果您是我们的客户或想成为)。
如果侧容器不是一个选项,最后的选择是将日志保留在容器中,并将 Splunk UF 添加到镜像并与应用程序进程一起运行。 https://docs.docker.com/config/containers/multi-service_container/
顺便说一句,我们正在开发一些新功能,这将允许以最少的配置更改转发应用程序日志。
关于java - 将 Docker 的 splunk 日志驱动程序拆分为多个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51076235/