Linux服务器监控搭建:Prometheus+Grafana可视化与告警配置完整教程
很多服务器问题是被用户发现后才知道的——这说明你没有完善的监控体系。一套好的监控系统应该在问题发生的第一时间主动告警,让你在用户感知之前就完成响应。本文带你从零搭建业界主流的 Prometheus + Grafana 监控方案,配置关键指标告警,实现真正的主动运维。
一、监控体系的架构概述
本文搭建的监控栈包含以下组件:
- Node Exporter:运行在被监控服务器上,采集系统指标(CPU、内存、磁盘、网络)并以 HTTP 格式暴露
- Prometheus:定期从 Node Exporter 拉取指标数据,存储时序数据,提供查询语言(PromQL)
- Grafana:连接 Prometheus 数据源,提供美观的可视化仪表盘
- Alertmanager:处理 Prometheus 发出的告警,发送到邮件、Telegram、Slack 等渠道
数据流:Node Exporter → Prometheus(拉取+存储)→ Grafana(可视化)+ Alertmanager(告警)
二、在被监控服务器上安装 Node Exporter
Node Exporter 需要安装在每台你想监控的服务器上:
# 下载最新版 Node Exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
# 创建专用用户(安全最佳实践)
sudo useradd --no-create-home --shell /bin/false node_exporter
# 创建 systemd 服务
sudo nano /etc/systemd/system/node_exporter.service[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
# 验证运行(应返回大量指标数据)
curl http://localhost:9100/metrics | head -20⚠️ 注意:Node Exporter 默认监听 9100 端口,不要对公网开放,仅允许 Prometheus 服务器 IP 访问:
sudo ufw allow from Prometheus服务器IP to any port 9100三、安装 Prometheus
Prometheus 可以单独安装在一台监控服务器上,也可以和 Grafana 装在同一台机器:
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.50.0/prometheus-2.50.0.linux-amd64.tar.gz
tar xvf prometheus-2.50.0.linux-amd64.tar.gz
sudo cp prometheus-2.50.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.50.0.linux-amd64/promtool /usr/local/bin/
# 创建配置目录
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown prometheus:prometheus /var/lib/prometheus配置 Prometheus(添加被监控服务器)
sudo nano /etc/prometheus/prometheus.ymlglobal:
scrape_interval: 15s # 每15秒拉取一次指标
evaluation_interval: 15s # 每15秒评估一次告警规则
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # Alertmanager 地址
rule_files:
- /etc/prometheus/rules/*.yml # 告警规则文件目录
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 添加香港服务器监控
- job_name: 'hk-server-01'
static_configs:
- targets: ['香港服务器IP:9100']
labels:
instance: 'hk-server-01'
region: 'hongkong'
# 可继续添加更多服务器
- job_name: 'us-server-01'
static_configs:
- targets: ['美国服务器IP:9100']
labels:
instance: 'us-server-01'
region: 'us-west'sudo chown -R prometheus:prometheus /etc/prometheus
# 创建 systemd 服务(省略详细步骤,类似 Node Exporter)
sudo systemctl enable prometheus
sudo systemctl start prometheus
# 访问 Prometheus Web UI
# http://监控服务器IP:9090四、安装 Grafana 并接入 Prometheus
# 添加 Grafana APT 仓库
sudo apt install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install grafana -y
sudo systemctl enable grafana-server
sudo systemctl start grafana-server访问 http://监控服务器IP:3000,默认用户名/密码:admin/admin(首次登录后立即修改)。
添加 Prometheus 数据源
- 左侧菜单 → Connections → Data Sources → Add data source
- 选择 Prometheus
- URL 填写:
http://localhost:9090 - 点击 Save & Test,显示"Successfully queried the Prometheus API"即成功
导入现成仪表盘(强烈推荐)
不需要从零设计仪表盘,直接导入社区模板:
- 左侧菜单 → Dashboards → Import
- 在 "Import via grafana.com" 中输入 ID:1860(Node Exporter Full,最流行的服务器监控仪表盘)
- 选择 Prometheus 数据源 → Import
导入后即可看到包含 CPU、内存、磁盘 I/O、网络流量等完整指标的专业仪表盘。
五、配置告警规则
创建告警规则文件
sudo mkdir -p /etc/prometheus/rules
sudo nano /etc/prometheus/rules/server_alerts.ymlgroups:
- name: server_alerts
rules:
# CPU 使用率超过 80% 持续 5 分钟
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU 使用率过高 ({{ $labels.instance }})"
description: "CPU 使用率已超过 80%,当前值:{{ $value | printf \"%.1f\" }}%"
# 内存使用率超过 90%
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "内存使用率过高 ({{ $labels.instance }})"
description: "内存使用率已超过 90%,当前值:{{ $value | printf \"%.1f\" }}%"
# 磁盘使用率超过 85%
- alert: HighDiskUsage
expr: (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100 > 85
for: 1m
labels:
severity: warning
annotations:
summary: "磁盘使用率过高 ({{ $labels.instance }})"
description: "根分区磁盘使用率已超过 85%,当前值:{{ $value | printf \"%.1f\" }}%"
# 服务器宕机(Node Exporter 超过 3 分钟无响应)
- alert: InstanceDown
expr: up == 0
for: 3m
labels:
severity: critical
annotations:
summary: "服务器离线 ({{ $labels.instance }})"
description: "服务器 {{ $labels.instance }} 已离线超过 3 分钟"sudo chown prometheus:prometheus /etc/prometheus/rules/server_alerts.yml
sudo systemctl reload prometheus六、配置 Alertmanager 发送 Telegram 告警
Telegram 是运维团队最常用的告警接收渠道,配置简单,支持手机推送。
Step 1:创建 Telegram Bot
- 在 Telegram 中搜索
@BotFather - 发送
/newbot创建新 Bot,记录 Token - 与 Bot 对话,获取你的 Chat ID(可通过
@userinfobot查询)
Step 2:配置 Alertmanager
sudo nano /etc/alertmanager/alertmanager.ymlglobal:
resolve_timeout: 5m
route:
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'telegram'
receivers:
- name: 'telegram'
telegram_configs:
- api_url: 'https://api.telegram.org'
bot_token: '你的Bot_Token'
chat_id: 你的Chat_ID
message: |
🚨 *告警通知*
*告警名称*: {{ .GroupLabels.alertname }}
*服务器*: {{ .GroupLabels.instance }}
*状态*: {{ .Status }}
*详情*: {{ range .Alerts }}{{ .Annotations.description }}{{ end }}sudo systemctl restart alertmanager七、轻量替代方案:UptimeRobot(适合新手)
如果 Prometheus + Grafana 的搭建复杂度超过了你目前的技术栈,可以先从 UptimeRobot 开始:
- 免费版支持最多 50 个监控项,每 5 分钟检测一次
- 支持 HTTP、Ping、TCP 端口、关键词监控
- 宕机立即发送邮件、短信或 Telegram 通知
- 无需在服务器上安装任何东西
UptimeRobot 适合监控网站可用性,但无法监控服务器内部指标(CPU、内存等)。两者可以结合使用:UptimeRobot 做外部可用性监控,Prometheus 做内部指标监控。
总结
一套完整的服务器监控体系让你从"被动救火"变为"主动预防":
- 📊 Grafana 仪表盘:实时掌握所有服务器的健康状态
- 🔔 Prometheus 告警:问题发生时第一时间收到通知,而不是等用户投诉
- 📱 Telegram 推送:随时随地在手机上接收告警,快速响应
监控是服务器运维的基础设施,建议在业务上线之前就配置好。后浪云香港云服务器提供稳定的网络环境,是部署监控服务的理想基础,如有技术问题欢迎通过工单联系我们的工程师团队。
