我遇到了docker日志记录的问题,在阅读了很多来源之后没找到解决方案:有没有办法在/var/log/messages
中丢弃docker守护进程的消息并选择其他位置?
答案 0 :(得分:2)
配置rsyslog以将Docker日志隔离到自己的文件中。为此,请创建/etc/rsyslog.d/10-docker.conf并将以下内容复制到文件中。
# Docker logging
daemon.* {
/var/mylog
stop
}
总之,这会将守护程序类别的所有日志写入/ var / mylog,然后停止处理该日志条目,因此不会将其写入系统缺省syslog文件。
答案 1 :(得分:1)
根据the Docker documentation,您可以指定不同的驱动程序作为docker守护程序的命令行参数或(最好)在daemon.json
配置文件中。有几种驱动程序,例如对于Syslog,基于HTTP的日志记录,......
<强>更新强>
以下是Syslog的示例配置部分(来自文档):
{
"log-driver": "syslog",
"log-opts": {
"syslog": "udp://1.2.3.4:1111"
}
}
答案 2 :(得分:1)
好吧,我知道这个问题已经很老了,但我认为回答得还不错,没有给出正确的答案。
首先将它保存消息到该特定位置的原因从rsyslog配置(/etc/rsyslog.conf)开始,行如下:
$ ModLoad imjournal#提供对系统日志的访问
因此,由于docker将信息保存到systemd日志中,因此以/ var / log / messages结尾。
要想将其保存到其他位置,必须在/etc/rsyslog.d/docker.conf
中创建如下规则$FileCreateMode 0644
template(name="DockerLogFileName" type="list") {
constant(value="/var/log/docker/")
property(name="syslogtag" securepath="replace" \
regex.expression="docker/\\(.*\\)\\[" regex.submatch="1")
constant(value="/docker.log")
}
if $programname == 'dockerd' then \
/var/log/docker/combined.log
if $programname == 'dockerd' then \
if $syslogtag contains 'docker/' then \
?DockerLogFileName
else
/var/log/docker/no_tag/docker.log
$FileCreateMode 0600
我在这里找到了此配置的信息: https://www.simulmedia.com/blog/2016/02/19/centralized-docker-logging-with-rsyslog/