1. 首页 > 服务器系统 > Centos

CentOS 7如何搭建Prometheus监控?QQ邮箱告警配置详细步骤

在这里插入图片描述

前言

服务器运行正常时,监控页面似乎并不重要;真正出现问题后,才会发现"故障发生了多久、哪项指标先异常、为什么没有及时收到通知"这些问题,很难只靠人工检查解决。尤其是当服务器在深夜或节假日出现故障时,等到用户投诉才发现问题,已经造成了实际损失。

一套基础的服务器监控系统,至少需要完成三个环节:持续采集主机指标、按照规则判断异常,并在问题发生后主动发送通知。本文使用的 Prometheus、Node Exporter 和 Alertmanager,正好承担了这三项工作。

Prometheus 是目前云原生领域最流行的开源监控系统之一,由 SoundCloud 于 2012 年开发,现已成为 CNCF(云原生计算基金会)的毕业项目。它采用基于 HTTP 的 Pull(拉取)模型 采集数据,Prometheus Server 主动从被监控目标的接口拉取指标数据,存储在内置的高性能时序数据库(TSDB)中。这种设计天然适合动态的云原生环境,配合 Kubernetes 等容器编排平台的服务发现机制,可以实现监控目标的自动发现和动态管理。

Node Exporter 是 Prometheus 官方提供的服务器指标采集器,负责从 Linux 服务器中采集 CPU、内存、磁盘、网络和系统负载等指标。它不关心任何业务逻辑,只专注于机器本身的健康状况——CPU 是否过载、内存是否不足、磁盘是否将满、网络是否异常。Node Exporter 会将采集到的指标以 Prometheus 可识别的文本格式暴露在 /metrics 接口上,供 Prometheus 定期抓取。

Alertmanager 是 Prometheus 生态中的告警管理中枢。Prometheus 根据告警规则判断异常后,将告警信息发送给 Alertmanager;Alertmanager 负责对告警进行分组(Grouping)抑制(Inhibition)静默(Silencing) ,再通过邮件、钉钉、企业微信等多种渠道将告警通知送达管理员。告警分组能将同一服务的多个告警合并为一条通知,避免告警风暴;抑制机制可以在更高级别告警触发时自动压制低级别关联告警;静默功能则允许在计划维护期间临时屏蔽特定告警,避免不必要的干扰。

本文将以 CentOS 7 为例,完成 Alertmanager 安装、Prometheus 告警规则配置、Node Exporter 停机测试和 QQ 邮箱通知。最后再通过 cpolar 为本地告警页面建立远程访问入口,让不在服务器所在网络时,也能通过浏览器查看当前告警状态。cpolar 是一款内网穿透工具,无需申请公网 IP、无需配置路由器端口映射,就能将本地服务暴露到公网。

前言

1. 在 CentOS 7 上安装 Alertmanager

在安装 Alertmanager 前需要安装 Node Exporter 和 Prometheus,这是监控系统运转的基础。Node Exporter 负责暴露服务器指标,Prometheus 负责采集和存储,Alertmanager 负责告警分发——三者缺一不可。

接下来跟我进入监控告警的世界吧!

去官网下载安装文件:https://prometheus.io/download/

找到 Linux 版,下载:

1. 在 CentOS 7 上安装 Alertmanager

下载完成后记住下载路径。

创建 Alertmanager 的目录:

mkdir -p /app/alertmanager

1. 在 CentOS 7 上安装 Alertmanager_图2

进入到这个目录:

cd /app/alertmanager

1. 在 CentOS 7 上安装 Alertmanager_图3

手动上传下载好的 Alertmanager 文件。

1. 在 CentOS 7 上安装 Alertmanager_图4

1. 在 CentOS 7 上安装 Alertmanager_图5

1. 在 CentOS 7 上安装 Alertmanager_图6

上传成功后解压:

tar -vxzf alertmanager-0.28.1.linux-amd64.tar.gz

1. 在 CentOS 7 上安装 Alertmanager_图7

改名方便记忆:

mv alertmanager-0.28.1.linux-amd64 alertmanager

1. 在 CentOS 7 上安装 Alertmanager_图8

将 Alertmanager 配置为系统服务:

cd /usr/lib/systemd/system
vim alertmanager.service
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/app/alertmanager/alertmanager --config.file=/app/alertmanager/alertmanager.yml

[Install]                      
WantedBy=multi-user.target

1. 在 CentOS 7 上安装 Alertmanager_图9

💡 配置系统服务的优势:将 Alertmanager 配置为 systemd 系统服务后,可以实现开机自启、异常自动重启和统一的服务管理。生产环境中强烈建议使用这种方式,而非后台手动启动。Restart=on-failure 参数确保服务异常退出时自动恢复,WantedBy=multi-user.target 则保证系统启动时服务自动运行。

加载 system 文件,启动 Alertmanager 这个服务,并设置开机启动:

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

1. 在 CentOS 7 上安装 Alertmanager_图10

也可以后台手动启动(适用于临时测试):

nohup ./alertmanager --config.file=alertmanager.yml >> /app/alertmanager/alertmanager/alertmanager.out 2>&1 &
cat alertmanager.out

1. 在 CentOS 7 上安装 Alertmanager_图11

⚠️ 注意事项:手动启动时,日志会输出到 alertmanager.out 文件,方便排查启动错误。但生产环境仍推荐使用 systemd 方式管理。

启动成功后,访问 Alertmanager,IP:9093,默认端口为 9093。

1. 在 CentOS 7 上安装 Alertmanager_图12

假如,我们想用手机或者平板,随时随地可以查看告警消息,我们应该怎么做呢?接下来 cpolar 就派上用场啦!

2. 安装 cpolar 实现随时随地访问

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

在没有 cpolar 之前,要让内网服务被外网访问,通常需要申请公网 IP、配置路由器端口映射、甚至向运营商申请开放特定端口,流程繁琐且成本高昂。而 cpolar 只需一行命令安装、几分钟配置,就能轻松实现内网穿透。

❤️ 以下是安装 cpolar 步骤:

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

2. 安装 cpolar 实现随时随地访问

安装完成后,执行下方命令查看 cpolar 服务状态(如图所示即为正常启动):

sudo systemctl status cpolar

2. 安装 cpolar 实现随时随地访问_图2

cpolar 安装和成功启动服务后,在浏览器上输入虚拟机主机 IP 加 9200 端口即 【http://192.168.42.101:9200】 访问 cpolar 管理界面,使用 cpolar 官网注册的账号登录,登录后即可看到 cpolar Web 配置界面,接下来在 Web 界面配置即可:

打开浏览器访问本地 9200 端口,使用 cpolar 账户密码登录即可,登录后即可对隧道进行管理。

2. 安装 cpolar 实现随时随地访问_图3

🔧 知识拓展:cpolar 的工作原理是在客户端与 cpolar 云端服务器之间建立一条安全的加密隧道。当外网用户访问 cpolar 分配的公网地址时,请求经由 cpolar 云端转发到本地的 cpolar 客户端,再由客户端转发到指定的本地服务端口。整个过程对用户透明,无需关心底层网络细节。

3. 配置公网地址

登录 cpolar Web UI 管理界面后,点击左侧仪表盘的隧道管理——创建隧道

  • 隧道名称:可自定义,本例使用了 alertmanager,注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:9093
  • 域名类型:随机域名
  • 地区:选择 China Top

3. 配置公网地址

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

3. 配置公网地址_图2

访问成功。

3. 配置公网地址_图3

📱 应用场景:配置好公网地址后,无论你是在外出差、在家中休息,还是在通勤路上,只要手机或平板能联网,就可以随时打开 Alertmanager 页面查看当前的告警状态。对于个人开发者和小团队来说,这相当于拥有了一个 7×24 小时可访问的监控面板。

4. 在 Prometheus 上配置 Alertmanager

进入 Prometheus 的配置文件,加入 Alertmanager 告警规则:

vi /app/prometheus/prometheus.yml

加入以下内容后,Prometheus 可以通过这个公网地址 4246d47e.r2.cpolar.top(刚才用 cpolar 打通的公网地址,也可以用 localhost:9093)访问到运行在本地 9093 端口的 Alertmanager 服务,从而将告警信息发送给 Alertmanager。

      - targets: ["4246d47e.r2.cpolar.top"]
        labels:
          app: "alertmanager"

这一步配置的作用是:告诉 Prometheus,当监控规则触发告警时,应该把告警信息发送到哪个 Alertmanager 服务进行处理(便于一会监控 Node Exporter,也可以监控 mysqld_exporter 等等)。

alerting:
  alertmanagers:
    - static_configs:
        - targets: ["4246d47e.r2.cpolar.top"]

4. 在 Prometheus 上配置 Alertmanager

重新启动 Prometheus:

systemctl restart prometheus

抓取成功!

4. 在 Prometheus 上配置 Alertmanager_图2

💡 配置详解alertmanagers 配置段中可以指定多个 Alertmanager 实例,实现告警的高可用。当配置了多个 Alertmanager 时,Prometheus 会向所有实例发送告警,由 Alertmanager 集群内部通过 Gossip 协议同步状态。本例中只配置了一个 Alertmanager 实例,对于个人和小团队场景已经足够。

5. 利用 Alertmanager 配置 Node Exporter 告警

在第四章节,我们已经成功配置告警信息发送到 Alertmanager,接下来我们来验证一下,是否可以成功发送!

我们这里举例,倘若 Node Exporter 关闭则发送告警。

Node Exporter 还可以监控主机的 CPU 使用率、内存使用量、文件系统用量等等。

我们先改写 Prometheus 的配置文件,改以下内容:

vi /app/prometheus/promethues.yml

5. 利用 Alertmanager 配置 Node Exporter 告警

进入到 Prometheus 配置目录下,写一个配置文件 1.yml

vi /app/prometheus/1.yml
groups:
- name: node-alerts
  rules:
  # 实例宕机
  - 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:
  # 实例宕机
  - alert: 实例宕机
    expr: up{job="prometheus"} == 0
    for: 15s
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 已停止运行超过 15 秒!"
      description: "作业 {{ $labels.job }} 的实例 {{ $labels.instance }} 无法抓取。"

5. 利用 Alertmanager 配置 Node Exporter 告警_图2

📖 告警规则文件结构解析
- groups:告警规则组,可以按功能或服务划分不同的组
- name:规则组名称,便于识别和管理
- rules:具体的告警规则列表
- alert:告警规则的名称,会在告警通知中显示
- expr:PromQL 表达式,用于判断是否触发告警。up == 0 表示当目标实例不可达时触发
- for:持续时间,表示条件需要持续满足多久才触发告警,避免瞬时波动导致误报
- labels:告警标签,可用于告警分组和路由
- annotations:告警注解,包含 summary(摘要)和 description(详细描述),会出现在告警通知中

重启 Prometheus:

systemctl restart prometheus

打开 Prometheus 网页,发现加入成功。

5. 利用 Alertmanager 配置 Node Exporter 告警_图3

接下来,我们验证一下,关闭 Node Exporter,会不会告警:

systemctl stop node_exporter

5. 利用 Alertmanager 配置 Node Exporter 告警_图4

再次打开 Prometheus 网页,告警成功:

5. 利用 Alertmanager 配置 Node Exporter 告警_图5

打开 Alertmanager 网页,我们发现那两条告警也显示成功。

5. 利用 Alertmanager 配置 Node Exporter 告警_图6

这样我们就成功配置 Prometheus 告警啦!

🔍 验证技巧:在 Prometheus Web UI 的 Alerts 页面中,可以查看所有告警规则的当前状态。状态分为三种:
- Inactive:规则未触发,一切正常
- Pending:规则已满足条件,但还在等待 for 时长确认
- Firing:规则已触发,告警已发送给 Alertmanager

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱

QQ 邮箱默认不允许外部应用直接使用密码登录 SMTP 服务器,因此你需要获取一个授权码

  • 登录 QQ 邮箱,进入 设置 -> 账户
  • 找到 SMTP/IMAP/POP3/Exchange 服务,开启 SMTP 服务
  • 开启后,会提示你获取一个授权码

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱_图2

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱_图3

⚠️ 重要提醒:授权码是第三方应用登录 QQ 邮箱的专用密码,不是你的 QQ 登录密码。如果填写了 QQ 密码而非授权码,SMTP 认证会失败,告警邮件无法发送。务必妥善保存授权码,如遗失可以重新生成。

接下来,我们进入 Alertmanager 安装目录,修改 Alertmanager 配置文件 alertmanager.yml

vi /app/alertmanager/alertmanager/alertmanager.yml

添加以下内容来配置告警规则:

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

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱_图4

📖 配置项详解
- global:全局配置,适用于所有告警通知
- resolve_timeout:告警恢复后的超时时间
- smtp_smarthost:SMTP 服务器地址和端口,QQ 邮箱使用 smtp.qq.com:465(SSL)或 smtp.qq.com:587(TLS)
- smtp_from:发件人邮箱地址
- smtp_auth_username:邮箱账号
- smtp_auth_password授权码,不是邮箱密码
- smtp_require_tls:是否启用 TLS 加密
- route:告警路由配置
- group_by:按哪些标签进行告警分组
- group_wait:分组等待时间,用于收集同组告警
- group_interval:同一组告警再次发送的间隔
- repeat_interval:同一条告警重复发送的间隔
- receiver:默认接收器名称
- receivers:接收器列表
- name:接收器名称
- email_configs:邮件配置
- to:收件人邮箱
- send_resolved:是否发送告警恢复通知
- inhibit_rules:抑制规则,用于减少告警噪音

这样有告警消息就可以发送到 QQ 邮箱啦!

我们来验证一下,配置有没有问题:

./alertmanager --config.file=alertmanager.yml --log.level=debug

手动运行测试,没报错即正确!

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱_图5

重启 Alertmanager:

systemctl restart alertmanager
systemctl status alertmanager

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱_图6

登录邮箱查看,Node Exporter 挂机是否发邮件:

6. 使用 Alertmanager 发送服务器告警至 QQ 邮箱_图7

接收到邮件,说明我们配置正确!

这样我们就可以随时随地查看告警信息了!

📧 其他告警渠道:除了 QQ 邮箱,Alertmanager 还支持多种告警渠道。通过配置不同的 receiver,可以将告警发送到企业微信、钉钉、飞书等平台。企业微信和钉钉通常通过 Webhook 方式接入,配置相对简单,对于国内团队来说也是不错的选择。

7. 保留固定公网地址

使用 cpolar 为其配置二级子域名,该地址为固定地址,不会随机变化。

7. 保留固定公网地址

点击左侧的预留,选择保留二级子域名,地区选择 China Top,然后设置一个二级子域名名称,我这里演示使用的是 alertmanager,大家可以自定义。填写备注信息,点击保留

7. 保留固定公网地址_图2

登录 cpolar Web UI 管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道 alertmanager,点击右侧的编辑

7. 保留固定公网地址_图3

修改隧道信息,将保留成功的二级子域名配置到隧道中:

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区:China Top

点击更新

7. 保留固定公网地址_图4

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

7. 保留固定公网地址_图5

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的 Alertmanager 页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

7. 保留固定公网地址_图6

有了 cpolar 我们可以在任意一台服务器,使用此 Alertmanager 监控,你的同事也可以一键监控!是不是特别方便呢~

🌐 固定域名的价值:随机域名在每次重启 cpolar 服务后可能会变化,而固定二级子域名一旦配置好就永久有效。对于需要长期使用的监控系统,固定域名意味着你可以把它收藏到浏览器书签、配置到移动端桌面快捷方式,甚至分享给团队成员共同使用,而不用担心地址失效。

📊 知识拓展:Prometheus vs Zabbix——监控工具怎么选?

对于刚开始接触服务器监控的读者,可能会好奇:Prometheus 和 Zabbix 都是主流的监控工具,它们有什么区别?应该选哪个?

对比维度PrometheusZabbix
诞生时间2012年(云原生时代)1998年(传统IT时代)
监控哲学以服务为中心,强调动态环境和微服务监控以主机为中心,适合监控物理机和虚拟机
数据采集Pull(拉取)模式,通过 HTTP 抓取指标支持主动/被动双模式,通过 Agent 采集
数据存储内置时序数据库(TSDB),专为监控数据优化关系型数据库(MySQL/PostgreSQL)
告警机制告警与核心分离,通过 Alertmanager 实现分组、抑制、静默内置完整告警功能,支持多级升级
可视化原生界面简单,需结合 Grafana 实现高级可视化开箱即用的 Web 界面,包含仪表盘和图表
扩展性通过丰富的 Exporter 生态实现数据采集通过自定义脚本和模板扩展
适用场景云原生、容器、微服务、动态环境传统 IT 基础设施、物理机、虚拟机

选择建议:如果你是个人开发者、运维新手,或者主要监控云原生环境(Kubernetes、容器服务),Prometheus + Grafana 的组合更加灵活和现代化。如果你是传统企业 IT 运维,需要监控大量物理机和虚拟机,且希望开箱即用、图形化配置,Zabbix 可能更合适。

🛠️ 监控告警最佳实践

完成基础搭建后,以下几点最佳实践可以帮助你让监控系统更加可靠和高效:

1. 合理设置告警阈值

阈值设置过松会漏报真实故障,过紧则会导致大量误报、引发告警疲劳。建议:
- 参考历史数据设定基线,而非凭感觉拍脑袋
- CPU 使用率告警可以设置为 > 85% 持续 5 分钟,避免瞬时峰值触发
- 磁盘使用率告警建议分级:> 80% 为 Warning,> 90% 为 Critical

2. 利用 Alertmanager 的分组和抑制功能

告警分组能将同一服务的多个告警合并为一条通知;抑制机制可以在"网络分区"等高级别告警触发时,自动压制所有"实例失联"的低级别告警。这两个功能可以显著减少告警噪音,让你把精力集中在真正重要的问题上。

3. 配置告警恢复通知

email_configs 中设置 send_resolved: true,当故障恢复后管理员会收到恢复通知。这能帮助运维人员确认问题已解决,避免反复确认服务状态。

4. 定期进行故障演练

模拟告警通道中断、主动停止 Node Exporter 等场景,验证整个告警链路是否正常工作。只有定期演练,才能确保在真正出问题时监控系统不掉链子。

5. 监控系统自身的健康

Prometheus 自身提供了 up 指标来监控各个采集目标的状态。可以配置一条告警规则,当 Prometheus 自身或 Alertmanager 服务不可用时及时通知管理员。

🔮 监控系统的未来趋势

随着技术发展,服务器监控领域也在不断演进:

从监控到可观测性(Observability)

传统的监控侧重于"已知故障的发现",而可观测性强调"未知问题的探索"。通过收集指标(Metrics)、日志(Logs)和链路追踪(Traces)三类数据,可观测性让运维人员能够深入理解系统的内部状态。

AIOps 与智能告警

人工智能正在改变运维的方式。AIOps(智能运维)能够自动检测和发现潜在问题,减少根因分析所需的手动工作量。在告警方面,AI 可以分析历史告警数据,自动调整阈值、识别告警之间的因果关系,甚至预测未来可能发生的故障。

自然语言交互

基于大语言模型(LLM)的自然语言交互功能正在兴起,例如 Chat2PromQL 让运维人员可以用自然语言查询监控数据,而不必记忆复杂的 PromQL 语法。这将大幅降低监控系统的使用门槛。

从"被动响应"到"主动预防"

未来的监控系统将不再仅仅是"出了问题才告警"的被动工具,而是能够"预测问题、提前预防"的主动平台。结合 AI 的预测能力,监控系统可以在磁盘将满、流量突增等异常发生之前就发出预警,给运维人员留出充足的应对时间。

结尾

完成全部配置后,这套监控链路就可以开始持续工作:Node Exporter 负责暴露服务器指标,Prometheus 按照设定频率采集数据并执行告警规则,Alertmanager 接收触发的告警,再通过 QQ 邮箱将异常信息发送给管理员。

在测试过程中停止 Node Exporter,可以验证从"指标无法采集"到"Prometheus 触发规则",再到"Alertmanager 展示告警并发送邮件"的完整流程。只有这条链路真正跑通,监控系统才不只是几个已经启动的服务,而是一套能够主动发现问题的运维工具。

cpolar 提供的公网入口,则补充了远程查看能力。服务器仍然运行在本地网络中,但在外出、异地办公或临时排查故障时,也能打开 Alertmanager 页面查看当前告警,而不必先回到服务器所在的局域网。

这只是服务器监控的起点。后续还可以继续增加 CPU 使用率、内存不足、磁盘空间、系统负载和服务存活等规则,并根据告警级别设置不同接收人和通知频率。随着规则逐步完善,这套系统才能从简单的宕机提醒,成长为真正能够帮助日常运维的监控告警平台。

🚀 进阶方向:当你熟悉了基础监控后,可以进一步探索以下方向——接入 Grafana 实现炫酷的监控仪表盘、配置钉钉/企业微信告警、部署 Blackbox Exporter 监控网站可用性、使用 Prometheus Operator 在 Kubernetes 中自动化管理监控组件。监控的世界很大,本文只是帮你打开了第一扇门。

本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https:///centos/9712.html

联系我们

在线咨询:点击这里给我发消息

Q Q:2220678578