CentOS 7环境下搭建企业级监控系统:从零开始掌握Prometheus与Grafana
在当今的运维工作中,监控系统已经成为保障业务稳定性的关键基础设施。对于使用CentOS 7系统的团队来说,如何在这个相对老旧的平台上搭建一套现代化的监控解决方案?本文将带你从零开始,在CentOS 7上部署Prometheus 2.25.0和Grafana 7.4.3,并实现对Linux服务器的全面监控。
1. 环境准备与基础配置
在开始安装之前,我们需要确保系统环境满足基本要求。CentOS 7虽然稳定,但某些默认配置可能需要调整。
首先更新系统并安装必要依赖:
sudo yum update -y sudo yum install -y wget tar curl vim对于生产环境,建议创建一个专用用户来运行监控服务:
sudo useradd --no-create-home --shell /bin/false prometheus sudo useradd --no-create-home --shell /bin/false grafana常见问题排查:
- 如果遇到依赖缺失错误,可以尝试添加EPEL仓库:
sudo yum install -y epel-release - 对于无法解析域名的情况,检查DNS配置:
cat /etc/resolv.conf
2. Prometheus 2.25.0安装与配置
2.1 下载与安装
Prometheus的安装过程相对简单,但需要注意版本兼容性问题:
wget https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus-2.25.0.linux-amd64.tar.gz tar xvf prometheus-2.25.0.linux-amd64.tar.gz sudo mv prometheus-2.25.0.linux-amd64 /usr/local/prometheus验证安装是否成功:
/usr/local/prometheus/prometheus --version2.2 配置文件详解
Prometheus的核心是它的配置文件prometheus.yml,下面是一个针对单节点监控的优化配置:
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] metrics_path: '/metrics' scheme: 'http'关键参数说明:
| 参数 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| scrape_interval | 1m | 15s | 数据采集间隔 |
| evaluation_interval | 1m | 15s | 告警规则评估间隔 |
| scrape_timeout | 10s | 10s | 采集超时时间 |
2.3 系统服务配置
为了确保Prometheus能够随系统启动,我们需要创建systemd服务:
sudo vim /etc/systemd/system/prometheus.service服务文件内容:
[Unit] Description=Prometheus Monitoring System After=network.target [Service] User=prometheus Group=prometheus ExecStart=/usr/local/prometheus/prometheus \ --config.file=/usr/local/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus/data \ --web.listen-address=0.0.0.0:9090 Restart=on-failure [Install] WantedBy=multi-user.target启动并验证服务:
sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus3. Node Exporter部署与集成
3.1 安装Node Exporter
Node Exporter是采集系统指标的必备组件:
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz tar xvf node_exporter-1.1.2.linux-amd64.tar.gz sudo mv node_exporter-1.1.2.linux-amd64/node_exporter /usr/local/bin/3.2 配置为系统服务
创建node_exporter的systemd服务:
sudo vim /etc/systemd/system/node_exporter.service服务文件内容:
[Unit] Description=Node Exporter After=network.target [Service] User=prometheus Group=prometheus ExecStart=/usr/local/bin/node_exporter \ --collector.systemd \ --collector.systemd.unit-whitelist=(sshd|nginx|postgresql).service Restart=on-failure [Install] WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter3.3 集成到Prometheus
修改Prometheus配置,添加新的job:
- job_name: 'node' static_configs: - targets: ['localhost:9100'] labels: instance: 'local-server'重新加载配置:
curl -X POST http://localhost:9090/-/reload4. Grafana 7.4.3安装与配置
4.1 安装Grafana
Grafana提供了RPM包,安装过程简单:
wget https://dl.grafana.com/oss/release/grafana-7.4.3-1.x86_64.rpm sudo yum install -y grafana-7.4.3-1.x86_64.rpm4.2 基础配置
Grafana的主要配置文件位于/etc/grafana/grafana.ini,对于基础使用可以保持默认,但有几个关键参数建议修改:
[server] http_port = 3000 domain = your-domain.com root_url = %(protocol)s://%(domain)s:%(http_port)s/启动服务:
sudo systemctl start grafana-server sudo systemctl enable grafana-server4.3 添加数据源
- 访问
http://your-server-ip:3000 - 使用默认账号admin/admin登录
- 进入Configuration > Data Sources
- 选择Prometheus,填写URL为
http://localhost:9090
4.4 导入Dashboard
Grafana社区提供了丰富的Dashboard模板,对于系统监控,推荐使用以下模板:
- Node Exporter Full: ID 1860
- Prometheus 2.0 Overview: ID 3662
- Linux Hosts Metrics: ID 10180
导入方法:
- 进入Create > Import
- 输入模板ID
- 选择之前创建的Prometheus数据源
5. 监控指标解读与告警设置
5.1 关键监控指标
了解这些核心指标对于有效监控至关重要:
CPU相关:
node_cpu_seconds_total:CPU时间统计rate(node_cpu_seconds_total{mode="idle"}[1m]):CPU空闲率
内存相关:
node_memory_MemTotal_bytes:总内存node_memory_MemAvailable_bytes:可用内存
磁盘相关:
node_filesystem_avail_bytes:文件系统可用空间node_disk_io_time_seconds_total:磁盘IO时间
5.2 基础告警规则配置
在Prometheus中创建告警规则文件:
groups: - name: host-alerts rules: - alert: HighCPUUsage expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 for: 10m labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }}" description: "CPU usage is {{ $value }}%" - alert: LowMemory expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 < 20 for: 10m labels: severity: warning annotations: summary: "Low memory on {{ $labels.instance }}" description: "Available memory is only {{ $value }}%"在prometheus.yml中引用这个规则文件:
rule_files: - '/etc/prometheus/rules/*.rules'6. 性能优化与维护
6.1 Prometheus存储优化
对于长期运行的Prometheus实例,存储优化很重要:
# 调整数据保留时间为30天 --storage.tsdb.retention.time=30d # 启用压缩 --storage.tsdb.retention.size=500GB6.2 Grafana性能调优
修改Grafana配置提升性能:
[database] max_idle_conn = 10 max_open_conn = 100 [analytics] reporting_enabled = false6.3 定期维护任务
建议设置以下维护计划:
- 每周:
- 检查磁盘空间使用情况
- 验证备份完整性
- 每月:
- 审查告警规则有效性
- 更新Dashboard模板
- 每季度:
- 评估监控覆盖范围
- 进行容量规划
7. 安全加固措施
7.1 网络访问控制
使用防火墙限制访问:
sudo firewall-cmd --permanent --add-port=9090/tcp sudo firewall-cmd --permanent --add-port=3000/tcp sudo firewall-cmd --reload7.2 认证配置
为Grafana启用基础认证:
[auth.basic] enabled = true为Prometheus配置简单的认证:
basic_auth_users: [<username>:<password>]7.3 数据加密
考虑为敏感数据传输启用TLS:
# 生成自签名证书 openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \ -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=example.com" \ -keyout grafana.key -out grafana.crt8. 高级监控场景扩展
8.1 监控容器环境
对于Docker环境,可以添加cAdvisor:
docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ google/cadvisor:latest然后在Prometheus中添加配置:
- job_name: 'cadvisor' static_configs: - targets: ['localhost:8080']8.2 自定义指标采集
通过Pushgateway收集批处理作业指标:
wget https://github.com/prometheus/pushgateway/releases/download/v1.4.1/pushgateway-1.4.1.linux-amd64.tar.gz tar xvf pushgateway-1.4.1.linux-amd64.tar.gz sudo mv pushgateway-1.4.1.linux-amd64/pushgateway /usr/local/bin/创建systemd服务并启动,然后在Prometheus中添加配置:
- job_name: 'pushgateway' honor_labels: true static_configs: - targets: ['localhost:9091']8.3 分布式监控架构
对于大规模环境,考虑以下架构:
- 分层采集:
- 边缘节点运行Node Exporter
- 中间层运行Prometheus实例
- 中心层运行联邦Prometheus
- 长期存储:
- 集成VictoriaMetrics或Thanos
- 高可用:
- 运行多个Prometheus实例
- 使用Alertmanager集群
9. 常见问题解决方案
在实际部署过程中,可能会遇到各种问题。以下是几个典型场景的解决方法:
问题1:Prometheus启动时报"error opening storage"
解决方案:
# 检查数据目录权限 sudo chown -R prometheus:prometheus /var/lib/prometheus # 或者指定新的数据目录 --storage.tsdb.path=/new/data/path问题2:Grafana无法连接Prometheus数据源
排查步骤:
- 验证网络连通性:
curl http://prometheus-server:9090 - 检查防火墙规则
- 验证Prometheus服务状态
问题3:Node Exporter指标不全
可能原因及解决:
- 缺少collector:通过
--collector.参数启用 - 权限不足:确保运行用户有足够权限
- 内核版本不支持:某些指标需要较新内核
10. 监控系统演进路线
随着业务发展,监控系统也需要不断进化。以下是一个典型的演进路径:
初级阶段(0-10节点):
- 单机Prometheus
- 基础Node Exporter监控
- 简单告警
中级阶段(10-100节点):
- 联邦Prometheus
- 服务发现集成
- 告警分级管理
高级阶段(100+节点):
- 分布式监控架构
- 多维度告警分析
- 监控即代码实践
专家阶段:
- 预测性监控
- 自动化修复
- 与CI/CD深度集成
在实际项目中,我们发现最容易被忽视的是监控系统的维护成本。定期审查指标有效性、优化存储策略、简化告警规则,这些日常维护工作往往决定了监控系统的长期价值。