提供一个基于Docker Compose的Prometheus、Grafana和Alertmanager监控系统安装方案,并详细解释其配置和工作原理。

一、Docker Compose配置文件

version: '3'

services:
  # Prometheus服务
  prometheus:
    image: prom/prometheus:v2.47.0
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'
    restart: unless-stopped
    depends_on:
      - node-exporter
      - cadvisor

  # Node Exporter - 主机监控
  node-exporter:
    image: prom/node-exporter:v1.6.1
    container_name: node-exporter
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    restart: unless-stopped

  # cAdvisor - 容器监控
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.4
    container_name: cadvisor
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    restart: unless-stopped

  # Alertmanager - 告警管理
  alertmanager:
    image: prom/alertmanager:v0.26.0
    container_name: alertmanager
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager:/etc/alertmanager
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    restart: unless-stopped

  # Grafana - 可视化面板
  grafana:
    image: grafana/grafana-enterprise:10.1.5
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:

二、组件功能解释

  1. Prometheus

    • 功能:开源监控系统,从各种目标(如主机、容器)收集指标数据,并存储在时间序列数据库中。
    • 配置要点
      • scrape_configs:定义要监控的目标(如Node Exporter、cAdvisor)。
      • rule_files:加载告警规则文件(如host.rules)。
      • alerting:配置Alertmanager地址,用于发送告警。
  2. Node Exporter

    • 功能:Prometheus的主机监控插件,收集CPU、内存、磁盘等系统指标。
    • 配置要点
      • 通过挂载/proc/sys等系统目录获取底层数据。
      • 暴露9100端口供Prometheus抓取数据。
  3. cAdvisor

    • 功能:容器监控工具,收集Docker容器的资源使用和性能信息。
    • 配置要点
      • 通过挂载/var/lib/docker目录获取容器数据。
      • 暴露8080端口供Prometheus抓取数据。
  4. Alertmanager

    • 功能:处理Prometheus发送的告警,支持分组、抑制、静默等功能,并发送通知(如邮件、Slack)。
    • 配置要点
      • route:定义告警路由规则(如按严重程度分组)。
      • receivers:配置接收者(如邮件地址)。
      • 需要配置SMTP服务器(示例中使用Gmail)。
  5. Grafana

    • 功能:可视化工具,从Prometheus获取数据并创建仪表盘。
    • 配置要点
      • 通过provisioning目录自动配置数据源和仪表盘。
      • 默认用户名/密码:admin/admin
      • 暴露3000端口供用户访问。

三、安装和使用步骤

  1. 创建目录结构

    mkdir -p prometheus-grafana && cd prometheus-grafana
    mkdir -p prometheus/rules alertmanager grafana/provisioning/datasources
  2. 复制配置文件
    将上述Docker Compose及各组件配置文件复制到对应目录。

  3. 启动服务

    docker-compose up -d
  4. 验证服务

  5. 配置Grafana仪表盘

    • 导入预定义仪表盘(如ID为1860的Node Exporter全功能仪表盘)。
    • 创建自定义图表展示Prometheus数据。

四、关键配置说明

  1. Prometheus告警规则

    • 示例规则检测CPU和内存使用率,超过阈值时触发告警。
    • 可根据需求扩展规则(如磁盘空间、网络流量等)。
  2. Alertmanager邮件配置

    • 需要启用Gmail的”低安全性应用访问”或应用专用密码。
    • 生产环境建议使用企业邮件服务器。
  3. 数据持久化

    • Prometheus和Grafana数据通过Docker卷持久化,避免容器重启导致数据丢失。

五、注意事项

  1. 安全配置

    • 修改Grafana默认密码。
    • 为Alertmanager配置HTTPS和基本认证。
  2. 资源调整

    • 根据监控规模调整Prometheus的storage.tsdb.retention.time参数(默认15天)。
    • 生产环境建议增加Prometheus的内存限制。
  3. 告警优化

    • 调整告警阈值和持续时间以减少误报。
    • 添加更多告警规则覆盖关键指标。

通过这个配置,你可以快速搭建一个完整的监控系统,实现对服务器和容器的监控、告警和可视化展示。

作者:严锋  创建时间:2023-09-15 21:57
最后编辑:严锋  更新时间:2025-07-04 16:16