告别半夜起床重启服务器!零基础搭服务器建监控告警系统(附完整配置)

重启服务器

最近服务器老是莫名其妙挂机,半夜被老板电话叫醒重启的兄弟应该不少吧?今天分享个监控告警系统的搭建方法,让服务器有问题自动发邮件通知,再也不用24小时盯着了。先说效果:服务器CPU爆了、内存满了、进程挂了,15秒内自动发邮件到QQ邮箱,手机立马收到通知。

技术栈选择(都是开源免费的)

用的都是业内主流工具,踩坑的人多,资料也多:

  • Prometheus:监控界的扛把子,数据采集和告警规则
  • Node_Exporter:轻量级指标采集器,CPU、内存、硬盘使用率都能监控
  • Alertmanager:告警管理中心,支持邮件、钉钉、微信通知
  • cpolar:内网穿透工具,没公网IP也能远程访问

环境准备

测试环境:CentOS 7.x

  • 1核2G配置就够了,我用的是阿里云最便宜的那种
  • 需要安装node_exporter和prometheus(前置依赖)
  • 有个QQ邮箱就行,用来接收告警

第一步:安装Alertmanager

下载安装包 去Prometheus官网下载:https://prometheus.io/download/ 选Linux版本,我下的是alertmanager-0.28.1.linux-amd64.tar.gz创建目录解压

bash
mkdir -p /app/alertmanager
cd /app/alertmanager
# 上传下载好的文件,然后解压
tar -vxzf alertmanager-0.28.1.linux-amd64.tar.gz
mv alertmanager-0.28.1.linux-amd64 alertmanager

配置系统服务

bash
cd /usr/lib/systemd/system
vim alertmanager.service

配置文件内容:

ini
[Unit]
Description=https://prometheus.io
  
[Service]
Restart=on-failure
ExecStart=/app/alertmanager/alertmanager --config.file=/app/alertmanager/alertmanager.yml
 
[Install]                      
WantedBy=multi-user.target

启动服务

bash
systemctl daemon-reload
systemctl start alertmanager.service
systemctl enable alertmanager.service

启动成功后访问http://你的IP:9093,看到界面就说明OK了。

第二步:配置内网穿透(重点)

很多兄弟的服务器在内网,没有公网IP,这时候cpolar就派上用场了。安装cpolar

bash
sudo curl https://get.cpolar.sh | sh
sudo systemctl status cpolar

配置隧道 浏览器访问http://你的IP:9200,用cpolar账号登录。创建隧道:

  • 隧道名称:alertmanager
  • 协议:http
  • 本地地址:9093
  • 域名类型:随机域名
  • 地区:China Top

创建完成后会生成一个公网地址,比如4246d47e.r2.cpolar.top,记住这个地址。

第三步:配置Prometheus对接Alertmanager

修改prometheus配置

bash
vi /app/prometheus/prometheus.yml

在配置文件中添加alertmanager配置:

yaml
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["4246d47e.r2.cpolar.top"]  # 用cpolar生成的地址

重启prometheus

bash
systemctl restart prometheus

第四步:配置告警规则

创建告警规则文件

bash
vi /app/prometheus/1.yml

配置内容:

yaml
groups:
- name: node-alerts
  rules:
  # node_exporter宕机告警
  - alert: node_exporter实例宕机
    expr: up{job="node_exporter",instance="localhost:9100"} == 0
    for: 15s
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 已停止运行超过 15 秒!"
      description: "作业 {{ $labels.job }} 的实例 {{ $labels.instance }} 无法抓取。"

- name: prometheus  
  rules:
  # prometheus自身宕机告警
  - alert: 实例宕机
    expr: up{job="prometheus"} == 0
    for: 15s
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 已停止运行超过 15 秒!"
      description: "作业 {{ $labels.job }} 的实例 {{ $labels.instance }} 无法抓取。"

测试告警规则

bash
systemctl restart prometheus
# 停止node_exporter测试告警
systemctl stop node_exporter

15秒后在prometheus和alertmanager界面都能看到告警了。

第五步:配置QQ邮箱通知(关键步骤)

获取QQ邮箱授权码

  1. 登录QQ邮箱,设置 -> 账户
  2. 开启SMTP服务
  3. 获取授权码(不是QQ密码!)

配置Alertmanager邮件发送

bash
vi /app/alertmanager/alertmanager/alertmanager.yml

配置内容:

yaml
global:
  resolve_timeout: 5m
  smtp_from: '你的QQ邮箱'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '你的QQ邮箱'
  smtp_auth_password: '你的QQ邮箱授权码'  # 注意是授权码不是密码
  smtp_require_tls: false
  smtp_hello: 'qq.com'

route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  - to: '你的QQ邮箱'
    send_resolved: true

重启服务测试

bash
systemctl restart alertmanager
# 再次停止node_exporter测试
systemctl stop node_exporter

等几分钟,QQ邮箱就会收到告警邮件了!

第六步:固定公网地址(可选)

cpolar的随机地址会变,想要固定地址需要保留二级子域名:

  1. cpolar控制台 -> 预留 -> 保留二级子域名
  2. 地区选China Top,设置子域名(如alertmanager)
  3. 隧道管理 -> 编辑隧道 -> 域名类型选择二级子域名
  4. 填入保留的子域名,更新即可

这样就有了固定的公网访问地址了。

踩坑经验分享

常见问题:

  1. QQ邮箱发不出邮件:检查是否用的授权码而不是QQ密码
  2. prometheus抓取不到数据:检查防火墙,确保端口能访问
  3. 告警不触发:检查告警规则语法,用prometheus界面测试表达式
  4. 内网穿透不稳定:免费版cpolar有连接数限制,付费版更稳定

优化建议:

  • 可以添加CPU、内存使用率告警规则
  • 支持钉钉、企业微信通知,比邮件更及时
  • 建议配置数据持久化存储

扩展配置

CPU使用率告警

yaml
- alert: CPU使用率过高
  expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 80
  for: 2m
  labels:
    severity: warning
  annotations:
    summary: "{{ $labels.instance }} CPU使用率过高"
    description: "CPU使用率已超过80%,当前值:{{ $value }}%"

内存使用率告警

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

总结

这套监控系统搭建完成后,基本告别了半夜被叫醒处理故障的痛苦。关键是配置简单,成本低,适合个人和小团队使用。整个系统的优势:

  • 全开源免费,无成本压力
  • 部署简单,半小时搞定
  • 监控全面,CPU、内存、磁盘、进程都能监控
  • 告警及时,15秒内发现问题
  • 支持内网穿透,没公网IP也能用

你们现在用什么监控系统?有没有更好的开源方案推荐?欢迎回帖交流经验!

原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/yzj/94.html

Like (0)
Previous 2025年9月20日 下午7:13
Next 2025年9月20日 下午7:30

相关推荐

  •  如何在轻量云主机快速搭建WordPress博客教程

    想快速拥有一个自己的博客?轻量云主机为你提供了一条快捷且经济的解决方案!特别是对于需要搭建WordPress博客的新手来说,这篇文章将带你从零开始,用短短几分钟搞定整个过程。 为什…

    2025年12月1日
    0
  • 新手玩云服务器?看这篇就够了!

    刚开始折腾云服务器的兄弟,是不是被一堆参数搞得头大?什么实例规格、存储类型、操作系统…别慌,这篇文章带你从小白秒变大神! 实例规格:性能的核心密码 通用型(平衡款) 适…

    2025年9月20日
    0
  • 什么是 GPU 裸机服务器?

    任何裸机服务器都为用户提供整台机器,这与共享主机或 VPS 托管安排形成鲜明对比,后者将物理服务器的资源分配给多个用户。添加 GPU 芯片以加速并行处理任务,为您提供 GPU 裸机…

    2025年10月13日
    0
  • 轻量云服务器和云虚拟主机有什么区别?

    这个问题很实用,能帮你精准避开 “选不对” 的坑!核心区别是:轻量云服务器是 “简化版独立服务器”(有独立 OS 和控制权),云虚拟主机是 “共享服务器拆分空间”(托管式,省心但受…

    2025年10月28日
    0
  • BGP高防服务器是指什么及有哪些作用

    BGP 高防服务器是一种融合了 BGP(边界网关协议)技术与高防(DDoS 攻击防御)功能的服务器产品。它既具备 BGP 技术带来的多线路互联、智能路由优化能力,又拥有抵御大流量 …

    2025年10月29日
    0
  • 弹性云主机怎么远程连接

    远程连接弹性云主机是许多企业和开发者在使用云计算服务时绕不开的重要环节。虽然这听起来有些技术性,但实际上,只要掌握了正确的方法,连接云主机不仅轻松,更能为您的项目提供高效的支持。那…

    2025年11月6日
    0
  • 弹性云主机和轻量云主机分别适用什么场景

    在当下数字化转型的浪潮中,企业和个人对于云计算的需求日益强烈。然而,面对弹性云主机和轻量云主机这两种选择时,很多人会感到困惑:它们究竟有何不同?各自适用于哪些业务场景? 什么是弹性…

    2025年12月1日
    0
  • 裸机和虚拟 GPU 之间的区别

    裸机 GPU 和虚拟 GPU 之间的主要区别在于它们如何使用物理 GPU 资源。使用裸机 GPU,您将获得一台安装了整块 GPU 芯片(或多个芯片)的物理服务器,该芯片完全专用于您…

    2025年10月14日
    0
  • 零基础如何配置GPU云主机?

    设置本地远程访问

    2025年10月14日
    0
  • 如何在弹性云主机上高效部署数据库系统

    在如今的数字化时代,企业对高效数据库系统的需求日益增长。而部署在弹性云主机上的数据库系统,凭借其灵活性与可扩展性,成为现代企业的优选方案。那么,如何在弹性云主机上高效部署数据库系统…

    2025年12月1日
    0