日志
docker默认的日志记录
- 通过docker log获得
- 缺点有:①只能处理STDOUT和STDERR,不能记录到文件;②不清理日志文件,耗损空间
docker的可选日志记录方法
- json-file
- syslog
- journald
- gelf
- fluentd
- none
日志汇总
多主机系统中需要将各台主机的日志汇总,方法有以下两种:
- 在所有的容器内运行多一个进程,由这个进程将日志转发到汇总服务的代理(会是镜像变大,且增加多余的进程)
- 在主机或另一个独立容器中,收集日志并转发到汇总服务
在主机中查看日志有几种方法:
- docker API 以编程接口访问(logsout)
- syslog系统日志驱动方式下,可以通过通过syslog自身的功能来转发
- 直接从docker 目录访问
日志管理
使用ELK进行日志记录
ELK
- Elasticsearch 文本搜索引擎
- Logstash 读取原始日志,然后进行解析和过滤,转发
- kibana 基于JavaScript的Elasticsearch图形界面
最佳实践
- 将ELK容器放在另一台单独的主机上,以保持不同的功能之间的清晰划分
- 使用logspout-logstash适配器将docker日志转变为logstash很容易读取的格式
使用syslog进行日志管理
监控和警报
直接获取数据
- docker stats 能够返回资源使用情况的实时流
- linux内核的CGroups及命名空间可以直接获取各种指标
- 监控特定数据,可以通过runc或直接调用内核函数
cAdvisor
谷歌的cAdvisor是最常用的docker监控工具
集群解决方案
- 谷歌的Heapster:基于cAdvisor
- Prometheus:主要支持大型的微服务架构系统