Docker 容器日志和监控

Docker 容器日志和监控 文章目录一、 容器日志体系1. 日志驱动Logging Drivers2. 主流集中式日志收集架构二、 容器监控体系1. 指标来源cgroups2. 主流监控架构组合Prometheus cAdvisor Grafana三、 总结与最佳实践在 Docker 容器化架构中日志Logs和监控Metrics是保证系统可观测性Observability的两大核心支柱。日志解决的是“发生了什么”追溯具体事件、报错信息。监控解决的是“系统状态如何”CPU/内存使用率、请求延迟、系统健康度。一、 容器日志体系与传统虚拟机不同Docker 容器设计倡导“单一进程”理念。容器的标准输出stdout和标准错误stderr是捕获日志的最主要途径。1. 日志驱动Logging DriversDocker 通过内置的 Logging Driver 来决定如何处理容器输出的日志json-file默认将日志以 JSON 格式写入宿主机磁盘路径通常在/var/lib/docker/containers/container-id/container-id-json.log。缺点如果不做配置日志文件会无限增长占满宿主机磁盘。journald将日志发送到宿主机的systemd-journald服务。syslog将日志发送到系统的 syslog 守护进程。**fluentd/gelf/splunk**直接将日志通过网络转发给远端集中式日志收集系统。生产避坑提示使用默认json-file驱动时务必设置日志滚动策略Log Rotation防止磁盘被塞满# docker-compose.yml 示例services:web:image:nginxlogging:driver:json-fileoptions:max-size:10m# 单个文件最大 10MBmax-file:3# 最多保留 3 个文件2. 主流集中式日志收集架构在多容器/集群环境下登录到单个宿主机用docker logs查看日志是不切实际的通常采用以下几种集中式收集方案[容器 stdout/stderr] ──► [日志收集 Agent] ──► [消息队列/存储] ──► [可视化界面]方案收集组件 (Collector)存储/引擎 (Storage)展示组件 (UI)特点与适用场景ELK / EFKFilebeat / FluentdElasticsearchKibana业界标杆功能极度丰富但内存和 CPU 开销较大。PLG (Loki)PromtailGrafana LokiGrafana轻量级日志不索引全文只索引标签成本低、与 Prometheus 无缝集成。二、 容器监控体系容器具有短生命周期、高动态扩缩容的特点传统的固定 IP 监控方式已不再适用。监控的核心指标主要包括CPU、内存、网络 I/O、磁盘 I/O以及应用业务指标。1. 指标来源cgroupsDocker 容器的资源隔离与限制依赖于 Linux 底层的cgroupsControl Groups。监控工具正是通过读取/sys/fs/cgroup/下的虚拟文件或通过 Docker Daemon API来获取容器的实时资源消耗数据的。2. 主流监控架构组合Prometheus cAdvisor Grafana这是当前 Docker 和 Kubernetes 领域最标准、最流行的开源监控套件数据采集 (cAdvisor):Google 开源的容器指标收集器.cAdvisor 以容器形式运行在每台宿主机上实时读取 cgroups 信息将容器的 CPU、内存、网络、磁盘等指标暴露为标准 HTTP 接口。数据存储 (Prometheus):时序数据库 (TSDB).Prometheus 定期如每 15 秒主动向 cAdvisor 抓取Pull指标数据并按照时间序列保存在内部数据库中。可视化展示 (Grafana):仪表盘看板.Grafana 连接 Prometheus 作为数据源通过配置好的 Dashboard 呈现出直观的图表CPU 使用率曲线、内存报警阀值等。三、 总结与最佳实践维度基础/单机环境中大型/生产环境日志限制json-file文件大小 docker logs -fGrafana Loki Promtail或EFK (Elasticsearch Filebeat)监控docker stats命令Prometheus cAdvisor Grafana告警简单脚本触发邮件PrometheusAlertmanager关联钉钉/企业微信/PagerDuty应用层面确保程序直接写日志到stdout和stderr不要写到容器内部的静态文件中。运维层面监控不仅要看容器还要同时监控宿主机物理指标如宿主机磁盘空间、inode 节点数防止基础层崩溃导致容器批量故障。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目