2. Prometheus 安装与启动:二进制安装、Docker 部署、配置文件基础结构
本章聚焦 Prometheus 服务端自身的安装与启动方式。生产环境中,二进制安装适用于物理机或虚拟机,Docker 部署适用于容器化环境。无论哪种方式,最终都会指向同一个核心——prometheus.yml 配置文件的结构与语义。
2.1 二进制安装(Linux amd64)
二进制安装是最直接的方式,不依赖任何运行时环境,适合对系统资源有严格管控的场景。
步骤清单
- 下载:从 Prometheus 官方 GitHub Releases 获取最新稳定版 tarball。
- 解压:
tar -xzf prometheus-*.tar.gz - 移动目录:将解压后的目录移至
/opt/prometheus或/usr/local/prometheus。 - 创建数据目录:
mkdir -p /data/prometheus - 启动测试:直接执行二进制文件,指定配置文件与存储路径。
启动命令示例
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 操作都围绕它展开。
2.5 启动验证与健康检查
无论使用哪种部署方式,启动后都应执行以下验证步骤:
- 访问 Web UI:浏览器打开
http://<IP>:9090,确认页面正常加载。 - 查看 /metrics:
curl http://localhost:9090/metrics,确认 Prometheus 自身指标暴露。 - 检查 /-/ready:返回
200 OK表示就绪。 - 检查 /-/healthy:返回
200 OK表示健康。 - 查看 Target 状态:Web UI → Status → Targets,确认配置的 job 状态为
UP。
快速诊断命令:
curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}' 可批量查看所有采集目标的健康状态。
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 再重启服务。