CentOS 部署 Prometheus 并用 systemd 管理
前言
Prometheus 是一款开源的系统监控和警报工具包,由 SoundCloud 开发并在2016年加入 Cloud Native Computing Foundation(CNCF)。它已经成为监控容器化和微服务架构的首选解决方案之一。
官方提供了多种部署方式,包括 Docker 容器、源码编译和预编译二进制文件等。由于 Prometheus 基于 Golang 实现,具有很好的可移植性,本文将介绍如何使用预编译二进制文件在 CentOS 系统上部署 Prometheus,并使用 systemd 进行服务管理。
环境准备
在开始之前,请确保您拥有:
- 一台运行 CentOS 7 或更高版本的服务器
- 具有 sudo 权限的用户账户
- 网络连接(用于下载 Prometheus)
部署步骤
1. 下载 Prometheus
首先,访问 Prometheus 官方 GitHub 发布页面 获取最新版本的下载链接。本文以当时最新版本为例:
# 下载 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz# 解压下载的压缩包
tar -zxvf prometheus-2.48.0.linux-amd64.tar.gz# 将解压后的目录移动到合适的位置
sudo mv prometheus-2.48.0.linux-amd64 /usr/local/prometheus
命令解释:
wget
: 用于从网络下载文件tar -zxvf
: 解压 .tar.gz 格式的压缩包(z: gzip, x: 解压, v: 显示详细信息, f: 指定文件)mv
: 移动文件或目录到指定位置
2. 创建专用用户
为了安全考虑,我们不建议使用 root 用户运行 Prometheus。创建一个专用系统用户:
# 创建用户组
sudo groupadd prometheus# 创建用户并指定主目录和shell
sudo useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus
命令解释:
groupadd
: 创建新的用户组useradd
: 创建新用户-g
: 指定用户所属主组-m
: 创建用户的家目录-d
: 指定家目录位置-s
: 指定用户登录的shell(/sbin/nologin 表示不允许登录)
3. 设置目录权限
将 Prometheus 文件的所有权分配给新创建的用户:
# 更改 Prometheus 目录的所有者
sudo chown -R prometheus:prometheus /usr/local/prometheus# 更改数据目录的所有者
sudo chown -R prometheus:prometheus /var/lib/prometheus
命令解释:
chown -R
: 递归更改文件/目录的所有者(格式:用户:组)
4. 验证安装
在继续之前,我们可以测试 Prometheus 是否能正常运行:
# 切换到 prometheus 用户(需要先设置密码或使用sudo)
sudo -u prometheus /usr/local/prometheus/prometheus --version
如果安装正确,这将输出 Prometheus 的版本信息。
配置 systemd 服务
使用 systemd 管理 Prometheus 服务可以实现自动启动、停止和重启,以及故障时自动恢复。
1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/prometheus.service
将以下内容添加到文件中:
[Unit]
Description=Prometheus Monitoring System
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/usr/local/prometheus/prometheus \--config.file=/usr/local/prometheus/prometheus.yml \--storage.tsdb.path=/var/lib/prometheus \--web.listen-address=:9090
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
配置解释:
[Unit]
: 服务描述和依赖关系Description
: 服务描述Documentation
: 相关文档链接After
: 指定在哪些服务之后启动
[Service]
: 服务运行配置Type
: 服务类型(simple 表示ExecStart启动的是主进程)User/Group
: 运行服务的用户和组ExecStart
: 启动服务的命令--config.file
: 指定配置文件路径--storage.tsdb.path
: 指定数据存储路径--web.listen-address
: 指定Web界面监听地址和端口
ExecReload
: 重载服务时执行的命令Restart
: 故障时自动重启
[Install]
: 安装相关信息WantedBy
: 指定服务所属 target
2. 重新加载 systemd 配置
sudo systemctl daemon-reload
命令解释:
systemctl daemon-reload
: 重新加载 systemd 配置,使新服务文件生效
3. 启动 Prometheus 服务
# 启动服务
sudo systemctl start prometheus# 设置开机自启
sudo systemctl enable prometheus# 检查服务状态
sudo systemctl status prometheus
4. 查看服务日志
如果服务启动失败,可以查看日志排查问题:
journalctl -u prometheus -f
防火墙配置
如果系统启用了防火墙,需要开放 Prometheus 的端口(默认9090):
# 开放9090端口
sudo firewall-cmd --permanent --add-port=9090/tcp# 重新加载防火墙配置
sudo firewall-cmd --reload
命令解释:
firewall-cmd
: CentOS 防火墙管理命令--permanent
: 永久生效(重启后仍有效)--add-port
: 添加端口规则--reload
: 重新加载防火墙规则
访问 Prometheus Web 界面
在浏览器中访问 http://服务器IP:9090
,应该能看到 Prometheus 的 Web 界面。
- Graph 页面: 可以编写和执行 PromQL 查询语句
- Status 菜单: 查看运行时配置、规则、目标等状态信息
常见问题与解决方案
-
端口占用问题
- 如果默认的9090端口已被占用,可以通过修改
--web.listen-address
参数更换端口
- 如果默认的9090端口已被占用,可以通过修改
-
权限问题
- 确保所有相关目录的所有权已正确设置为 prometheus 用户
-
SELinux 限制
- 如果系统启用了 SELinux,可能需要调整策略或设置为宽容模式
-
配置文件语法错误
- 使用以下命令检查配置文件语法:
sudo -u prometheus /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
- 使用以下命令检查配置文件语法:
总结
本文详细介绍了在 CentOS 系统上部署 Prometheus 监控系统并使用 systemd 进行服务管理的完整过程。通过这种方式部署,可以获得以下优势:
- 安全性提升: 使用非特权用户运行服务
- 管理便捷: 使用 systemd 统一管理服务生命周期
- 稳定性增强: 配置自动重启机制确保服务高可用
- 维护简单: 标准的目录结构和配置管理
Prometheus 部署完成后,下一步可以配置监控目标、设置警报规则和集成 Grafana 进行数据可视化,构建完整的监控体系。
相关资源:
- Prometheus 官方文档
- Prometheus GitHub 仓库
- Systemd 服务配置指南
希望本文对您在 CentOS 上部署和管理 Prometheus 有所帮助!如有任何问题,欢迎在评论区留言讨论。