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