使用 Docker Compose 部署完整监控栈(Prometheus、Alertmanager 和 Grafana)

使用 Docker Compose 部署完整监控栈(Prometheus、Alertmanager 和 Grafana)的详细步骤,包括必要的配置文件和命令:


1. 创建项目目录和文件结构

首先,创建一个项目目录,并在其中创建必要的文件:

mkdir monitoring-stack
cd monitoring-stack
mkdir prometheus alertmanager grafana
touch docker-compose.yml
touch prometheus/prometheus.yml
touch alertmanager/alertmanager.yml

此时你的目录结构应该如下:

monitoring-stack/
├── alertmanager/
│   └── alertmanager.yml
├── grafana/
├── prometheus/
│   └── prometheus.yml
└── docker-compose.yml
2. 配置 Prometheus (prometheus/prometheus.yml)

将以下配置粘贴到 prometheus/prometheus.yml 文件中。这个配置会监控 Prometheus 本身,并提供一个默认的目标作为例子。

global:
  scrape_interval:     15s # 默认抓取间隔
  evaluation_interval: 15s # 默认评估间隔

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090'] # Prometheus 自己监控自己
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100'] # 监控 Node Exporter
3. 配置 Alertmanager (alertmanager/alertmanager.yml)

将以下配置粘贴到 alertmanager/alertmanager.yml 文件中。这是一个简单的 Alertmanager 配置,会打印所有警报到控制台,你可以根据需要修改它,例如添加邮件或者其他通知方式。

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'console'

receivers:
  - name: 'console'
    webhook_configs:
      - url: 'http://localhost:9093/console' # 用来模拟控制台输出,实际无意义
4. 配置 docker-compose.yml

将以下配置粘贴到 docker-compose.yml 文件中。这个文件定义了整个监控栈的服务。

version: '3.7'

services:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
    restart: unless-stopped
    networks:
      - monitoring_net

  alertmanager:
    image: prom/alertmanager:latest
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager/alertmanager.yml:/alertmanager/alertmanager.yml
    command:
      - "--config.file=/alertmanager/alertmanager.yml"
      - "--web.external-url=http://localhost:9093"
    restart: unless-stopped
    networks:
      - monitoring_net

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    restart: unless-stopped
    depends_on:
      - prometheus
    networks:
      - monitoring_net

  node-exporter:
    image: prom/node-exporter:latest
    ports:
      - "9100:9100"
    restart: unless-stopped
    networks:
      - monitoring_net

networks:
  monitoring_net:

5. 启动监控栈

现在,在 monitoring-stack 目录下,执行以下命令启动整个监控栈:

docker-compose up -d

这个命令会下载必要的 Docker 镜像并启动容器。-d 参数表示在后台运行。

6. 访问和验证
Prometheus: 打开浏览器,访问 http://localhost:9090。你应该能看到 Prometheus 的 Web 界面。

Alertmanager: 打开浏览器,访问 http://localhost:9093。你应该能看到 Alertmanager 的 Web 界面。

Grafana: 打开浏览器,访问 http://localhost:3000。你应该能看到 Grafana 的登录页面。默认用户名和密码是 admin/admin。
7. 配置 Grafana (简单步骤)

登录 Grafana: 使用默认用户名和密码(admin/admin)登录 Grafana。

添加数据源:

    点击左侧菜单的“Connections” -> “Data Sources”。

    点击“Add new data source”。

    选择 “Prometheus”。

    在 “HTTP” 部分的 “URL” 字段中输入 http://prometheus:9090 (因为容器在同一个网络中,可以直接使用服务名)。

    点击 “Save & Test”。你应该看到一个成功连接的提示。

创建仪表盘:

    点击左侧菜单的 “Dashboards” -> “Create” -> “New dashboard”。

    点击 “Add new panel”。

    在 “Query” 选项卡中,选择刚刚添加的 Prometheus 数据源。

    输入一个 Prometheus 查询,例如 up (用来显示 Prometheus 自身是否运行)。

    点击 “Run queries”。你应该可以看到查询结果。

    根据需要配置图表类型和其他选项,然后点击 “Apply” 保存面板。

    保存仪表盘。

创建仪表盘 (示例 – CPU 使用率):

    点击左侧菜单的 “Dashboards” -> “Create” -> “New dashboard”。

    点击 “Add new panel”。

    在 “Query” 选项卡中,选择刚刚添加的 Prometheus 数据源。

    输入一个 Prometheus 查询,例如 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) (显示CPU使用率)。

    点击 “Run queries”。你应该可以看到查询结果。

    根据需要配置图表类型和其他选项,然后点击 “Apply” 保存面板。

    保存仪表盘。

    提示: 你可以根据需要添加其他 Node Exporter 指标的查询,例如内存使用率 (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)、磁盘空间使用率等。

完整步骤总结

    创建项目目录和文件结构。

    配置 prometheus/prometheus.yml。

    配置 alertmanager/alertmanager.yml。

    配置 docker-compose.yml。

    运行 docker-compose up -d。

    验证 Prometheus, Alertmanager, Grafana 是否正常启动。

    在 Grafana 中添加数据源 (Prometheus) 并创建仪表盘。

至此,你已经成功部署了一个包含 Prometheus、Alertmanager 和 Grafana 的完整监控栈。你可以根据自己的需求,修改配置文件,监控其他目标,配置告警规则,创建更多仪表盘。