当前位置: 首页 > java >正文

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 菜单: 查看运行时配置、规则、目标等状态信息

常见问题与解决方案

  1. 端口占用问题

    • 如果默认的9090端口已被占用,可以通过修改 --web.listen-address 参数更换端口
  2. 权限问题

    • 确保所有相关目录的所有权已正确设置为 prometheus 用户
  3. SELinux 限制

    • 如果系统启用了 SELinux,可能需要调整策略或设置为宽容模式
  4. 配置文件语法错误

    • 使用以下命令检查配置文件语法:
      sudo -u prometheus /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
      

总结

本文详细介绍了在 CentOS 系统上部署 Prometheus 监控系统并使用 systemd 进行服务管理的完整过程。通过这种方式部署,可以获得以下优势:

  1. 安全性提升: 使用非特权用户运行服务
  2. 管理便捷: 使用 systemd 统一管理服务生命周期
  3. 稳定性增强: 配置自动重启机制确保服务高可用
  4. 维护简单: 标准的目录结构和配置管理

Prometheus 部署完成后,下一步可以配置监控目标、设置警报规则和集成 Grafana 进行数据可视化,构建完整的监控体系。

相关资源:

  • Prometheus 官方文档
  • Prometheus GitHub 仓库
  • Systemd 服务配置指南

希望本文对您在 CentOS 上部署和管理 Prometheus 有所帮助!如有任何问题,欢迎在评论区留言讨论。

http://www.xdnf.cn/news/18806.html

相关文章:

  • Mistral AI音频大模型Voxtral解读
  • 初识神经网络——《深度学习入门:基于Python的理论与实现》
  • QT(1)
  • 【STM32】CubeMX(十二):FreeRTOS消息队列
  • THM Rabbit Hole
  • COREDUMP
  • Life:Internship in OnSea Day 64
  • java基础(十五)计算机网络
  • 利用matlab实现CST超表面阵列的自动建模
  • TCP和UDP的使用场景
  • onnx入门教程(四)——ONNX 模型的修改与调试
  • 借Copilot之力,实现办公效率的跃升
  • Flink 滑动窗口实战:从 KeyedProcessFunction 到 AggregateFunction WindowFunction 的完整旅程
  • 交换机是如何同时完成帧统计与 BER/FEC 分析的
  • leetcode LCR 012.寻找数组的中心下标
  • 59 C++ 现代C++编程艺术8-智能指针
  • IO多路转接(select方案)
  • 测试用例如何评审?
  • `mysql_query()` 数据库查询函数
  • 如何监控ElasticSearch的集群状态?
  • THM trypwnme2
  • 【广告系列】流量归因模型
  • LeetCode热题100--102. 二叉树的层序遍历--中等
  • 云计算学习笔记——Linux用户和组的归属权限管理、附加权限、ACL策略管理篇
  • CentOS安装Jenkins全流程指南
  • 【大白话解析】 OpenZeppelin 的 ECDSA 库:以太坊签名验证安全工具箱(附源代码)
  • 零基础也能写博客:cpolar简化Docsify远程发布流程
  • 自学嵌入式第二十七天:Linux系统编程-进程
  • MQTT 协议模型:客户端、 broker 与主题详解(二)
  • Java 学习笔记(基础篇10)