栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Docker运送微服务架构中的日志?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Docker运送微服务架构中的日志?

Docker 1.6 引入了日志驱动程序的概念,以提供对日志输出的更多控制。的

--log-driver
标志提供配置,其中
stdout
stderr
从在容器中运行的进程应被定向。另请参阅配置日志记录驱动程序。

有几个驱动程序可用。请注意,除了

json-file
禁用以外,所有这些都禁止使用
docker logs
收集容器日志。

  • 无-禁用容器日志。
  • json-file-行为与以前相同,其中json格式的stdout可在
    /var/lib/docker/containers/<containerid>/<containerid>-json.log
  • syslog-将消息写入syslog。还接受
    --log-opt
    通过TCP,UDP或Unix域套接字将日志消息定向到指定的syslog。也禁用
    docker logs
  • 日志-写入系统日志。
    • gelf-Graylog扩展日志格式(GELF)。将日志消息写入GELF端点,例如Graylog或Logstash
    • fluentd-将容器日志发送到fluentd。接受一些选项以定制流利的地址并发送带有日志消息的标签。
  • ** awslogs-将日志消息写入AWS CloudWatch Logs

  • Docker 1.8的新功能

** Docker 1.9的新功能

例如:

docker run --log-driver=syslog --log-opt syslog-address=tcp://10.0.0.10:1514 ...

这是Docker推荐的软件解决方案,可将其日志消息写入

stdout
stderr
。但是,某些软件不会将日志消息写入
stdout/stderr
。例如,它们改为写入日志文件或syslog。在这种情况下,下面原始答案中的某些细节仍然适用。回顾一下:

如果应用程序写入本地日志文件,请从主机挂载卷(或使用仅数据容器到该容器,然后将日志消息写入该位置。

如果应用程序写入syslog,则有以下几种选择:

  • 通过使用将主机的syslog套接字(
    /dev/log
    )安装到容器,将其发送到主机的syslog
    -v /dev/log:/dev/log
  • 如果应用程序在其配置中接受syslog终结点,请配置主机的syslog守护程序以侦听Docker桥网络上的TCP和/或UDP,然后使用该终结点。或者只是发送到远程系统日志主机。
  • 在容器中运行syslog守护程序,并使用Docker链接从其他正在运行的容器中访问它。
  • 使用logspout通过UDP自动将容器日志路由到远程系统日志

不要忘记,容器中的所有日志都应该像在主机OS上一样进行轮换。


Docker 1.6之前版本的原始答案

依靠Docker自己的日志工具(docker日志)是否安全?

docker logs
每次都打印整个流,而不仅仅是新的日志,因此不合适。
docker logs --follow
将提供
tail-f
类似的功能,但随后您将始终运行一个Docker CLI命令。因此,尽管可以 安全 运行
docker logs
,但不是最佳选择。

在不分离的情况下运行docker并将其输出视为日志流是否安全?

您可以使用systemd而不是守护进程来启动容器,从而将所有stdout捕获到systemd日志中,然后可由主机根据需要进行管理。

可以将stdout直接重定向到文件(磁盘空间)吗?

docker run ... > logfile
当然可以做到这一点,但是自动化和管理起来感觉很脆弱并且更加困难。

如果使用文件,它应该在docker映像内还是绑定的卷内(docker run –volume = [])?

如果您在容器中写入内容,则需要运行logrotate或容器中的某些内容来管理日志文件。最好从主机挂载卷并使用主机的日志轮换守护程序对其进行控制。

是否需要对数旋转?

当然,如果该应用编写日志,则需要像在本机OS环境中一样旋转日志。但是,如果您在容器内部进行写操作会比较困难,因为日志文件的位置不太可预测。如果在主机上旋转,则日志文件将位于以下位置,例如,以devicemapper作为存储驱动程序

/var/lib/docker/devicemapper/mnt/<containerid>/rootfs/...
。要使logrotate在该路径下查找日志,将需要一些难看的包装器。

将stdout直接重定向到logshipper(和哪个logshipper)是否安全?

最好使用syslog,并让日志收集器处理syslog。

是否可以选择命名管道(又名FIFO)?

命名管道不是理想的,因为如果管道的读取端死了,则编写器(容器)将遇到断线的情况。即使该事件由应用处理,也将被阻止,直到再次有读者为止。加上它规避

dockerlogs

另请参阅流利使用docker的这篇文章。

请参阅Jeff
Lindsay的工具logspout,该工具从正在运行的容器中收集日志并根据需要路由它们。

最后,请注意,容器中的stdout将记录到主机中的文件中

/var/lib/docker/containers/<containerid>/<containerid>-json.log



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号