17.2.1 安装方式对比与选型(源码包/二进制/容器)
在生产环境中,Prometheus常见安装方式包括源码包编译、官方二进制包、容器化部署三种。选型需结合交付速度、可维护性、性能与运维体系,并基于一致的目录规范与数据持久化策略。
源码包编译
- 优点:可定制编译参数,适合需要二次开发或特定编译优化的场景。
- 缺点:构建依赖复杂,升级成本高,不利于标准化交付。
- 适用:有编译链路与构建平台的团队,或需要深度定制功能的场景。
示例:源码编译与安装(Linux)
# 1) 准备依赖
sudo yum install -y gcc make git wget tar
# 2) 下载源码(以 v2.49.1 为例)
cd /usr/local/src
wget https://github.com/prometheus/prometheus/archive/refs/tags/v2.49.1.tar.gz
tar -zxf v2.49.1.tar.gz
cd prometheus-2.49.1
# 3) 编译(需要 Go 环境,若无先安装)
# 说明:make build 生成 prometheus 与 promtool
make build
# 4) 安装
sudo useradd -r -s /sbin/nologin prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
# 5) 验证
prometheus --version
官方二进制包
- 优点:安装简单、启动快速、版本稳定,适合裸机或虚拟机部署。
- 缺点:需自行管理运行用户、目录权限与服务托管方式。
- 适用:传统主机环境、对容器不依赖的企业内网场景。
示例:二进制包安装 + systemd 托管
# 1) 下载并解压
cd /usr/local/src
wget https://github.com/prometheus/prometheus/releases/download/v2.49.1/prometheus-2.49.1.linux-amd64.tar.gz
tar -zxf prometheus-2.49.1.linux-amd64.tar.gz
# 2) 创建用户与目录
sudo useradd -r -s /sbin/nologin prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
# 3) 复制二进制与控制台资源
cd prometheus-2.49.1.linux-amd64
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
sudo chown -R prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool /etc/prometheus
# 4) 创建基础配置
sudo tee /etc/prometheus/prometheus.yml >/dev/null <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
EOF
# 5) systemd 服务
sudo tee /etc/systemd/system/prometheus.service >/dev/null <<'EOF'
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.listen-address=0.0.0.0:9090
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 6) 启动与验证
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
curl -s http://127.0.0.1:9090/-/healthy
容器化部署
- 优点:标准化交付、镜像可复用,易与Kubernetes编排集成。
- 缺点:需关注持久化存储、时钟同步与资源限制配置。
- 适用:容器平台、云原生环境、需要弹性扩缩容与自动化运维的场景。
示例:Docker 方式部署
# 1) 准备持久化目录与配置
sudo mkdir -p /opt/prometheus/data /opt/prometheus/conf
sudo tee /opt/prometheus/conf/prometheus.yml >/dev/null <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
EOF
# 2) 运行容器
docker run -d --name prometheus \
-p 9090:9090 \
-v /opt/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml:ro \
-v /opt/prometheus/data:/prometheus \
--restart=always \
prom/prometheus:v2.49.1
# 3) 验证
docker logs --tail=20 prometheus
curl -s http://127.0.0.1:9090/-/ready
选型建议
- 主机/虚拟机:优先二进制包,配合 systemd 托管,稳定高效。
- 容器平台:优先容器部署,结合 PVC 与资源配额保证数据持久化与性能。
- 需要定制:选择源码编译,但要建立自动化构建与版本管理流程。
常见问题与排错示例
# 1) 端口占用
ss -lntp | grep 9090
# 2) 配置语法检查
promtool check config /etc/prometheus/prometheus.yml
# 3) 数据目录权限
ls -ld /var/lib/prometheus
# 预期:prometheus 用户可写
# 4) 服务启动失败排查
journalctl -u prometheus -n 50 --no-pager
练习
1. 使用二进制包在本机部署 Prometheus,并确认 /-/healthy 返回 200。
2. 修改 scrape_interval 为 30s,重启服务观察生效。
3. 使用 Docker 部署 Prometheus,验证数据目录持久化是否成功(重启容器后数据仍在)。