3. Prometheus 数据源配置:安装、采集与连接
Prometheus 是整个 SLO 监控体系的数据基座。Grafana 本身不存储时序数据,所有 SLO 指标、告警规则评估结果、自愈剧本触发计数都依赖 Prometheus 提供查询接口。本章按“安装 → 采集配置 → Grafana 数据源连接”三阶段展开,确保你从零搭建一套可用的 Prometheus + Grafana 联合环境。
3.1 Prometheus 安装
推荐使用二进制直接部署或 Docker 容器化部署。生产环境建议使用 systemd 管理进程,便于日志轮转与自动重启。以下为二进制安装的标准步骤:
- 下载:从 Prometheus 官方下载页 获取对应平台的压缩包。
- 解压:
tar -xzf prometheus-*.tar.gz,将目录移至/opt/prometheus。 - 创建用户:
useradd --no-create-home --shell /bin/false prometheus。 - 配置目录:
/etc/prometheus(存放 prometheus.yml),/var/lib/prometheus(存放数据)。 - 编写 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
scrape_interval: 5s,但需注意存储开销。
配置完成后,执行 systemctl restart prometheus,并在 Prometheus UI 的 Targets 页面确认所有目标均为 UP 状态。
3.3 Grafana 数据源连接
Grafana 通过数据源插件与 Prometheus 通信。连接配置在 Grafana Web UI 中完成,也可通过 provisioning 文件实现自动化。以下为手动配置步骤:
- 登录 Grafana,进入 Configuration → Data Sources。
- 点击 Add data source,选择 Prometheus。
- 填写以下关键字段:
| 字段 | 推荐值 | 说明 |
|---|---|---|
| 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”,则连接成功。
localhost 但 Grafana 与 Prometheus 不在同一主机。
3.4 数据源配置验证流程
以下 SVG 图展示了从 Prometheus 安装到 Grafana 数据源连接成功的完整链路,以及各环节的验证点:
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"
配置完成后,重启 Grafana:systemctl restart grafana-server。在数据源列表页面应自动出现 Prometheus-SLO 且状态为 OK。
3.6 多数据源场景与 SLO 看板设计
大型 SLO 体系可能涉及多个 Prometheus 实例(如按业务线拆分)。Grafana 支持在一个看板中混合使用多个数据源,只需在 Panel 的 Query 选项卡中选择对应数据源即可。以下为多数据源场景的典型架构:
配置多数据源时,注意每个数据源的 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 文件语法正确且已生效。
http_request_duration_seconds、http_requests_total 等核心指标,这些将在第 4 章用于构建 SLO 燃烧速率与错误预算面板。