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 验证步骤

启动后,按以下顺序验证:

  1. 检查进程:ps -ef | grep prometheus,确认进程存在
  2. 检查端口:ss -tlnp | grep 9090,确认端口监听
  3. 访问 Web UI:浏览器打开 http://服务器IP:9090
  4. 查看 Targets:导航到 Status → Targets,确认所有目标都是 UP 状态
  5. 测试查询:在 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 采集服务器指标,那才是真正开始玩监控的时候。