更改docker日志消息位置

时间:2017-06-13 12:48:13

标签: linux logging docker

我遇到了docker日志记录的问题,在阅读了很多来源之后没找到解决方案:有没有办法在/var/log/messages中丢弃docker守护进程的消息并选择其他位置?

3 个答案:

答案 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/