2. Prometheus 安装与启动:二进制安装、Docker 部署、配置文件基础结构

本章聚焦 Prometheus 服务端自身的安装与启动方式。生产环境中,二进制安装适用于物理机或虚拟机,Docker 部署适用于容器化环境。无论哪种方式,最终都会指向同一个核心——prometheus.yml 配置文件的结构与语义。

2.1 二进制安装(Linux amd64)

二进制安装是最直接的方式,不依赖任何运行时环境,适合对系统资源有严格管控的场景。

步骤清单

  1. 下载:从 Prometheus 官方 GitHub Releases 获取最新稳定版 tarball。
  2. 解压:tar -xzf prometheus-*.tar.gz
  3. 移动目录:将解压后的目录移至 /opt/prometheus 或 /usr/local/prometheus。
  4. 创建数据目录:mkdir -p /data/prometheus
  5. 启动测试:直接执行二进制文件,指定配置文件与存储路径。

启动命令示例

cd /opt/prometheus
./prometheus \
  --config.file=prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.listen-address=0.0.0.0:9090 \
  --log.level=info
生产建议:使用 systemd 管理 Prometheus 进程,确保开机自启与异常重启。将上述启动参数写入 /etc/systemd/system/prometheus.service。

2.2 Docker 部署

Docker 部署将 Prometheus 进程、配置、数据卷分离,适合快速迭代与 CI/CD 环境。

单容器快速启动

docker run -d \
  --name prometheus \
  -p 9090:9090 \
  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v prometheus_data:/prometheus \
  prom/prometheus:latest

docker-compose 推荐结构

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    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'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'

volumes:
  prometheus_data:
权限注意:挂载本地配置文件时,确保宿主机的 prometheus.yml 文件权限为 644 或 640,且属主与容器内用户(uid 65534)一致,否则容器启动时会报权限拒绝错误。

2.3 两种部署方式对比

对比维度 二进制安装 Docker 部署
依赖环境 无(纯静态编译) 需 Docker Engine
启动速度 毫秒级 秒级(拉取镜像)
配置挂载 本地文件直接读取 需 volume 映射
版本管理 手动下载替换 镜像 tag 切换
资源隔离 依赖 OS 进程管理 cgroup 隔离
适用场景 物理机、VM、离线环境 容器编排、CI/CD、开发测试

2.4 配置文件基础结构

prometheus.yml 是 Prometheus 的核心配置,采用 YAML 格式。以下是最小可用配置的结构拆解。

最小配置示例

global:
  scrape_interval: 15s      # 全局采集间隔
  evaluation_interval: 15s  # 全局规则评估间隔

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

配置块语义说明

配置块 作用 必填
global 全局默认参数,所有 job 可继承或覆盖 是
scrape_configs 定义采集目标列表与采集参数 是
rule_files 告警规则与记录规则文件路径列表 否
alerting Alertmanager 连接配置 否
remote_write / remote_read 远程存储读写配置 否

global 块关键字段

  • scrape_interval:默认采集间隔,所有 job 未单独指定时使用此值。
  • evaluation_interval:Prometheus 评估告警规则与记录规则的频率。
  • scrape_timeout:单次采集超时时间,默认 10s,不能超过 scrape_interval。
  • external_labels:全局标签,会附加到所有时间序列与告警中,常用于多集群标识。

scrape_configs 块核心字段

字段 说明 示例
job_name 采集任务名称,会作为标签 job 的值 node_exporter
static_configs 静态目标列表,直接写 IP:PORT targets: ['10.0.0.1:9100']
relabel_configs 采集前/后对标签进行重写、过滤、新增 (后续章节详解)
metric_relabel_configs 仅对采集到的指标进行标签操作 (后续章节详解)
scheme 采集协议,http 或 https http
关键理解:Prometheus 的配置本质是“定义从哪里拉取数据、以什么频率拉取、拉取后如何处理标签”。scrape_configs 是配置的核心入口,后续所有服务发现、relabel 操作都围绕它展开。
Prometheus 配置加载与采集流程 prometheus.yml 配置解析与校验 global 全局参数 scrape_configs 采集 rule_files 规则 采集循环 / 规则评估 配置变更后需重启或发送 SIGHUP 信号使 Prometheus 重新加载

2.5 启动验证与健康检查

无论使用哪种部署方式,启动后都应执行以下验证步骤:

  1. 访问 Web UI:浏览器打开 http://<IP>:9090,确认页面正常加载。
  2. 查看 /metrics:curl http://localhost:9090/metrics,确认 Prometheus 自身指标暴露。
  3. 检查 /-/ready:返回 200 OK 表示就绪。
  4. 检查 /-/healthy:返回 200 OK 表示健康。
  5. 查看 Target 状态:Web UI → Status → Targets,确认配置的 job 状态为 UP。
快速诊断命令:curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}' 可批量查看所有采集目标的健康状态。
Prometheus 启动后组件关系 Prometheus Server :9090 prometheus.yml /metrics (自身) TSDB 本地存储 Web UI / API 启动后 Prometheus 立即读取配置,开启采集循环,并将数据写入 TSDB,同时提供 Web 查询接口

2.6 常见启动问题与排查

现象 可能原因 解决方式
端口 9090 无法访问 防火墙未放行 / 进程未启动 ss -tlnp | grep 9090 检查监听;systemctl status prometheus
Target 状态为 DOWN 目标地址不可达 / 端口错误 / 协议不匹配 curl 测试目标 /metrics 是否可达;检查 scheme 配置
启动报错 parse error YAML 缩进错误 / 字段名拼写错误 使用 promtool check config prometheus.yml 校验
Docker 容器退出 配置文件权限 / 数据目录权限 docker logs prometheus 查看具体错误;调整挂载文件属主
核心工具:promtool 是 Prometheus 官方提供的配置校验与调试工具,安装 Prometheus 时自带。强烈建议在修改配置文件后先执行 promtool check config prometheus.yml 再重启服务。