3. Prometheus 数据源配置:安装、采集与连接

Prometheus 是整个 SLO 监控体系的数据基座。Grafana 本身不存储时序数据,所有 SLO 指标、告警规则评估结果、自愈剧本触发计数都依赖 Prometheus 提供查询接口。本章按“安装 → 采集配置 → Grafana 数据源连接”三阶段展开,确保你从零搭建一套可用的 Prometheus + Grafana 联合环境。

3.1 Prometheus 安装

推荐使用二进制直接部署或 Docker 容器化部署。生产环境建议使用 systemd 管理进程,便于日志轮转与自动重启。以下为二进制安装的标准步骤:

  1. 下载:从 Prometheus 官方下载页 获取对应平台的压缩包。
  2. 解压:tar -xzf prometheus-*.tar.gz,将目录移至 /opt/prometheus。
  3. 创建用户:useradd --no-create-home --shell /bin/false prometheus。
  4. 配置目录:/etc/prometheus(存放 prometheus.yml),/var/lib/prometheus(存放数据)。
  5. 编写 systemd 单元文件:/etc/systemd/system/prometheus.service。
关键参数说明:--storage.tsdb.retention.time=30d 控制数据保留时长,SLO 看板通常需要至少 28 天历史数据,建议设为 30d 或更长。--web.listen-address=0.0.0.0:9090 为默认监听端口。
# /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/opt/prometheus/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --storage.tsdb.retention.time=30d \
  --web.listen-address=0.0.0.0:9090

Restart=always

[Install]
WantedBy=multi-user.target

启动后访问 http://<服务器IP>:9090,确认 Prometheus UI 可正常打开,并在 Status → Targets 页面看到默认的 self 采集端点。

3.2 数据采集配置

Prometheus 通过 scrape_configs 定义采集目标。每个 job 代表一组同类目标,包含 target 地址、采集间隔、标签等。以下是与 SLO 看板强相关的三类采集配置:

Job 名称 采集目标 典型端口 用途
prometheus Prometheus 自身 9090 监控 Prometheus 进程健康与性能
node_exporter Linux 主机 9100 采集 CPU、内存、磁盘、网络等基础设施指标
blackbox_exporter HTTP/HTTPS 端点 9115 探测 SLO 目标服务的可用性与响应时间

以下为 /etc/prometheus/prometheus.yml 的核心配置片段:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets:
        - '10.0.1.10:9100'
        - '10.0.1.11:9100'
        - '10.0.1.12:9100'

  - job_name: 'blackbox_exporter'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - 'https://api.example.com/health'
        - 'https://web.example.com/'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 10.0.1.20:9115
采集间隔建议:SLO 看板依赖的指标(如请求成功率、延迟分位数)通常使用 15s 采集间隔。若自愈剧本需要秒级响应,可单独为相关 job 设置 scrape_interval: 5s,但需注意存储开销。

配置完成后,执行 systemctl restart prometheus,并在 Prometheus UI 的 Targets 页面确认所有目标均为 UP 状态。

3.3 Grafana 数据源连接

Grafana 通过数据源插件与 Prometheus 通信。连接配置在 Grafana Web UI 中完成,也可通过 provisioning 文件实现自动化。以下为手动配置步骤:

  1. 登录 Grafana,进入 Configuration → Data Sources。
  2. 点击 Add data source,选择 Prometheus。
  3. 填写以下关键字段:
字段 推荐值 说明
Name Prometheus-SLO 数据源标识,建议与 SLO 看板关联
URL http://10.0.1.5:9090 Prometheus 服务地址,注意网络可达性
Access Server (default) Grafana 服务端代理请求,避免跨域问题
Scrape interval 15s 必须与 Prometheus 全局采集间隔一致
Timeout 30s 查询超时,SLO 聚合查询可能较慢

点击 Save & Test,若返回绿色提示 “Data source is working”,则连接成功。

常见连接失败原因:① Prometheus 防火墙未放通 9090 端口;② Grafana 与 Prometheus 不在同一网络,且未使用反向代理;③ 数据源 URL 填写了 localhost 但 Grafana 与 Prometheus 不在同一主机。

3.4 数据源配置验证流程

以下 SVG 图展示了从 Prometheus 安装到 Grafana 数据源连接成功的完整链路,以及各环节的验证点:

Prometheus 数据源配置验证流程 安装 Prometheus 二进制 / Docker 配置 scrape_configs node_exporter / blackbox 验证 Targets 全部 UP 状态 Grafana 添加数据源 Prometheus 类型 Save & Test 绿色提示成功 验证点清单 ① Prometheus UI → Status → Targets 全部 UP ② Grafana → Data Sources → Save & Test 返回绿色

3.5 使用 Provisioning 自动化数据源配置

对于 GitOps 或基础设施即代码场景,推荐使用 Grafana Provisioning 功能。在 /etc/grafana/provisioning/datasources/ 目录下创建 YAML 文件,Grafana 启动时自动加载:

# /etc/grafana/provisioning/datasources/prometheus-slo.yaml
apiVersion: 1

datasources:
  - name: Prometheus-SLO
    type: prometheus
    access: proxy
    url: http://10.0.1.5:9090
    isDefault: true
    editable: false
    jsonData:
      timeInterval: "15s"
      queryTimeout: "30s"
      httpMethod: "POST"
Provisioning 优势:版本可控、环境一致性、无需手动点击。配合 Ansible 或 Terraform 可批量部署多套 Grafana 实例,每套自动连接对应 Prometheus。

配置完成后,重启 Grafana:systemctl restart grafana-server。在数据源列表页面应自动出现 Prometheus-SLO 且状态为 OK。

3.6 多数据源场景与 SLO 看板设计

大型 SLO 体系可能涉及多个 Prometheus 实例(如按业务线拆分)。Grafana 支持在一个看板中混合使用多个数据源,只需在 Panel 的 Query 选项卡中选择对应数据源即可。以下为多数据源场景的典型架构:

多 Prometheus 数据源与 Grafana SLO 看板 Prometheus 实例 A 业务线 A 指标 Prometheus 实例 B 业务线 B 指标 Grafana SLO 看板 SLO 看板 混合查询 每个 Panel 可独立选择数据源,实现跨实例 SLO 聚合展示

配置多数据源时,注意每个数据源的 Scrape interval 和 Timeout 应与对应 Prometheus 实例的实际配置保持一致,否则 Grafana 的查询时间范围可能出现偏差。

3.7 配置检查清单

完成本章所有配置后,逐项确认以下条目:

  • ☐ Prometheus 进程运行正常,systemctl status prometheus 显示 active (running)。
  • ☐ Prometheus UI 可访问,Targets 页面所有 job 状态为 UP。
  • ☐ 至少一个 exporter(如 node_exporter)已配置并上报指标。
  • ☐ Grafana 数据源列表中存在 Prometheus 类型数据源,状态为 OK。
  • ☐ 在 Grafana Explore 页面执行 up{job="node_exporter"} 查询,返回非空结果。
  • ☐ 若使用 Provisioning,确认 YAML 文件语法正确且已生效。
下一步准备:数据源就绪后,即可开始设计 SLO 指标面板。确保 Prometheus 中已采集到 http_request_duration_seconds、http_requests_total 等核心指标,这些将在第 4 章用于构建 SLO 燃烧速率与错误预算面板。