docker如何配置syslog作为log输出。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker如何配置syslog作为log输出。相关的知识,希望对你有一定的参考价值。

参考技术A docker如何配置syslog作为log输出。

有两个途径,一是全局配置即daemon.json,影响所有的container

其中log-opts需要查看docker的文档,根据需要配置。
这个例子中的两个参数,后面会介绍他们的含义。

另一个途径就是per-container的配置。
就是在docker run的时候指定参数。

经过这个配置之后,docker会把container的log导出到syslog。

必须先确保syslog在运行

查看是状态是否在运行;注意rsyslog依赖于journald,查看journald是否在运行

这里systemd-journald依赖于一个machine id

重启journald和rsyslog

经过这个步骤之后,container的log就导出到/var/log/messages里面了。

syslog还可以把log输出到远程的syslog,比如在docker swarm环境下,可以配置一个syslog server,把所有的不同机器上的container全部导出到这台机器上,实现log的集中式管理。

配置rsyslog server

可以配置成TCP或者UDP,上述配成UDP

上述配置了server端的监听地址,下面配置server端收到log信息之后如何处理。

几点说明:

配置rsyslog client

这里把客户端的log全部转发到server地址<your-rsyslog-server>:514,两个@@表示远端是TCP连接,一个@表示UDP连接。

并且定义了buffer的文件名(fwdyourname)和空间大小(1g),以备远程server不能服务的时候,缓存本地日志。

配置container的logrotate信息。

如何检查 ubuntu docker 的 syslog

【中文标题】如何检查 ubuntu docker 的 syslog【英文标题】:how to check syslog for ubuntu docker 【发布时间】:2016-06-20 17:16:53 【问题描述】:

我在本地 vm 的 docker 中安装了 tutum/ubuntu

当我登录ubuntu 并运行以下命令时。

logger "Test Logging"

我找不到这个登录的文件。在我的本地系统中,我可以在/var/log 中看到system.logsyslogmessages 文件。但是当我在容器中检查/var/log 时,我找不到任何这样的文件。

root@fbc4ae457ad9:~# ls -al /var/log/
total 316
drwxrwxr-x  6 root syslog   4096 Jun 20 16:49 .
drwxr-xr-x 16 root root     4096 Jun 20 16:42 ..
-rw-r--r--  1 root root     9174 Mar 17 15:17 alternatives.log
drwxr-xr-x  2 root root     4096 Mar 17 15:17 apt
-rw-r--r--  1 root root    47816 Mar 15 04:34 bootstrap.log
-rw-rw----  1 root utmp      768 Jun 20 16:49 btmp
-rw-r-----  1 root adm        31 Mar 15 04:34 dmesg
-rw-r--r--  1 root root   213169 Mar 17 15:17 dpkg.log
-rw-r--r--  1 root root     3296 Mar 17 15:17 faillog
drwxr-xr-x  2 root root     4096 Mar 15 04:34 fsck
-rw-rw-r--  1 root utmp    30076 Jun 20 16:53 lastlog
drwxr-xr-x  2 root root     4096 Apr 11  2014 upstart
-rw-rw-r--  1 root utmp     1920 Jun 20 16:53 wtmp

我检查了upstart和其他目录,但都是空的。

systemlog 我必须检查哪个文件?

【问题讨论】:

【参考方案1】:

默认情况下没有安装 rsyslogd,在你使用的这个镜像中也没有。

如果您希望在您的 docker 容器中使用 rsyslogd,您应该先通过 Dockerfile 自行安装/配置它。

RUN apt-get -y install rsyslog

您可能还需要 supervisord 才能在容器中启动所有进程。

【讨论】:

@Nilesh 在 docker hub 有一堆,试试看:hub.docker.com/search/…

以上是关于docker如何配置syslog作为log输出。的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器 syslog日志配置 对日志进行拆分目录和文件

在 OS X 上使用 log-driver="syslog" 时出现 docker 错误

如何说服控制台上的 syslog 输出包含时间戳?

是否可以在 Docker 中运行 syslog 并将其作为主机的 syslog 守护进程公开给主机?

如何从发送到 Logstash 的 syslog 日志中检索标签?

无法登录到 docker 容器 syslog 文件