java - 将 Docker 的 splunk 日志驱动程序拆分为多个索引

标签 java docker logging splunk

我有一个在 docker 内运行的小型 Java 应用程序。申请是 Dropwizard应用程序,这意味着它具有使用 log4j 记录的 Java 类,以及具有请求记录功能的 Web 端点 (JaxRS)。

现在,我想将我的容器日志转发到 Splunk。问题是我真的希望它们分成两个索引;一个用于应用程序日志,一个用于请求日志。我们可以调用索引 cool_appcool_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/

相关文章:

java - 错误 : cannot access android. view.SurfaceView

java - 你认为我滥用了静力学吗?

Python 记录多个文件

node.js - 限制 Docker 容器的文件访问

c++ - 仅在调试时启用 Boost.Log

Java:您可以从您自己的类中公开第 3 方接口(interface)吗

java - 在 Java 中高效访问图像像素

java - Android StartActivity 不会启动新 Activity

reactjs - 如何让我的 docker 容器根据源文件的更改进行更新?

docker - Dockerfile中的条件复制/添加?