Appearance
Prometheus部署
Prometheus 可以直接用二进制部署在 Linux 主机上,也可以通过 Operator 部署在 Kubernetes 里。主机部署更容易看清配置文件、数据目录和 systemd 管理方式;K8s 部署适合 Pod 和 Service 动态变化的场景,相关对象见 Prometheus Operator 和 K3s部署监控栈。
主机部署的核心对象只有几个:Prometheus 进程、prometheus.yml 配置文件、数据目录、规则文件和 systemd unit。排查时也围绕这些对象展开。
一、目录规划
目录通常拆成三类:
| 路径 | 用途 |
|---|---|
/usr/local/bin/prometheus | Prometheus 二进制 |
/etc/prometheus | 配置文件和规则文件 |
/var/lib/prometheus | TSDB 数据目录 |
/etc/systemd/system/prometheus.service | systemd 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 --versionpromtool 很常用,配置文件和规则文件改完以后可以先校验,再重载 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_name | target 分组名,会成为 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/-/reloadreload 前仍然要先用 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 时会单独限制保留周期和资源请求。