Docker 安装部署Prometheus
介绍
Prometheus 是一款开源的时序数据监控与告警工具,由 SoundCloud 于 2015 年开源,2016 年加入 CNCF(云原生计算基金会),2018 年成为 CNCF 毕业项目,目前是云原生环境中最主流的监控方案之一。
一、核心功能与特点
Prometheus 专注于时序数据(按时间序列存储的指标数据,如服务器 CPU 使用率、接口响应时间等)的采集、存储、查询和告警,核心特点包括:
- 时序数据优先:专为时序数据设计,存储高效,支持高基数标签(如多实例、多环境的指标区分)。
- Pull 模式采集:主动从目标(如服务器、应用)拉取指标(默认 HTTP 协议),无需目标主动推送,适合动态环境(如 Kubernetes pods 频繁启停)。
- 灵活的查询语言(PromQL):支持复杂的指标计算、聚合和过滤,可快速生成监控视图或告警条件。
- 内置告警机制:通过规则定义告警条件,结合 Alertmanager 实现告警的分组、抑制、路由(如邮件、Slack 通知)。
- 动态服务发现:支持多种服务发现机制(如 Kubernetes、Consul、DNS),自动识别新增的监控目标。
- 无依赖存储:默认使用本地时序数据库存储数据,也可集成远程存储(如 Thanos、Cortex)扩展容量。
二、架构组成
Prometheus 生态由多个组件构成,核心架构如下:
[Exporters/Pushgateway] → [Prometheus Server] → [Alertmanager] → [通知渠道]
↓
[Grafana 可视化]
- Prometheus Server:核心组件,负责:
-
- 从目标(Exporters 或 Pushgateway)拉取指标;
- 将指标存储到本地时序数据库;
- 执行 PromQL 查询和告警规则。
- Exporters:指标暴露工具,将非 Prometheus 格式的指标(如服务器硬件信息、数据库性能)转换为 Prometheus 可识别的格式,并通过 HTTP 接口暴露。常见 Exporters:
-
- Node Exporter:监控服务器 CPU、内存、磁盘、网络等;
- MySQL Exporter:监控 MySQL 数据库性能;
- Blackbox Exporter:监控 HTTP 接口、ICMP 连通性等。
- Pushgateway:用于短生命周期任务(如定时脚本)的指标推送。这类任务存活时间短,Prometheus 可能来不及拉取,因此先推送到 Pushgateway,再由 Prometheus 从 Pushgateway 拉取。
- Alertmanager:处理 Prometheus Server 发送的告警,支持:
-
- 分组(将同一服务的多个告警合并);
- 抑制(避免级联告警,如服务器宕机时不告警依赖它的应用);
- 路由(按告警级别发送到不同渠道,如邮件、企业微信)。
- 可视化工具 :Prometheus 自带简单的 Web UI,更常用 Grafana 集成,通过丰富的仪表盘展示监控数据。
三、基本使用步骤
以下以"监控服务器指标"为例,介绍 Prometheus 的核心使用流程。
1. 安装 Prometheus Server
推荐通过 Docker 快速部署(二进制安装见后续章节):
# 拉取镜像
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
# 拉取镜像
docker pull grafana/grafana
# 启动容器
docker run -itd --name=grafana \
--restart=always \
-p 3000:3000 \
-v $PWD/grafana-storage:/var/lib/grafana \
grafana/grafana

3. 安装 Node Exporter
Prometheus 本身不具备监控功能,需通过对应的 Exporter 收集数据。Node Exporter 用于收集服务器硬件指标(CPU、内存等)。
# 拉取镜像
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 查看收集的监控数据:


4. 验证基础服务启动
启动后,访问 http://服务器IP:9090 可打开 Prometheus Web UI:

5. 配置监控目标(prometheus.yml)
Prometheus 通过配置文件定义"要监控的目标",步骤如下:
-
复制容器内默认配置文件到本地:
docker cp prometheus:/etc/prometheus/prometheus.yml $PWD

-
编辑配置文件:
vim prometheus.yml
修改内容如下(添加 Node Exporter 监控目标):
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"
-
将修改后的配置文件复制回容器并重启:
docker cp $PWD/prometheus.yml prometheus:/etc/prometheus/prometheus.yml
docker restart prometheus
6. 在被监控节点安装 Node Exporter(如需监控多节点)
若需监控其他服务器,在目标节点重复执行以下命令安装 Node Exporter:
# 拉取镜像
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

7. 验证监控目标配置
在 Prometheus Web UI 中查看监控目标状态:
- 访问
http://服务器IP:9090,点击菜单栏 Status → Targets。 - 确认
node-promo任务的状态为UP(表示监控正常)。


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



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

-
记录目标仪表盘的 ID(如示例中 ID 为
1860)。
-
下载仪表盘的 JSON 配置文件(可选,也可直接通过 ID 导入)。

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

-
完成后可查看监控可视化效果:
