Prometheus 安装部署实战:Docker 方式与监控配置可视化流程

Prometheus 安装部署实战:Docker 方式与监控配置可视化流程

类似项目-zabbix

介绍

Prometheus 是一款开源的时序数据监控与告警工具,由 SoundCloud 于 2015 年开源,2016 年加入 CNCF(云原生计算基金会),2018 年成为 CNCF 毕业项目,目前是云原生环境中最主流的监控方案之一。

一、核心功能与特点

Prometheus 专注于时序数据(按时间序列存储的指标数据,如服务器 CPU 使用率、接口响应时间等)的采集、存储、查询和告警,核心特点包括:

  1. 时序数据优先:专为时序数据设计,存储高效,支持高基数标签(如多实例、多环境的指标区分)。
  2. Pull 模式采集:主动从目标(如服务器、应用)拉取指标(默认 HTTP 协议),无需目标主动推送,适合动态环境(如 Kubernetes pods 频繁启停)。
  3. 灵活的查询语言(PromQL):支持复杂的指标计算、聚合和过滤,可快速生成监控视图或告警条件。
  4. 内置告警机制:通过规则定义告警条件,结合 Alertmanager 实现告警的分组、抑制、路由(如邮件、Slack 通知)。
  5. 动态服务发现:支持多种服务发现机制(如 Kubernetes、Consul、DNS),自动识别新增的监控目标。
  6. 无依赖存储:默认使用本地时序数据库存储数据,也可集成远程存储(如 Thanos、Cortex)扩展容量。

二、架构组成

Prometheus 生态由多个组件构成,核心架构如下:

1
2
3
[Exporters/Pushgateway] → [Prometheus Server] → [Alertmanager] → [通知渠道]

[Grafana 可视化]
  1. Prometheus Server:核心组件,负责:

    • 从目标(Exporters 或 Pushgateway)拉取指标;
    • 将指标存储到本地时序数据库;
    • 执行 PromQL 查询和告警规则。
  2. Exporters:指标暴露工具,将非 Prometheus 格式的指标(如服务器硬件信息、数据库性能)转换为 Prometheus 可识别的格式,并通过 HTTP 接口暴露。常见 Exporters:

    • Node Exporter:监控服务器 CPU、内存、磁盘、网络等;
    • MySQL Exporter:监控 MySQL 数据库性能;
    • Blackbox Exporter:监控 HTTP 接口、ICMP 连通性等。
  3. Pushgateway:用于短生命周期任务(如定时脚本)的指标推送。这类任务存活时间短,Prometheus 可能来不及拉取,因此先推送到 Pushgateway,再由 Prometheus 从 Pushgateway 拉取。

  4. Alertmanager:处理 Prometheus Server 发送的告警,支持:

    • 分组(将同一服务的多个告警合并);
    • 抑制(避免级联告警,如服务器宕机时不告警依赖它的应用);
    • 路由(按告警级别发送到不同渠道,如邮件、企业微信)。
  5. 可视化工具:Prometheus 自带简单的 Web UI,更常用 Grafana 集成,通过丰富的仪表盘展示监控数据。

三、基本使用步骤

以下以“监控服务器指标”为例,介绍 Prometheus 的核心使用流程。

1. 安装 Prometheus Server

推荐通过 Docker 快速部署(二进制安装见后续章节):

1
2
3
4
5
6
7
8
# 拉取镜像
docker pull prom/prometheus

# 创建配置文件目录(存放 prometheus.yml)
mkdir -p /data/prometheus

# 启动容器(挂载配置文件和数据目录)
docker run -itd --name=prometheus --restart=always -p 9090:9090 prom/prometheus

2. 安装 Grafana

Grafana 是一个跨平台开源的度量分析和可视化工具,可以通过将采集的数据查询后可视化展示,并支持及时通知。
默认账户密码:admin/admin

1
2
3
4
5
6
7
8
9
10
11
# 拉取镜像
docker pull grafana/grafana

# 启动容器
docker run -itd --name=grafana \
--restart=always \
-p 3000:3000 \
-v $PWD/grafana-storage:/var/lib/grafana \
grafana/grafana

sudo chown -R 472:472 $PWD/grafana-storage

Grafana启动示意

3. 安装 Node Exporter

Prometheus 本身不具备监控功能,需通过对应的 Exporter 收集数据。Node Exporter 用于收集服务器硬件指标(CPU、内存等)。

1
2
3
4
5
6
7
8
9
10
11
# 拉取镜像
docker pull prom/node-exporter

# 启动容器(挂载主机系统目录以获取硬件信息)
docker run -itd --name=node-exporter \
--restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter

容器创建成功后,可通过 http://服务器IP:9100/metrics 查看收集的监控数据:
Node Exporter指标页面1
Node Exporter指标页面2

4. 验证基础服务启动

启动后,访问 http://服务器IP:9090 可打开 Prometheus Web UI:
Prometheus Web UI

5. 配置监控目标(prometheus.yml)

Prometheus 通过配置文件定义“要监控的目标”,步骤如下:

  1. 复制容器内默认配置文件到本地

    1
    docker cp prometheus:/etc/prometheus/prometheus.yml $PWD

    复制配置文件示意

  2. 编辑配置文件

    1
    vim prometheus.yml 

    修改内容如下(添加 Node Exporter 监控目标):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    scrape_configs:
    # 监控 Prometheus 自身
    - job_name: "prometheus"
    static_configs:
    - targets: ["localhost:9090"]
    labels:
    app: "prometheus"

    # 监控 Node Exporter(替换为实际服务器IP)
    - job_name: "node-promo"
    static_configs:
    - targets: ["192.168.87.250:9100"] # Node Exporter 所在服务器的IP:端口
    labels:
    app: "node-promo"
  3. 将修改后的配置文件复制回容器并重启

    1
    2
    docker cp $PWD/prometheus.yml prometheus:/etc/prometheus/prometheus.yml
    docker restart prometheus

6. 在被监控节点安装 Node Exporter(如需监控多节点)

若需监控其他服务器,在目标节点重复执行以下命令安装 Node Exporter:

1
2
3
4
5
6
7
8
9
10
11
# 拉取镜像
docker pull prom/node-exporter

# 启动容器
docker run -itd --name=node-exporter \
--restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter

多节点安装Node Exporter示意

7. 验证监控目标配置

在 Prometheus Web UI 中查看监控目标状态:

  1. 访问 http://服务器IP:9090,点击菜单栏 Status → Targets
  2. 确认 node-promo 任务的状态为 UP(表示监控正常)。

监控目标状态1
监控目标状态2

8. Grafana 集成 Prometheus

  1. 访问 Grafana(http://服务器IP:3000),使用默认账号 admin/admin 登录(首次登录需修改密码)。
  2. 点击左侧菜单 Configuration → Data Sources,选择 Add data source,搜索并选择 Prometheus
  3. 在配置页填写 Prometheus 地址(如 http://localhost:9090,若 Grafana 与 Prometheus 不在同一主机,需填写实际 IP),点击 Save & test

Grafana添加数据源1
Grafana添加数据源2
Grafana添加数据源3

8.1 Grafana 数据可视化
  1. 访问 Grafana 官网仪表盘库,选择合适的仪表盘(如服务器监控相关)。
    Grafana仪表盘库

  2. 记录目标仪表盘的 ID(如示例中 ID 为 1860)。
    仪表盘ID示例

  3. 下载仪表盘的 JSON 配置文件(可选,也可直接通过 ID 导入)。
    下载仪表盘JSON

  4. 回到 Grafana 控制台,通过 + → Import 导入仪表盘,输入 ID 或上传 JSON 文件,完成配置。
    导入仪表盘配置

  5. 完成后可查看监控可视化效果:
    仪表盘最终效果