17.2.2 组件部署与目录结构规划
在生产环境中部署 Prometheus 时,应将组件、数据与配置分离,形成清晰的目录结构与生命周期管理方式。推荐以二进制方式部署 Prometheus Server、Alertmanager 与常用 Exporter,并通过 systemd 管理进程,以便统一启动、日志与权限控制。
原理草图(组件关系)
组件部署规划
- Prometheus Server:负责指标采集、存储与查询。
- Alertmanager:负责告警分组、去重与通知。
- Node Exporter:采集主机指标,建议与 Prometheus 分离部署。
- 可选 Exporter:如 mysqld_exporter、redis_exporter、nginx_exporter,根据业务选择。
推荐目录结构
- /opt/prometheus/:程序安装目录
- prometheus、promtool 可执行文件
- /etc/prometheus/:配置目录
- prometheus.yml 主配置
- rules/ 告警规则与记录规则
- /var/lib/prometheus/:数据存储目录
- TSDB 数据与 WAL 日志
- /var/log/prometheus/:日志目录(或由 systemd journal 管理)
Alertmanager 目录结构
- /opt/alertmanager/:程序目录
- /etc/alertmanager/:配置文件 alertmanager.yml
- /var/lib/alertmanager/:运行数据与静态资源
Exporter 部署建议
- 统一安装至 /opt/exporters/,每个 exporter 独立子目录
- 以 systemd 单独管理,便于升级与重启
- 端口规划避免冲突,例如:9100(node)、9121(redis)、9104(mysql)
权限与用户建议
- 创建独立用户 prometheus、alertmanager
- 仅授予配置与数据目录读写权限,禁止 root 运行
- 配置文件设置只读,防止误操作修改
目录创建与用户初始化(示例命令)
# 创建用户
useradd -r -s /sbin/nologin prometheus
useradd -r -s /sbin/nologin alertmanager
# 创建目录
mkdir -p /opt/prometheus /etc/prometheus/rules /var/lib/prometheus /var/log/prometheus
mkdir -p /opt/alertmanager /etc/alertmanager /var/lib/alertmanager
mkdir -p /opt/exporters/node_exporter
# 权限设置
chown -R prometheus:prometheus /opt/prometheus /etc/prometheus /var/lib/prometheus /var/log/prometheus
chown -R alertmanager:alertmanager /opt/alertmanager /etc/alertmanager /var/lib/alertmanager
二进制解压与文件摆放(示例)
# Prometheus
tar -xzf prometheus-2.48.0.linux-amd64.tar.gz
cp prometheus-2.48.0.linux-amd64/{prometheus,promtool} /opt/prometheus/
# Alertmanager
tar -xzf alertmanager-0.26.0.linux-amd64.tar.gz
cp alertmanager-0.26.0.linux-amd64/{alertmanager,amtool} /opt/alertmanager/
# Node Exporter
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
cp node_exporter-1.7.0.linux-amd64/node_exporter /opt/exporters/node_exporter/
systemd 服务文件位置
- /etc/systemd/system/prometheus.service
- /etc/systemd/system/alertmanager.service
- /etc/systemd/system/node_exporter.service
systemd 启动配置示例(Prometheus)
# /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/prometheus/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.listen-address=:9090
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动与验证(示例命令)
systemctl daemon-reload
systemctl enable --now prometheus
# 预期效果:Prometheus 监听 9090
ss -lntp | grep 9090
# 查看日志(systemd)
journalctl -u prometheus -n 50 --no-pager
常见排错(示例与解释)
# 1) 端口未监听:检查进程状态与参数
systemctl status prometheus
# 2) 配置文件错误:使用 promtool 验证
/opt/prometheus/promtool check config /etc/prometheus/prometheus.yml
# 3) 权限问题:确认数据目录可写
sudo -u prometheus touch /var/lib/prometheus/.perm_test && rm -f /var/lib/prometheus/.perm_test
promtool check config:语法检查失败会给出具体行号,便于快速定位。- 权限测试:以 prometheus 用户写入文件,避免运行后报
permission denied。
练习
1. 在 /opt/exporters/ 下新增 redis_exporter 目录,规划端口为 9121,并写出对应 systemd 服务文件路径。
2. 修改 Prometheus 监听端口为 19090,重启后用 ss -lntp 验证。
3. 刻意删除 /var/lib/prometheus 写权限,观察日志报错并修复权限。