更改docker日志消息位置

3
我在使用docker日志记录时遇到了问题,阅读了很多资料后并没有找到解决方法:是否有一种方法可以丢弃/var/log/messages中docker守护程序的消息并选择另一个位置进行记录?

Stack Overflow 是一个针对编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请查看帮助中心中的 可以在这里问什么样的问题。也许 Super User 或者 Unix & Linux Stack Exchange 更适合提问。如果您认为它适合其他地方,请 请求迁移 - jww
3个回答

6

好的,我知道这个问题很老了,但我认为它没有得到很好的回答,也没有给出正确的答案。

首先,它将消息保存到特定的位置的原因始于rsyslog配置 (/etc/rsyslog.conf) 中的一行:

$ModLoad imjournal # provides access to the systemd journal

所以,因为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/

2

配置rsyslog将Docker日志隔离到自己的文件中。为此,请创建/etc/rsyslog.d/10-docker.conf文件,并将以下内容复制到该文件中。

# Docker logging
daemon.* {
 /var/mylog
 stop
}

总之,这将把守护程序类别的所有日志写入 /var/mylog,然后停止处理该日志条目,以便它不会被写入系统默认的 syslog 文件。

2
这是一个复制粘贴的答案。为什么你没有发布原始文章的链接? - Vyacheslav Shvets
它没有将Docker日志隔离到自己的文件中,而是将所有守护程序日志隔离到自己的文件中。 - Mike Gleason jr Couturier

1
根据Docker文档,你可以将不同的驱动程序指定为docker守护进程的命令行参数或(最好)在daemon.json配置文件中。有多个可用的驱动程序,例如Syslog、基于HTTP的日志记录等。 更新 以下是来自文档的Syslog示例配置部分:
{
  "log-driver": "syslog",
  "log-opts":  {
    "syslog": "udp://1.2.3.4:1111"
  }
}

问题是关于 dockerd - Vyacheslav Shvets
@VyacheslavShvets,这就是为什么我提到为Docker 守护进程 提供命令行参数。或者我误解了你的评论? - Frank Schmitt
这些选项是容器的默认选项,而不是针对dockerd本身的。链接 - Vyacheslav Shvets
@VyacheslavShvets 在重新阅读文档后,我想你是对的;这确实只会影响容器的日志,而不是守护程序的日志。 - Frank Schmitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接