惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
博客园 - 【当耐特】
小众软件
小众软件
博客园 - Franky
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
雷峰网
雷峰网
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Last Week in AI
Last Week in AI
博客园_首页
月光博客
月光博客
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Webroot Blog
Webroot Blog
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
S
Security @ Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
Y
Y Combinator Blog
O
OpenAI News
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
Kaspersky official blog
Cloudbric
Cloudbric

李洋博客

链接反馈管理插件,给你的ZBlog网站装上“体检与纠错”的功能 windows服务器更新主题/插件提示“更新失败 HTTP 500”错误的解决方案 网站被 CC 攻击了?别慌,教你几招接地气的防护办法 太原刚罚了三家,全是这个原因!你的网站可能也在危险边缘 终于不用手动上传!我做了个李洋博客应用APP,让博客买的主题也能在线更新 CN域名,这次真要回暖了!4月份刚出的政策太给力了 Nginx 反向代理配置实战:让你的博客访问速度飞起来 Linux 服务器刚装好别急着跑生产!这 5 个安全加固步骤少一个都危险 2026 年 SEO 变天了!Google 进入向量语义检索时代,你的网站还能排前面吗? Linux 服务器运维:这 5 个优化技巧让你的网站快一倍
10分钟搭建Linux服务器监控告警系统,手机实时接收预警
李洋博客 · 2026-04-07 · via 李洋博客

假期过完了哈,该上班了兄弟们,不知道你们有没有过服务器告警提醒,我之前总能收到腾讯云的恶意文件提醒,但是进入服务器查看相关目录又没有,应该是被删除了,郁闷的不是这个而是夜睡得正香,突然接到客户/老板来电说网站打不开了,爬起来一查,服务器早就挂了,CPU 飙到 100% 已经跑了俩小时。这种被动挨打的感觉,我懂,太懂了~~~所以今天,咱们尝试用几分钟搭一个监控告警系统,让服务器有任何风吹草动,你手机/邮箱立马就能收到通知。最重要的是不用花钱买服务,全程免费部署。

首先为啥要监控?

之前我总觉得自己的小博客不至于,不像大厂服务特别多必须实时监控。其实这么想你就错了,即便就一台小服务器,也得知道:

  • CPU 是不是快跑满了

  • 内存够不够用

  • 磁盘会不会爆

  • 服务有没有挂

这些东西等你发现问题的时候,往往已经晚了。监控的意义不是事后诸葛亮,而是提前预警。让你可以掌控全局,而不是被控

确定方案选型

监控方案一堆,咱选个简单好用的:Prometheus + Grafana + Alertmanager。听着名字挺唬人,其实部署起来贼简单。Prometheus 负责采集数据,Grafana 负责展示图表,Alertmanager 负责发告警。三位一体,完美。当然如果是安装的宝塔面板那就更简单了,后台有相关设置,甚至不需要敲代码,设置了提醒方案,告诉服务器哪些需要提醒就完了。如图设置:

10分钟搭建Linux服务器监控告警系统,手机实时接收预警 第1张

当然云服务器后台也有相关的配置,只是基本收费,免费的简直就是凤毛麟角。但是今天不用宝塔用代码。当然觉得代码繁琐就安装一个宝塔面本吧~~~

安装部署

创建目录

mkdir -p /opt/monitoring/{prometheus,grafana,alertmanager}
cd /opt/monitoring

下载 Prometheus

wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz
tar -xzf prometheus-2.52.0.linux-amd64.tar.gz
mv prometheus-2.52.0.linux-amd64/* prometheus/
rm -rf prometheus-2.52.0.linux-amd64 prometheus-2.52.0.linux-amd64.tar.gz

配置 Prometheus

继续编辑配置文件 prometheus/prometheus.yml

global:
  scrape_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - localhost:9093

rule_files:
  - "alerts.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

创建告警规则

新建配置规则, prometheus/alerts.yml

groups:
  - name: server_alerts
    rules:
      - 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 使用率过高"
          description: "{{ $labels.instance }} CPU 使用率超过 80%,当前值 {{ $value }}%"

      - alert: HighMemoryUsage
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "内存使用率过高"
          description: "{{ $labels.instance }} 内存使用率超过 85%,当前值 {{ $value }}%"

      - alert: DiskSpaceLow
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "磁盘空间不足"
          description: "{{ $labels.instance }} 根分区可用空间低于 15%,当前值 {{ $value }}%"

      - alert: ServiceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "服务宕机"
          description: "{{ $labels.instance }} 服务已宕机超过 1 分钟"

下载 Node Exporter

这玩意儿负责采集系统指标:

wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
mv node_exporter-1.7.0.linux-amd64/node_exporter prometheus/
rm -rf node_exporter-1.7.0.linux-amd64 node_exporter-1.7.0.linux-amd64.tar.gz

下载 Grafana

wget https://dl.grafana.com/oss/release/grafana-10.4.2.linux-amd64.tar.gz
tar -xzf grafana-10.4.2.linux-amd64.tar.gz
mv grafana-10.4.2/* grafana/
rm -rf grafana-10.4.2 grafana-10.4.2.linux-amd64.tar.gz

下载 Alertmanager

wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar -xzf alertmanager-0.27.0.linux-amd64.tar.gz
mv alertmanager-0.27.0.linux-amd64/* alertmanager/
rm -rf alertmanager-0.27.0.linux-amd64 alertmanager-0.27.0.linux-amd64.tar.gz

配置 Alertmanager 推送 QQ

编辑 alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'qq-webhook'

receivers:
  - name: 'qq-webhook'
    webhook_configs:
      - url: 'http://127.0.0.1:8080/alert'
        send_resolved: true

启动服务

创建启动脚本 start-monitor.sh:.

#!/bin/bash

# 启动 Node Exporter
cd /opt/monitoring/prometheus
nohup ./node_exporter > /var/log/node_exporter.log 2>&1 &

# 启动 Prometheus
nohup ./prometheus --config.file=prometheus.yml --storage.tsdb.path=data > /var/log/prometheus.log 2>&1 &

# 启动 Alertmanager
cd /opt/monitoring/alertmanager
nohup ./alertmanager --config.file=alertmanager.yml --storage.path=data > /var/log/alertmanager.log 2>&1 &

# 启动 Grafana
cd /opt/monitoring/grafana
nohup ./bin/grafana-server --homepath=. > /var/log/grafana.log 2>&1 &

echo "监控服务已全部启动完成!"
echo "Prometheus: http://$(hostname -I | awk '{print $1}'):9090"
echo "Grafana: http://$(hostname -I | awk '{print $1}'):3000"
echo "默认账号密码:admin/admin"

赋予执行权限并运行:

chmod +x start-monitor.sh
./start-monitor.sh

配置 QQ 推送

这个我是不会写的,所以在网上查了相关的转发脚本代码,这是 webhook 转发的脚本代码,它把告警相关内容推送到指定 QQ:

cat > /opt/monitoring/qq-push.py << 'EOF'
#!/usr/bin/env python3
from flask import Flask, request
import requests
import json

app = Flask(__name__)

QQ_WEBHOOK_URL = "你的 QQ 机器人 Webhook 地址"

@app.route('/alert', methods=['POST'])
def alert():
    data = request.json
    alerts = data.get('alerts', [])
    
    for alert in alerts:
        status = alert.get('status', 'unknown')
        name = alert.get('labels', {}).get('alertname', 'Unknown')
        desc = alert.get('annotations', {}).get('description', '无描述')
        
        if status == 'firing':
            msg = f"🚨【告警】{name}\n{desc}"
        else:
            msg = f"✅【恢复】{name}\n服务已恢复正常"
        
        # 调用 QQ 机器人 API
        requests.post(QQ_WEBHOOK_URL, json={"msg": msg})
    
    return 'OK', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)
EOF

安装依赖并启动:

pip3 install flask requests
nohup python3 /opt/monitoring/qq-push.py > /var/log/qq-push.log 2>&1 &

验证告警

全部完成后,我们尝试手动测试一下:

# 模拟 CPU 告警(开几个进程)
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &

# 稍等一会儿,你应该会收到 QQ 推送消息。

# 清理测试进程
pkill yes

访问 Dashboard

浏览器打开 Grafana:http://你的服务器 IP:3000

10分钟搭建Linux服务器监控告警系统,手机实时接收预警 第2张

默认登录:admin/admin(首次登录    会让你改密码)

添加数据源:

  1. 点击左侧齿轮图标 → Data Sources

  2. Add data source → Prometheus

  3. URL 填 http://localhost:9090

  4. Save & Test

导入模板:

  1. 点击左侧加号 → Import

  2. 输入模板 ID 1860(Node Exporter 经典模板)

  3. 选择 Prometheus 数据源

  4. Import

搞定!你现在能看到服务器的实时图表了。

设置开机自启

cat > /etc/systemd/system/monitoring.service << 'EOF'
[Unit]
Description=Monitoring Stack
After=network.target

[Service]
Type=forking
ExecStart=/opt/monitoring/start-monitor.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable monitoring

大功告成

监控这玩意儿,早搭早享受。别等服务挂了才后悔。今天这套方案,零成本、开源、可扩展。你要是觉得 QQ 推送不够用,还可以改成微信、钉钉、邮件、Telegram,随便你折腾。只要你想就行,记住:好的运维不是救火队员,而是防火专家。
有问题留言反馈,我去继续折腾小程序代码了。