我有一个设置,其中docker容器使用journald
日志驱动程序来编写日志。当前日志中的日志行将转发到主机上运行的rsyslog,但syslog行上的应用程序名称显示为dockerd
。
作为一种解决方法,我想将日志元数据中的CONTAINER_NAME
字段写入syslog中出现的行,这样我就可以确定哪个容器在主机之后写了哪一行。 syslog已发送到syslog聚合服务器。
有什么建议吗?
答案 0 :(得分:1)
我认为最接近你可以得到图像名称。您可以添加日志标记以在日志中显示图像名称。 v1.11.0中添加了此功能。例如:
docker run --log-driver=journald --log-opt tag="{{.ImageName}}
也看看log tag docs。希望这会有所帮助。
答案 1 :(得分:0)
我设法把它放在rsyslog.conf
中
if ( $!CONTAINER_TAG == "mycontainer" ) then {
action(type="omfile" file="/var/log/mycontainer.log")
stop
}
我可以测试它是否适用于此
docker run --log-driver=journald --log-opt tag="mycontainer" centos:latest echo Pierre7
我在log / var / log / mycontainer文件和日志中得到我的日志,我可以找到
journalctl --unit docker CONTAINER_TAG=mycontainer
很难找到信息,这是redhat文档中唯一记录的地方:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/s1-structured_logging_with_rsyslog.html
我的用例是,我希望日志能够获得它带来的所有好处,但是人们要求拥有普通文件的支持。我们还将使用splunkforwarder来使用文件。