1. 项目概述
在运维监控领域,Prometheus已经成为事实上的标准解决方案。最近我在一台CentOS 7.9服务器上部署Prometheus监控系统时,发现网上很多教程要么版本过时,要么步骤不完整。经过几次踩坑后,我整理出这套经过验证的快速部署方案,整个过程控制在15分钟内完成,特别适合需要快速搭建监控系统的运维人员。
2. 环境准备
2.1 系统基础配置
首先确保你的CentOS 7.9系统已经完成基础配置:
# 更新系统 sudo yum update -y # 安装常用工具 sudo yum install -y wget curl vim net-tools # 关闭SELinux(生产环境请谨慎) sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 配置防火墙(如果启用) sudo firewall-cmd --add-port=9090/tcp --permanent sudo firewall-cmd --reload注意:如果是在生产环境,建议配置SELinux规则而不是直接关闭,这里为了快速部署做了简化处理。
2.2 创建专用用户
为Prometheus创建专用用户是个好习惯:
sudo groupadd --system prometheus sudo useradd -s /sbin/nologin --system -g prometheus prometheus3. Prometheus安装与配置
3.1 下载最新版本
访问 Prometheus官网 获取最新稳定版下载链接:
# 获取最新版本(截至2023年7月最新稳定版为2.47.0) VERSION="2.47.0" wget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/prometheus-${VERSION}.linux-amd64.tar.gz tar xvf prometheus-${VERSION}.linux-amd64.tar.gz sudo mv prometheus-${VERSION}.linux-amd64 /usr/local/prometheus3.2 目录结构与权限配置
合理的目录结构能避免后续维护混乱:
# 创建必要目录 sudo mkdir -p /usr/local/prometheus/data sudo mkdir -p /etc/prometheus # 配置文件处理 sudo mv /usr/local/prometheus/prometheus.yml /etc/prometheus/ sudo ln -s /etc/prometheus/prometheus.yml /usr/local/prometheus/ # 权限设置 sudo chown -R prometheus:prometheus /usr/local/prometheus sudo chown -R prometheus:prometheus /etc/prometheus3.3 配置文件详解
默认的prometheus.yml需要根据实际需求调整:
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']提示:生产环境中建议配置alertmanager和更精细的scrape配置,这里先保持简单。
4. 服务管理配置
4.1 创建Systemd服务
创建/etc/systemd/system/prometheus.service文件:
[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/prometheus/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/usr/local/prometheus/data \ --web.console.templates=/usr/local/prometheus/consoles \ --web.console.libraries=/usr/local/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 Restart=always [Install] WantedBy=multi-user.target4.2 启动与验证
# 重载systemd sudo systemctl daemon-reload # 启动服务 sudo systemctl start prometheus # 设置开机自启 sudo systemctl enable prometheus # 检查状态 sudo systemctl status prometheus验证服务是否正常运行:
curl http://localhost:9090/metrics如果看到大量metrics数据输出,说明安装成功。
5. 进阶配置与优化
5.1 数据保留策略
默认情况下,Prometheus会保留15天的数据。可以通过启动参数调整:
ExecStart=/usr/local/prometheus/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/usr/local/prometheus/data \ --storage.tsdb.retention.time=30d \ ...5.2 内存优化
Prometheus可能会消耗较多内存,可以通过以下参数限制:
--storage.tsdb.retention.size=500GB \ --query.max-concurrency=20 \ --query.max-samples=50000000 \5.3 监控节点扩展
要监控其他节点,需要在prometheus.yml中添加新的job:
scrape_configs: - job_name: 'node' static_configs: - targets: ['node1:9100', 'node2:9100']需要在被监控节点上安装node_exporter。
6. 常见问题排查
6.1 端口冲突问题
如果9090端口被占用,可以修改启动参数:
--web.listen-address=0.0.0.0:90916.2 权限问题
如果遇到权限拒绝错误,检查:
sudo chown -R prometheus:prometheus /usr/local/prometheus sudo chown -R prometheus:prometheus /etc/prometheus6.3 数据损坏处理
如果启动时报存储错误,可以尝试修复:
sudo -u prometheus /usr/local/prometheus/prometheus \ --storage.tsdb.retention.time=30d \ --storage.tsdb.path=/usr/local/prometheus/data \ --storage.tsdb.repair7. 安全加固建议
7.1 基础认证配置
在prometheus.yml中添加:
basic_auth_users: admin: $2y$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx使用htpasswd生成密码:
htpasswd -nBC 12 admin | tr -d ':\n'7.2 HTTPS配置
生成自签名证书:
openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 \ -keyout prometheus.key -out prometheus.crt然后在启动参数中添加:
--web.config.file=/etc/prometheus/web.ymlweb.yml内容:
tls_server_config: cert_file: /etc/prometheus/prometheus.crt key_file: /etc/prometheus/prometheus.key8. 日常维护技巧
8.1 数据备份
Prometheus数据目录可以直接备份:
tar czvf prometheus-data-$(date +%Y%m%d).tar.gz /usr/local/prometheus/data8.2 版本升级
升级步骤:
- 备份配置和数据
- 下载新版本
- 停止服务
- 替换二进制文件
- 启动服务
sudo systemctl stop prometheus cp /usr/local/prometheus/prometheus /usr/local/prometheus/prometheus.bak wget https://github.com/prometheus/prometheus/releases/download/v${NEW_VERSION}/prometheus-${NEW_VERSION}.linux-amd64.tar.gz tar xvf prometheus-${NEW_VERSION}.linux-amd64.tar.gz sudo cp prometheus-${NEW_VERSION}.linux-amd64/prometheus /usr/local/prometheus/ sudo systemctl start prometheus8.3 性能监控
Prometheus自身也需要监控,可以在配置中添加:
- job_name: 'prometheus-monitor' metrics_path: '/metrics' static_configs: - targets: ['localhost:9090']9. 可视化配置
9.1 控制台模板
Prometheus自带一些控制台模板,位于:
/usr/local/prometheus/consoles/ /usr/local/prometheus/console_libraries/9.2 连接Grafana
- 安装Grafana
- 添加Prometheus数据源
- 导入官方仪表板(ID:3662)
sudo yum install -y https://dl.grafana.com/oss/release/grafana-10.1.5-1.x86_64.rpm sudo systemctl start grafana-server sudo systemctl enable grafana-server10. 生产环境建议
经过多次部署实践,我总结出以下几点生产环境建议:
- 使用专门的存储卷存放时间序列数据,避免系统盘空间不足
- 配置合理的告警规则和Alertmanager集成
- 对于大规模部署,考虑使用Prometheus联邦或Thanos方案
- 定期检查TSDB状态,避免数据损坏
- 监控Prometheus自身资源使用情况
最后分享一个实用技巧:在prometheus.yml中使用relabel_configs可以灵活处理target标签,这在管理大量节点时特别有用。例如:
relabel_configs: - source_labels: [__address__] regex: '(.*):\d+' target_label: 'instance' replacement: '$1'