2. Prometheus 基础与环境搭建:核心概念与部署
本章是构建告警自愈体系的基石。你将掌握 Prometheus 的三大核心抽象——指标、标签、时间序列,并学会通过二进制与 Docker 两种方式快速部署 Prometheus Server。理解这些概念是后续配置告警规则、设计自愈 Playbook 的前提。
2.1 核心概念:指标、标签、时间序列
Prometheus 将所有监控数据统一建模为时间序列(Time Series)。每个时间序列由指标名(Metric Name)和一组标签(Labels)唯一标识,并附带一个按时间排序的数据点流。
核心公式: 时间序列 = 指标名 + 标签集合 + 时间戳-值对序列
2.1.1 指标(Metric)
指标描述被监控对象的某个可测量维度,例如 HTTP 请求总数、CPU 使用率、队列深度。指标名遵循命名规范:namespace_subsystem_unit_suffix。
| 指标类型 | 说明 | 典型场景 |
|---|---|---|
| Counter | 只增不减的累计计数器 | 请求总数、错误总数、任务执行次数 |
| Gauge | 可增可减的瞬时值 | CPU 温度、内存使用量、并发连接数 |
| Histogram | 对观测值进行分桶统计 | 请求延迟分布、响应大小分布 |
| Summary | 类似 Histogram,但直接计算分位数 | 请求延迟的 P99、P95 |
2.1.2 标签(Labels)
标签是键值对,用于对同一指标进行多维度的细分。例如,指标 http_requests_total 可以附加标签 method="GET"、endpoint="/api/v1/users"、status="200",从而区分不同维度的请求计数。
- 唯一性: 指标名 + 标签集合构成时间序列的唯一标识。
- 维度: 标签是 PromQL 进行聚合、分组、过滤的核心依据。
- 常见标签:
job(任务名)、instance(实例地址)、__name__(指标名,内置)。
2.1.3 时间序列(Time Series)
时间序列是 Prometheus 存储的基本单元。每个时间序列包含:
- 标识: 指标名 + 标签集合(如
http_requests_total{method="GET", status="200"})。 - 数据点: 由时间戳(毫秒精度)和 float64 值组成的有序列表。
- 存储: 按时间序列独立存储,支持高效的时间范围查询。
2.2 部署方式对比:二进制 vs Docker
根据环境成熟度和运维习惯,可以选择二进制或 Docker 方式部署。下表从多个维度对比两种方式:
| 维度 | 二进制部署 | Docker 部署 |
|---|---|---|
| 启动速度 | 直接执行二进制文件,秒级启动 | 需拉取镜像,首次启动较慢 |
| 依赖管理 | 无外部依赖,单文件运行 | 依赖 Docker 引擎,镜像自带环境 |
| 版本管理 | 手动下载替换二进制 | 通过镜像标签切换版本,回滚方便 |
| 资源隔离 | 依赖系统进程管理 | 容器级隔离,资源限制灵活 |
| 配置持久化 | 本地文件系统 | 需挂载卷(Volume)或绑定目录 |
| 适用场景 | 生产环境、性能敏感场景 | 开发测试、CI/CD、快速验证 |
2.3 二进制部署 Prometheus Server
二进制部署是最直接的方式,适合生产环境和对性能有要求的场景。
2.3.1 下载与安装
- 访问 Prometheus 官方下载页面,选择对应操作系统的最新版本。
- 下载并解压:
# 以 Linux amd64 为例
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar -xzf prometheus-2.53.0.linux-amd64.tar.gz
cd prometheus-2.53.0.linux-amd64/
2.3.2 配置文件结构
Prometheus 通过 prometheus.yml 定义抓取目标、规则文件、存储配置等。核心配置项如下:
# 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: ['192.168.1.10:9100'] # 抓取节点指标
2.3.3 启动与验证
# 启动 Prometheus(默认加载当前目录下的 prometheus.yml)
./prometheus --config.file=prometheus.yml --storage.tsdb.path=/data/prometheus
# 验证:访问 http://localhost:9090,打开 Prometheus Web UI
# 在 /targets 页面查看抓取目标状态
生产建议: 使用 systemd 管理 Prometheus 进程,设置
--storage.tsdb.retention.time=30d 控制数据保留时间,避免磁盘写满。
2.4 Docker 部署 Prometheus Server
Docker 部署适合快速搭建、开发测试和容器化环境。
2.4.1 准备配置文件与数据目录
# 创建配置目录和数据目录
mkdir -p /opt/prometheus/config /opt/prometheus/data
# 将 prometheus.yml 放入 /opt/prometheus/config/
2.4.2 启动容器
docker run -d \
--name prometheus \
--restart=always \
-p 9090:9090 \
-v /opt/prometheus/config:/etc/prometheus \
-v /opt/prometheus/data:/prometheus \
prom/prometheus:v2.53.0 \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--storage.tsdb.retention.time=30d
2.4.3 使用 Docker Compose(推荐)
创建 docker-compose.yml:
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.53.0
container_name: prometheus
restart: always
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
volumes:
prometheus_data:
# 启动
docker-compose up -d
注意: Docker 部署时,容器内时间默认使用 UTC。如果宿主机时区非 UTC,建议挂载
/etc/localtime:/etc/localtime:ro 保持时间一致,否则时间戳可能出现偏差。
2.5 验证部署与基础操作
无论使用哪种部署方式,部署完成后都应进行以下验证:
- 访问 Web UI: 浏览器打开
http://<server-ip>:9090,确认页面正常加载。 - 检查 Targets: 导航至
Status → Targets,确认所有配置的抓取目标状态为UP。 - 执行基础查询: 在 Graph 页面输入
prometheus_http_requests_total,点击 Execute,应返回数据点。 - 查看配置: 导航至
Status → Configuration,确认加载的配置与prometheus.yml一致。
关键检查点: 如果 Targets 显示
DOWN,请检查网络连通性、目标端口是否开放、Exporter 是否正常运行。这是后续告警自愈链路中第一个可能出问题的环节。
2.6 本章小结
- 核心概念: 指标(Counter/Gauge/Histogram/Summary)、标签(维度)、时间序列(唯一标识 + 数据点)是 Prometheus 数据模型的基石。
- 部署方式: 二进制部署适合生产环境,Docker 部署适合快速验证和容器化场景。
- 配置文件:
prometheus.yml定义全局参数和抓取目标,是运维管理的核心。 - 验证步骤: Web UI、Targets 状态、基础查询是部署成功的三大验证手段。