Skip to content

Prometheus部署

Prometheus 可以直接用二进制部署在 Linux 主机上,也可以通过 Operator 部署在 Kubernetes 里。主机部署更容易看清配置文件、数据目录和 systemd 管理方式;K8s 部署适合 Pod 和 Service 动态变化的场景,相关对象见 Prometheus OperatorK3s部署监控栈

主机部署的核心对象只有几个:Prometheus 进程、prometheus.yml 配置文件、数据目录、规则文件和 systemd unit。排查时也围绕这些对象展开。

一、目录规划

目录通常拆成三类:

路径用途
/usr/local/bin/prometheusPrometheus 二进制
/etc/prometheus配置文件和规则文件
/var/lib/prometheusTSDB 数据目录
/etc/systemd/system/prometheus.servicesystemd unit

配置和数据分开,升级时替换二进制和配置不会误碰历史数据。数据目录要重点关注磁盘空间,Prometheus 本地 TSDB 写入很频繁,磁盘满以后采集和查询都会受影响。

二、创建用户和目录

bash
# prometheus 只作为服务运行用户,不需要登录 shell
useradd --system --no-create-home --shell /sbin/nologin prometheus

mkdir -p /etc/prometheus/rules /var/lib/prometheus /opt/monitor/src
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

三、安装二进制

实验环境固定 Prometheus 3.11.3。其余组件版本见 Prometheus 基础 中的版本表。

bash
cd /opt/monitor/src

# 下载官方二进制包,内网环境可以提前放到本地软件仓库
curl -fL -o prometheus-3.11.3.linux-amd64.tar.gz \
  https://github.com/prometheus/prometheus/releases/download/v3.11.3/prometheus-3.11.3.linux-amd64.tar.gz

tar -zxf prometheus-3.11.3.linux-amd64.tar.gz
install -m 0755 prometheus-3.11.3.linux-amd64/prometheus /usr/local/bin/prometheus
install -m 0755 prometheus-3.11.3.linux-amd64/promtool /usr/local/bin/promtool

prometheus --version
promtool --version

promtool 很常用,配置文件和规则文件改完以后可以先校验,再重载 Prometheus。

四、基础配置

yaml
global:
  scrape_interval: 30s
  evaluation_interval: 30s

rule_files:
  - /etc/prometheus/rules/*.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
          - 127.0.0.1:9090

几个字段的含义:

字段说明
scrape_interval抓取间隔,间隔越短写入量越大
evaluation_interval告警规则计算间隔
rule_files告警规则和记录规则文件
scrape_configs抓取目标配置
job_nametarget 分组名,会成为 job 标签

写完后校验:

bash
promtool check config /etc/prometheus/prometheus.yml

五、systemd 管理

ini
[Unit]
Description=Prometheus
After=network-online.target
Wants=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --storage.tsdb.retention.time=7d \
  --web.listen-address=:9090 \
  --web.enable-lifecycle
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

启动:

bash
systemctl daemon-reload
systemctl enable --now prometheus
systemctl status prometheus

--web.enable-lifecycle 打开后,可以用 HTTP reload 配置:

bash
curl -X POST http://127.0.0.1:9090/-/reload

reload 前仍然要先用 promtool check config 校验配置。配置文件写错时,reload 会失败;如果是 systemd 重启,配置错误会导致服务直接起不来。

六、验证入口

bash
# 服务是否监听
ss -lntp | grep 9090

# Prometheus 自身健康状态
curl -s http://127.0.0.1:9090/-/ready

# 查询 up 指标
curl -sG http://127.0.0.1:9090/api/v1/query \
  --data-urlencode 'query=up'

Targets 页面里 Prometheus 自身应该是 UP。如果这里都不正常,后面接 Node Exporter、MySQL Exporter、Redis Exporter 也不会正常。

七、容量控制

主机部署最容易忽略的是本地 TSDB 数据量。几个参数会直接影响磁盘和内存:

参数影响
target 数量抓取目标越多,写入越多
每个 target 样本数exporter 暴露指标越多,序列越多
scrape interval间隔越短,样本越多
retention保留越久,磁盘越大
label 基数标签组合越多,内存和磁盘压力越大

小环境保留 7 天通常够用。K8s 监控里 Pod、container、namespace、node 等标签很多,序列数量比传统主机监控增长更快,后面部署 kube-prometheus-stack 时会单独限制保留周期和资源请求。