Prometheus 安装部署
本文以 Ubuntu/Debian 类 Linux 为例。CentOS/RHEL 只需替换用户和目录创建命令,Prometheus 二进制、配置文件和 systemd 参数保持一致。官方版本和校验文件从 Prometheus Releases 获取,选择与 uname -m 输出匹配的 Linux 发行包。
以下示例默认 Prometheus 仅监听本机回环地址。生产环境应使用独立数据盘、HTTPS 反向代理或内网访问控制、固定镜像/二进制版本,以及经过演练的备份恢复方案。
1. 环境与目录准备
先确认 CPU 架构和可用磁盘,再创建不可登录的专用用户。Prometheus 不应以 root 运行。
# 查看 CPU 架构:x86_64 对应 linux-amd64,aarch64 对应 linux-arm64
uname -m
# 创建不可登录的系统用户,只用于运行 Prometheus 进程
sudo useradd --system --no-create-home --shell /usr/sbin/nologin prometheus
# 创建配置、规则和 TSDB 数据目录,并将所有权交给 prometheus 用户
sudo install -d -o prometheus -g prometheus /etc/prometheus
sudo install -d -o prometheus -g prometheus /etc/prometheus/rules
sudo install -d -o prometheus -g prometheus /var/lib/prometheus
/var/lib/prometheus 必须挂载在受监控的持久磁盘上。除了磁盘容量,还要监控 inode;TSDB 的 WAL 和 Block 文件都依赖稳定的本地文件系统。
2. 下载并校验二进制包
在 官方 Releases 页面 确认目标版本的发布说明和校验文件。下面使用 v3.5.0 作为示例,升级时只替换为经过预发验证的版本。
# 仅在当前终端定义版本和架构变量,不写入系统环境
PROM_VERSION=3.5.0
PROM_ARCH=amd64
下载 Prometheus 发行包和同版本校验文件:
# 下载发行包和官方校验文件;-f 让 HTTP 错误直接失败
curl -fLO "https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-${PROM_ARCH}.tar.gz"
curl -fLO "https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/sha256sums.txt"
校验通过后再解压:
# 校验目标发行包的 SHA256;校验失败时不要继续安装
grep "prometheus-${PROM_VERSION}.linux-${PROM_ARCH}.tar.gz" sha256sums.txt | sha256sum --check
# 解压到当前工作目录,保留原包以便审计或回滚
tar -xzf "prometheus-${PROM_VERSION}.linux-${PROM_ARCH}.tar.gz"
3. 安装文件与最小配置
# 安装服务端和配置校验工具;promtool 用于上线前检查配置和规则
sudo install -m 0755 "prometheus-${PROM_VERSION}.linux-${PROM_ARCH}/prometheus" /usr/local/bin/prometheus
sudo install -m 0755 "prometheus-${PROM_VERSION}.linux-${PROM_ARCH}/promtool" /usr/local/bin/promtool
再复制默认配置并确认安装版本:
# 复制默认配置作为起点,并交由运行用户读取
sudo install -o prometheus -g prometheus -m 0644 \
"prometheus-${PROM_VERSION}.linux-${PROM_ARCH}/prometheus.yml" \
/etc/prometheus/prometheus.yml
# 确认二进制版本,记录在变更单或部署清单中
prometheus --version
将 /etc/prometheus/prometheus.yml 调整为最小可启动配置。代码注释说明每一项的作用:
global:
# 每 30 秒抓取一次目标;缩短会增加目标、网络和 TSDB 压力
scrape_interval: 30s
# 每 30 秒计算一次记录规则和告警规则
evaluation_interval: 30s
scrape_configs:
# job_name 会成为所有样本的 job 标签
- job_name: prometheus
static_configs:
# Prometheus 在本机 9090 端口暴露自己的 /metrics
- targets: ["127.0.0.1:9090"]
# 在启动前校验 YAML、抓取配置和引用的规则文件
sudo -u prometheus promtool check config /etc/prometheus/prometheus.yml
4. 使用 systemd 托管服务
创建 /etc/systemd/system/prometheus.service。每个启动参数都显式写出,便于后续审计和变更:
[Unit]
# 服务描述会显示在 systemctl status 输出中
Description=Prometheus Server
# 只有网络就绪后才启动,避免启动时 DNS/网络尚未可用
After=network-online.target
Wants=network-online.target
[Service]
# 使用无登录权限的专用用户,限制文件访问范围
User=prometheus
Group=prometheus
# 主进程:配置、数据目录、保留时间和监听地址均明确指定
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=15d \
--web.listen-address=127.0.0.1:9090
# 仅在异常退出时重启,避免配置错误时快速循环掩盖原因
Restart=on-failure
RestartSec=5s
[Install]
# 让服务随常规多用户系统启动
WantedBy=multi-user.target
# 重新加载 systemd 单元定义,使新 service 文件生效
sudo systemctl daemon-reload
# 设置开机启动并立刻启动服务
sudo systemctl enable --now prometheus
启动后分别检查服务状态与日志:
# 查看当前状态;失败时紧接着查看 journal 日志
sudo systemctl status prometheus --no-pager
sudo journalctl -u prometheus -n 100 --no-pager
修改配置后先运行 promtool,再通过受控发布重启或重载。不要在公网暴露 --web.enable-lifecycle 或管理 API。
5. Docker Compose 部署
Docker 适合本地或受容器编排管理的场景。以下配置将 Web 端口限制为本机,并用 named volume 保存 TSDB:
services:
prometheus:
# 固定版本;生产可进一步固定镜像 digest
image: prom/prometheus:v3.5.0
restart: unless-stopped
ports:
# 仅监听宿主机回环地址,不直接向公网暴露 UI/API
- "127.0.0.1:9090:9090"
volumes:
# 配置和规则只读挂载,防止容器内进程修改部署声明
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./rules:/etc/prometheus/rules:ro
# 命名卷持久化 TSDB 数据
- prometheus-data:/prometheus
command:
# 显式指定容器内配置和数据目录
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=15d
volumes:
prometheus-data:
# 后台启动;首次运行会拉取镜像并创建数据卷
docker compose up -d
# 确认容器处于运行状态,并在容器内校验实际加载的配置
docker compose ps
docker compose exec prometheus promtool check config /etc/prometheus/prometheus.yml
6. 安装验证
# Readiness 成功说明 Prometheus 已能服务请求
curl --fail http://127.0.0.1:9090/-/ready
# 调用 HTTP API 查询 up;结果应包含 prometheus 自身的 1
curl -G http://127.0.0.1:9090/api/v1/query \
--data-urlencode 'query=up'
浏览器访问 http://127.0.0.1:9090/targets,prometheus 任务应显示 UP。之后继续阅读 服务发现与 Relabeling。