编辑
2026-09-17
DevOps
0
请注意,本文编写于 42 天前,最后修改于 42 天前,其中某些信息可能已经过时。

目录

开始
安装
架构了解
docker-compose.yml
其他配置文件
运行

开始

云服务器上运行的容器越来越多了,想要做个监控,可以随时查看容器的状态,最好可以配置一些告警,出现问题可以发到我的邮箱和微信上。

之前用过的监控主要是zabbix,但是容器环境下推荐的监控是promtheus,今天来部署下这个。

安装

可以通过docker来安装,官方手册 里指引了去哪里下载,怎么配置。

docker拉去镜像如果很慢的话可以看 这个 ,出门在外,有个代理还是很方便的,如果你想购买我同款的可以考虑 这个 注册后购买我也会收到一点佣金,价格还可以

架构了解

简单了解下prometheus架构,主要分三部分(当然不仅仅分三部分)

  • prometheus:处理和存储数据,监控主体
  • exporter:采集数据,相当于手和眼睛,把数据拿给prom,如node-exporter和cadvisor
  • alertmanager:告警等

docker-compose.yml

promtheus各个组件之间独立性很强,每个镜像有各自的作用,写个docker-compose.yml放一起方便

先创建个目录,所有配置文件都放里面

bash
mkdir -pv ~/docker/promtheus

注意

!!!建议先看下文件再运行,我是提前配置了docker网络的

bash
services: prometheus: image: prom/prometheus:v3.13.3 # container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml # prom主配置文件 - ./alert.rules.yml:/etc/prometheus/alert.rules.yml # 告警规则文件 - prom_data:/prometheus # 数据持久化 command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' #- '--web.enable-lifecycle' # 支持热重载配置 curl -X POST /-/reload - '--storage.tsdb.retention.time=3d' - '--storage.tsdb.retention.size=5GB' - '--storage.tsdb.wal-compression' networks: - npm_net node-exporter: image: prom/node-exporter:v1.10.2 container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro # 宿主机进程信息,只读挂载 - /sys:/host/sys:ro # 宿主机硬件信息,只读挂载 - /:/rootfs:ro # 宿主机根目录,读取磁盘信息 command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--path.rootfs=/rootfs' - '--collector.systemd' # 采集systemd服务状态 - '--collector.tcpstat' # 采集tcp连接指标 networks: - npm_net cadvisor: image: ghcr.nju.edu.cn/google/cadvisor:v0.60.5 container_name: cadvisor restart: unless-stopped volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro networks: - npm_net alertmanager: image: prom/alertmanager:v0.34.0 container_name: alertmanager restart: unless-stopped volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml # alertmanager配置 - alert_data:/alertmanager command: - '--config.file=/etc/alertmanager/alertmanager.yml' networks: - npm_net networks: npm_net: external: true # 持久化卷 volumes: prom_data: # prometheus时序数据库存储 alert_data: # alertmanager告警状态存储

其他配置文件

prometheus.yml

bash
global: scrape_interval: 30s # 采集间隔:每15秒拉取一次指标 evaluation_interval: 30s # 告警规则评估周期,每15秒检查一次告警 # 加载告警规则文件 rule_files: - "alert.rules.yml" # 告警配置:prometheus把告警推送给alertmanager alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093 # 容器名:端口,同网络直接解析 # 采集任务配置 scrape_configs: # 采集宿主机指标,node-exporter - job_name: 'node-exporter' static_configs: - targets: ['node-exporter:9100'] # 采集docker容器指标,cadvisor - job_name: 'cadvisor' static_configs: - targets: ['cadvisor:8080']

alert.rules.yml

bash
groups: - name: host-metrics-alert # 告警组名称 rules: # 告警名称:主机CPU使用率过高 - alert: HostHighCpuLoad expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 80 for: 1m # 持续超过1分钟才触发告警,防止瞬时抖动 labels: severity: warning # 告警级别 warning警告 / critical严重 annotations: summary: "宿主机CPU使用率过高" description: "实例 {{ $labels.instance }} CPU使用率已超过80%,当前值 = {{ $value }}" # 告警:磁盘剩余空间不足 - alert: HostDiskSpaceLow expr: 100 - (100 * (node_filesystem_avail_bytes / node_filesystem_size_bytes)) > 85 for: 2m labels: severity: warning annotations: summary: "磁盘剩余空间不足" description: "分区 {{ $labels.mountpoint }} 使用率超过85%,请及时清理"

alertmanager.yml ,配置的告警是邮箱,别的还得研究研究

bash
global: resolve_timeout: 5m # 故障恢复后,等待5分钟发送恢复通知 # -------- SMTP邮箱配置 -------- smtp_smarthost: 'smtp.qq.com:465' # QQ邮箱SMTP服务器+SSL端口 smtp_from: 'galen.wang@foxmail.com' # 发件邮箱,就是你的邮箱 smtp_auth_username: 'galen.wang@foxmail.com' # SMTP登录用户名 smtp_auth_password: 'lxxxxxxxxcg' # 填授权码!不是邮箱密码 smtp_require_tls: false # 465端口SSL模式,关闭TLS校验 # 路由规则:告警分组、合并、分发 route: group_by: ['alertname'] # 根据告警名称分组,相同告警合并消息 group_wait: 10s # 收到第一条告警后,等待10s,收集同组告警一起发送 group_interval: 10s # 同一组告警,连续两次推送最小间隔 repeat_interval: 1h # 同一个告警,重复发送间隔1小时,防止轰炸 receiver: 'email-receiver' # 默认接收者,下面定义的邮件接收器 receivers: - name: 'email-receiver' email_configs: - to: 'galen.wang@foxmail.com' # 收件邮箱,发给自己 send_resolved: true # 告警恢复时,同样发送恢复邮件 # 抑制规则:严重告警触发时,抑制同实例的警告告警,避免短时间大量邮件 inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'instance']

运行

检查文件没有问题就执行

bash
docker compuse up -d

本文作者:油炸臭豆腐

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!