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 值组成的有序列表。
  • 存储: 按时间序列独立存储,支持高效的时间范围查询。
Prometheus 核心数据模型:指标、标签、时间序列 Prometheus 核心数据模型 指标 (Metric) http_requests_total 标签 (Labels) {method="GET", status="200"} 时间序列 (T1, V1), (T2, V2)... 唯一标识:指标名 + 标签集合 → 时间序列 每个时间序列包含按时间排序的 (timestamp, value) 数据点 示例:http_requests_total{job="api-server", instance="10.0.1.5:9090", method="POST"} 时间戳: 1710000000, 值: 1024 | 时间戳: 1710000060, 值: 1035

2.2 部署方式对比:二进制 vs Docker

根据环境成熟度和运维习惯,可以选择二进制或 Docker 方式部署。下表从多个维度对比两种方式:

维度二进制部署Docker 部署
启动速度直接执行二进制文件,秒级启动需拉取镜像,首次启动较慢
依赖管理无外部依赖,单文件运行依赖 Docker 引擎,镜像自带环境
版本管理手动下载替换二进制通过镜像标签切换版本,回滚方便
资源隔离依赖系统进程管理容器级隔离,资源限制灵活
配置持久化本地文件系统需挂载卷(Volume)或绑定目录
适用场景生产环境、性能敏感场景开发测试、CI/CD、快速验证

2.3 二进制部署 Prometheus Server

二进制部署是最直接的方式,适合生产环境和对性能有要求的场景。

2.3.1 下载与安装

  1. 访问 Prometheus 官方下载页面,选择对应操作系统的最新版本。
  2. 下载并解压:
# 以 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 保持时间一致,否则时间戳可能出现偏差。
Prometheus 部署架构与数据流 Prometheus 部署架构与数据流 Prometheus Server 端口 9090 TSDB 存储 / 告警评估 抓取目标 node_exporter:9100 抓取目标 cadvisor:8080 抓取目标 blackbox_exporter 数据流:Prometheus Server 主动 Pull 抓取目标暴露的 /metrics 端点 支持静态配置(static_configs)和服务发现(consul_sd_configs, kubernetes_sd_configs 等)

2.5 验证部署与基础操作

无论使用哪种部署方式,部署完成后都应进行以下验证:

  1. 访问 Web UI: 浏览器打开 http://<server-ip>:9090,确认页面正常加载。
  2. 检查 Targets: 导航至 Status → Targets,确认所有配置的抓取目标状态为 UP。
  3. 执行基础查询: 在 Graph 页面输入 prometheus_http_requests_total,点击 Execute,应返回数据点。
  4. 查看配置: 导航至 Status → Configuration,确认加载的配置与 prometheus.yml 一致。
关键检查点: 如果 Targets 显示 DOWN,请检查网络连通性、目标端口是否开放、Exporter 是否正常运行。这是后续告警自愈链路中第一个可能出问题的环节。

2.6 本章小结

  • 核心概念: 指标(Counter/Gauge/Histogram/Summary)、标签(维度)、时间序列(唯一标识 + 数据点)是 Prometheus 数据模型的基石。
  • 部署方式: 二进制部署适合生产环境,Docker 部署适合快速验证和容器化场景。
  • 配置文件: prometheus.yml 定义全局参数和抓取目标,是运维管理的核心。
  • 验证步骤: Web UI、Targets 状态、基础查询是部署成功的三大验证手段。