4. Prometheus 安装部署:二进制安装、Docker 部署、配置文件详解、启动与验证
好,咱们进入实操环节。Prometheus 的安装其实不复杂,但部署方式的选择会直接影响你后续的运维成本。我个人习惯是:测试环境用 Docker,生产环境用二进制。为什么?往下看你就明白了。
4.1 二进制安装:最纯粹的方式
二进制安装的好处是——没有依赖,性能最好。我在项目中遇到过几次因为 Docker 版本兼容性问题导致监控断点的情况,从那以后,核心监控节点我都用二进制部署。
核心思路:下载 → 解压 → 配置 → 启动。就这么简单。
4.1.1 下载与解压
先去 Prometheus 官方 GitHub 下载对应平台的压缩包。以 Linux amd64 为例:
# 下载最新稳定版(建议用 2.x 系列)
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压
tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
# 进入目录
cd prometheus-2.45.0.linux-amd64/
解压后你会看到这些文件:
| 文件/目录 | 说明 |
|---|---|
| prometheus | 主程序二进制文件 |
| promtool | 工具集(检查配置、调试查询等) |
| prometheus.yml | 默认配置文件 |
| consoles/ | 控制台模板目录 |
| console_libraries/ | 控制台库文件 |
小技巧:我习惯把 prometheus 和 promtool 复制到 /usr/local/bin/,这样全局都能调用。配置文件放在 /etc/prometheus/ 下,数据目录单独指定。
4.1.2 创建用户与目录
安全起见,别用 root 跑 Prometheus。创建一个专用用户:
# 创建 prometheus 用户(无登录权限)
useradd --no-create-home --shell /bin/false prometheus
# 创建配置和数据目录
mkdir -p /etc/prometheus
mkdir -p /var/lib/prometheus
# 复制二进制文件
cp prometheus promtool /usr/local/bin/
chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
# 复制配置文件和控制台模板
cp prometheus.yml /etc/prometheus/
cp -r consoles/ console_libraries/ /etc/prometheus/
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
注意:数据目录 /var/lib/prometheus 的权限一定要给对。我曾经因为忘记改权限,Prometheus 启动后一直报 "permission denied",排查了半天才发现是目录归属问题。
4.2 Docker 部署:快速上手首选
如果你只是想快速体验,或者环境是容器化的,那 Docker 部署无疑是最省事的。说白了就是一条命令的事。
# 拉取镜像
docker pull prom/prometheus:latest
# 启动容器
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /path/to/data:/prometheus \
prom/prometheus:latest
嗯,这里要注意:数据卷一定要挂载。否则容器删了,你的历史监控数据就全没了。我在测试环境吃过这个亏,重启容器后 Grafana 面板一片空白,那叫一个尴尬。
生产建议:Docker 部署时,建议用 docker-compose 管理,方便后续升级和配置变更。后面章节我会专门讲 docker-compose 编排。
4.3 配置文件详解:prometheus.yml 是核心
配置文件是 Prometheus 的灵魂。你想想看,所有的抓取目标、规则、告警配置都在这里定义。咱们拆开来看:
# 全局配置
global:
scrape_interval: 15s # 默认抓取间隔
evaluation_interval: 15s # 规则评估间隔
scrape_timeout: 10s # 抓取超时时间
# 告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 规则文件(告警规则、记录规则)
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 抓取配置
scrape_configs:
# Prometheus 自身监控
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 示例:监控 Node Exporter
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.100:9100', '192.168.1.101:9100']
| 配置项 | 说明 | 我的建议值 |
|---|---|---|
| scrape_interval | 数据采集频率 | 生产环境 15s,高频场景 5s |
| evaluation_interval | 告警规则检查频率 | 建议与 scrape_interval 一致 |
| scrape_timeout | 单次抓取超时 | 默认 10s,网络差可调大到 30s |
避坑指南:我曾经把 scrape_interval 设成 1s,结果 Prometheus 直接把目标服务器打挂了。采集频率不是越快越好,要根据你的业务场景来。一般 15s 足够用了。
4.4 启动与验证:确认一切正常
配置写好了,怎么确认它跑起来了?
4.4.1 启动 Prometheus
# 二进制方式启动
./prometheus --config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.listen-address=0.0.0.0:9090
# 或者用 systemd 管理(推荐)
systemctl start prometheus
systemctl enable prometheus
4.4.2 验证步骤
启动后,按以下顺序验证:
- 检查进程:
ps -ef | grep prometheus,确认进程存在 - 检查端口:
ss -tlnp | grep 9090,确认端口监听 - 访问 Web UI:浏览器打开
http://服务器IP:9090 - 查看 Targets:导航到 Status → Targets,确认所有目标都是 UP 状态
- 测试查询:在 Graph 页面输入
up,点击 Execute,应该能看到返回 1
关键指标:如果 Targets 页面显示所有目标都是 UP,恭喜你,Prometheus 已经正常工作了!如果有 DOWN 的目标,检查网络连通性和目标服务是否启动。
4.4.3 日志排查
启动失败怎么办?看日志:
# 查看 Prometheus 日志
journalctl -u prometheus -f
# 或者直接看标准输出
./prometheus --config.file=prometheus.yml 2>&1 | tail -20
常见的启动失败原因:
- 配置文件语法错误(用
promtool check config检查) - 端口被占用(改端口或用
kill释放) - 数据目录权限不对(检查 /var/lib/prometheus 的属主)
重要:每次修改配置文件后,记得用 promtool check config /etc/prometheus/prometheus.yml 验证语法。我见过太多人改完配置直接重启,结果 Prometheus 起不来,排查半天发现是少了个冒号。
好了,到这里 Prometheus 已经成功部署并运行起来了。下一章咱们聊聊如何用 Node Exporter 采集服务器指标,那才是真正开始玩监控的时候。