容器日志篇-1.基本概念
监控和日志历来都是系统稳定运行和问题排查的关键,在微服务架构中,数量众多的容器以及快速变化的特性使得一套集中式的日志管理系统变成了生产环境中一个不可获取的部分。此次话题我们会集中在日志管理方面,本篇会介绍Docker自带的logs子命令以及其Logging driver。
一、Docker logs子命令
默认情况下,Docker的日志会发送到容器的标准输出设备(STDOUT)和标准错误设备(STDERR),其中STDOUT和STDERR实际上就是容器的控制台终端。
我们可以通过logs子命令来查看具体某个容器的日志输出:
# docker logs edc-k8s-demo
这时看到的日志是静态的,截止到目前为止的日志。如果想要持续看到新打印出的日志信息,那么可以加上 -f 参数,如:
# docker logs -f edc-k8s-demo
二、Docker logging driver
刚刚我们学习了默认配置下,Docker日志会发送到STDOUT和STDERR。但实际上,Docker还提供了其他的一些机制允许我们从运行的容器中提取日志,这些机制统称为 logging driver。
对Docker而言,其默认的logging driver是json-file,如果在启动时没有特别指定,都会使用这个默认的logging driver。
# docker info | grep 'Logging Driver'
# 容器日志路径:
/var/lib/docker/containers/<container-id>/<container-id>-json.log
例如我们可以查看一个exceptionless-api容器的json日志:
一个快速查看某个容器的日志文件路径的方法:
# docker inspect exceptionless_api_1
通过inspect命令,可以查到该容器的ID及一系列配置信息,我们重点关注LogPath即可:
查到LogPath后,即可复制其后面的日志路径了,打开这个json文件你就可以看到输出的容器日志了。
其中,none 代表禁用容器日志,不会输出任何容器日志。
其他几个logging driver解释如下:
-
syslog 与 journald 是Linux上的两种日志管理服务
-
awslog、splunk 与 gcplogs是第三方日志托管服务
-
gelf 与 fluentd 是两种开源的日志管理方案
我们可以在容器启动时通过加上 --log-driver 来指定使用哪个具体的 logging driver,例如:
docker run -d --log-driver=syslog ......
如果想要设置默认的logging driver,那么则需要修改Docker daemon的启动脚本,例如:
{
"log-driver": "json-file",
"log-opts": {
"labels": "production_status",
"env": "os,customer"
}
}
每个logging driver都有一些自己特定的log-opt,使用时可以参考具体官方文档。
三、小结
原文转自:https://www.cnblogs.com/edisonchou/p/docker_logs_study_summary_part1.html
- 点赞
- 收藏
- 关注作者
评论(0)