
我在负责维护一组部署于香港的数据节点时,随着业务流量激增,我们面临的最大问题是性能瓶颈难以快速定位,故障预警滞后。虽然传统的日志分析工具能事后查找问题,但对实时性和系统趋势的洞察严重不足。为了解决这一痛点,我选择在香港服务器上部署 Prometheus + Grafana 构建一个实时性能监控与自动化报警系统,配合钉钉和邮件通知,实现对服务器资源、应用负载以及网络状态的全面可视化与主动预警。
一、系统架构设计与部署规划
整体系统架构如下:
┌────────────┐
│ Grafana │←─┐
└────┬───────┘ │
│ │
┌─────────▼────────┐ │
│ Prometheus │─┘
└────────┬─────────┘
│
┌────────────▼─────────────┐
│ Node Exporter(多台节点) │
└──────────────────────────┘
- Prometheus:负责抓取每台香港服务器的 Node Exporter 指标数据,定时采样。
- Grafana:展示各类图表与趋势,支持自定义Dashboard与报警规则。
- Node Exporter:运行在每台香港物理服务器上,采集CPU、内存、磁盘、网络等核心指标。
- Alertmanager:负责报警策略配置并集成通知渠道,如钉钉Webhook。
二、Prometheus配置步骤
2.1 安装Prometheus
我选择将Prometheus安装在一台核心监控节点上,该服务器配置为:
- 位置:香港将军澳数据中心
- 配置:Intel Xeon Silver, 32GB RAM, SSD RAID10
- 系统:Ubuntu Server 22.04
wget https://github.com/prometheus/prometheus/releases/download/v2.51.0/prometheus-2.51.0.linux-amd64.tar.gz
tar -xvf prometheus-2.51.0.linux-amd64.tar.gz
mv prometheus-2.51.0.linux-amd64 /opt/prometheus
2.2 配置prometheus.yml
这是我的实际配置片段:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets:
- '192.168.100.10:9100'
- '192.168.100.11:9100'
- '192.168.100.12:9100'
我将香港三台业务服务器加入监控目标列表,采样周期设置为15秒,确保高实时性。
三、部署Node Exporter到每台香港服务器
每台物理机执行:
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.8.1.linux-amd64.tar.gz
sudo cp node_exporter-1.8.1.linux-amd64/node_exporter /usr/local/bin/
# 添加 systemd 启动服务
cat <<EOF | sudo tee /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=default.target
EOF
sudo systemctl daemon-reexec
sudo systemctl enable --now node_exporter
验证采集端口可达:
curl http://localhost:9100/metrics
四、配置Grafana仪表盘
4.1 安装Grafana
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt update
sudo apt install grafana
sudo systemctl enable --now grafana-server
4.2 添加数据源并导入Dashboard
- 登录Grafana管理界面:http://YOUR_SERVER_IP:3000
- 默认账号密码:admin/admin
- 添加Prometheus数据源,填写URL如:http://localhost:9090
- 选择社区模板Dashboard,如:
- ID 1860:Node Exporter Full
- ID 9276:System overview(适用于负载分析)
五、配置自动化报警系统
5.1 安装Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar -xvf alertmanager-0.27.0.linux-amd64.tar.gz
mv alertmanager-0.27.0.linux-amd64 /opt/alertmanager
创建配置文件 alertmanager.yml:
route:
receiver: 'dingtalk-webhook'
receivers:
- name: 'dingtalk-webhook'
webhook_configs:
- url: 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN'
send_resolved: true
启动Alertmanager并集成至Prometheus:
alerting:
alertmanagers:
- static_configs:
- targets:
- "localhost:9093"
5.2 报警规则示例(磁盘空间告警)
groups:
- name: disk_alerts
rules:
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) < 0.15
for: 2m
labels:
severity: warning
annotations:
summary: "磁盘空间低于15%"
description: "服务器 {{ $labels.instance }} 根分区空间即将耗尽"
六、实际应用效果与经验
部署完成后,我快速构建了针对CPU负载、内存压力、IO延迟、网络出口流量等多个维度的Dashboard。最典型的一次是在凌晨高并发写入时,通过Grafana图表发现IO wait突然上升,同时钉钉实时告警提示磁盘接近写满,提前2小时介入扩容避免了系统故障。
我总结出以下几点经验:
- 在香港部署监控系统需特别注意链路稳定性,建议Prometheus与目标节点位于同一个交换网络下,避免因网络延迟引发抓取失败。
- Alertmanager的规则设计应考虑“抖动”和“误报”,for字段非常关键。
- Grafana建议启用本地认证与审计日志,确保安全性。
- 所有组件建议配合 Supervisor 或 systemd 保持服务持久运行。
我通过构建基于Prometheus与Grafana的实时性能监控平台,实现了对香港服务器运行状态的全面掌控,并建立起一个可视、可追溯、可报警的系统保障机制。这不仅提升了系统可靠性,也为后续容量规划和故障分析提供了强有力的数据支撑。对我而言,这套体系已经成为日常运维不可或缺的基础设施之一。











