如何在Grafana中监控Docker容器及服务器的CPU/磁盘/内存用量并解决告警问题
容器磁盘用量监控配置
前置检查:确认cAdvisor采集配置
cAdvisor采集容器磁盘指标需要挂载宿主机Docker存储和磁盘目录,启动参数需要包含以下挂载项:
-v /var/lib/docker:/var/lib/docker:ro -v /dev/disk:/dev/disk:ro
若缺少以上挂载,会导致容器磁盘指标无法正常采集。
磁盘使用率计算PromQL
cAdvisor暴露的磁盘相关原生指标如下:
container_fs_usage_bytes:容器文件系统已使用字节数container_fs_limit_bytes:容器对应文件系统总容量字节数
容器磁盘使用率查询语句(已过滤宿主机整体统计、适配你当前的Swarm标签):
sum(container_fs_usage_bytes{id!=""}) by (container_label_com_docker_swarm_task_name, container_label_com_docker_swarm_node_id, name) / sum(container_fs_limit_bytes{id!=""}) by (container_label_com_docker_swarm_task_name, container_label_com_docker_swarm_node_id, name) * 100
告警规则配置示例
使用率超过80%持续5分钟触发告警的规则配置:
groups: - name: container_disk_alerts rules: - alert: High_Container_Disk_Usage expr: sum(container_fs_usage_bytes{id!=""}) by (container_label_com_docker_swarm_task_name, container_label_com_docker_swarm_node_id) / sum(container_fs_limit_bytes{id!=""}) by (container_label_com_docker_swarm_task_name, container_label_com_docker_swarm_node_id) * 100 > 80 for: 5m labels: severity: warning annotations: summary: 容器磁盘使用率过高 节点 {{ $labels.container_label_com_docker_swarm_node_id }} 任务 {{ $labels.container_label_com_docker_swarm_task_name }} description: 容器磁盘使用率已达 {{ $value | humanizePercentage }}
Gmail告警仅部分接收修复方案
按优先级依次排查以下配置:
1. 检查Gmail发件权限配置
必须开启谷歌账号两步验证后生成应用密码,不可直接使用账号登录密码,Alertmanager的smtp配置参考如下:
global: smtp_smarthost: smtp.gmail.com:587 smtp_from: 你的发件邮箱@gmail.com smtp_auth_username: 你的发件邮箱@gmail.com smtp_auth_password: 你生成的谷歌应用密码 smtp_require_tls: true
2. 检查Alertmanager路由分组配置
若配置了相同标签的告警分组,会导致同组告警合并发送,你看到的部分告警实际是合并后的结果:
- 检查
route下的group_by配置,若按alertname、container_label_com_docker_swarm_node_id分组,同节点同类型的告警会合并为一封邮件发送 - 检查
group_interval参数,若配置时长超过10分钟,同组内新触发的告警会等待周期结束后才会发送 - 检查
inhibit_rules抑制规则,是否配置了高优先级告警抑制低优先级同类型告警的规则,导致低优先级告警被拦截
3. 检查Prometheus告警规则配置
从你提供的告警内容看,存在内存占用812.9MB的告警记录,若你的High_Memory_Usage_1g规则阈值为1GB,该告警实际未达到触发条件:
- 确认规则表达式单位是否正确,1GB的正确写法为
1*1024*1024*1024 - 确认
for参数配置,若设置为10m,需要指标持续达标10分钟才会推送告警,未到时长的告警处于pending状态不会发送 - 到Prometheus控制台查询未触发告警的容器对应指标是否正常采集,排除cAdvisor采集异常的问题
4. 日志与邮箱过滤排查
- 查看Alertmanager运行日志,是否存在smtp连接报错、发件被拒绝的日志,根据报错内容调整网络或权限配置
- 检查Gmail的垃圾邮件箱、推广/社交标签页,告警邮件可能被谷歌自动分类未进入收件箱
- 查看谷歌账号安全中心的登录记录,确认Alertmanager的发件请求未被谷歌安全拦截
内容的提问来源于stack exchange,提问作者Mohd Rashid
相关产品推荐
相关产品推荐

