Nightingale + Categraf + Prometheus + 飞书告警与故障自愈配置全流程指南
本指南记录了基于 Nightingale(夜莺监控)、Categraf、Prometheus 与 飞书(Feishu) 实现指标采集、时序存储、告警判定及告警/恢复(自愈)消息即时通知的完整配置流程,并包含基于 stress 工具进行 CPU 压测触发告警的实战演练。
一、 整体架构与数据流向
本方案采用解耦的设计,采集端(Categraf)不直接与告警引擎交互,而是将数据写入时序数据库(Prometheus),再由夜莺进行统一检索与告警判定。
1. 架构拓扑
+-------------------+ Push (Remote Write) +-------------------------+
| Categraf | ------------------------------------------> | Prometheus |
| (主机指标采集) | | (启用Remote Write接收) |
+-------------------+ +-------------------------+
| ^
| Heartbeat (HTTP) | Query (HTTP API)
v |
+-------------------------------------------------------------------------------------------+
| Nightingale (n9e) |
| (规则评估引擎 / 告警状态机 / 消息通道分发) |
+-------------------------------------------------------------------------------------------+
|
| Trigger/Recover (HTTPS)
v
+-------------------------+
| 飞书即时通讯 |
| (红色告警/绿色恢复卡片) |
+-------------------------+
2. 数据流向说明
- 指标采集与存储:Categraf 定期采集主机指标,利用 Prometheus Remote Write 协议推送到 Prometheus TSDB。
- 心跳与资产注册:Categraf 通过 HTTP 接口向 Nightingale 发送心跳,完成主机的自动注册。
- 异常判定(CPU > 80%):Nightingale 周期性向 Prometheus 发起 PromQL 查询。若连续多次满足
cpu_usage_active > 80,则判定指标进入“告警(Alerting)”状态,渲染红色告警卡片并向飞书发送。 - 恢复判定(CPU < 80%):当 CPU 使用率回落至 80% 以下时,Nightingale 判定故障已“恢复(Resolved)”,自动渲染绿色恢复卡片发送至同一个飞书群。
二、 部署与配置步骤大纲
- Prometheus 部署与配置:解压二进制包、建立专属系统用户、配置服务并开启远程写入接收功能。
- Categraf 部署与配置:部署采集程序,配置指标推送(Writers)与心跳上报(Heartbeat)。
- 服务状态确认:启动 Prometheus、Categraf 与 Nightingale 服务,验证组件健康状态。
- 夜莺数据源关联:在 Nightingale 界面上接入 Prometheus 存储。
- 飞书自定义机器人配置:在飞书群中创建机器人,获取 Webhook 地址,设置安全选项。
- 夜莺飞书通道对接:配置夜莺中的联系介质,绑定用户的飞书 Token。
- CPU 告警与恢复规则配置:在夜莺中编写 PromQL 告警规则,配置触发阈值与自动发送恢复通知。
- 压测模拟与自愈验证:使用
stress工具将 CPU 跑满,触发告警,随后释放负载,验证飞书端分别收到“故障报警(红色)”与“恢复通知(绿色)”。
三、 具体实验步骤
1. 部署与配置 Prometheus
1.1 解压并部署二进制文件
tar xf prometheus-2.53.3.linux-amd64.tar.gz -C /opt/
mv /opt/prometheus-2.53.3.linux-amd64 /opt/prometheus
1.2 创建运行用户、数据目录并授权
useradd -M -s /sbin/nologin prometheus
mkdir -p /opt/prometheus/data
chown -R prometheus:prometheus /opt/prometheus/
1.3 编写 Systemd 服务单元
编辑 /etc/systemd/system/prometheus.service:
[Unit]
Description=Prometheus Time Series Collection and Processing Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
WorkingDirectory=/opt/prometheus
User=prometheus
Group=prometheus
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--storage.tsdb.path=/opt/prometheus/data \
--web.console.libraries=/opt/prometheus/console_libraries \
--web.console.templates=/opt/prometheus/consoles \
--web.listen-address=0.0.0.0:9090 \
--web.enable-remote-write-receiver \ #关键配置,这个参数代表打开/api/v1/write 写入接口,categraf才能正常将采集到的指标写入prometheus tsdb时序数据库当中
--web.external-url=http://192.168.108.230:9090
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable prometheus --now
2. 部署并配置 Categraf
2.1 基础文件部署
mkdir -p /opt/categraf
tar -zxvf categraf-v0.5.11-linux-amd64.tar.gz -C /opt/categraf --strip-components=1
useradd -M -s /sbin/nologin categraf
chown -R categraf:categraf /opt/categraf
2.2 编辑主配置文件 config.toml
编辑 /opt/categraf/conf/config.toml,确保 Writers 指向 Prometheus,Heartbeat 指向夜莺:
[global]
print_configs = false
hostname = "Nightnare"
omit_hostname = false
interval = 15
providers = ["local"]
[global.labels]
region = "wuxi"
env = "test"
[log]
file_name = "/opt/categraf/log/categraf.log"
max_size = 100
[[writers]]
url = "http://192.168.108.230:9090/api/v1/write" #关键配置,这里categraf将采集到的指标写入prometheus开放的/api/v1/write写入接口当中
timeout = 5000
[heartbeat]
enable = true
url = "http://192.168.108.230:17000/v1/n9e/heartbeat" #categraf上报自己的心跳到夜莺告警平台,自动注册身份
interval = 10
2.3 编写 Categraf Systemd 服务单元
编辑 /etc/systemd/system/categraf.service:
[Unit]
Description=Categraf Metrics Collector
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/categraf
ExecStart=/opt/categraf/categraf -configs /opt/categraf/conf
User=categraf
Group=categraf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable categraf --now
3. 服务校验与数据源配置
3.1 验证服务状态
systemctl status prometheus.service
systemctl status categraf.service
3.2 夜莺 Web 端配置数据源
- 登录夜莺系统控制台(
http://192.168.108.230:17000)。 - 导航至 “系统配置” -> “数据源”,点击 “添加数据源”,选择 Prometheus。
- 填入以下配置:
- 数据源名称:
192.168.108.230 - URL:
http://192.168.108.230:9090
- 数据源名称:
- 点击“关联测试”,成功后保存。

4. 飞书自定义机器人配置
- 打开飞书对应的告警接收群聊,点击右上角 “设置” -> “群机器人” -> “添加机器人”。
- 选择 “自定义机器人”,设置名称-夜莺告警测试机器人。
- 配置安全设置:
- 自定义关键词:填入
告警(确保夜莺发送的通知文本中包含此关键词)。
- 自定义关键词:填入
- 完成后获取 Webhook 地址,截取
hook/之后的 Token 字符串,例如:
c12f225c-eebf-49ce-8836-b2c47b080787。


5. 夜莺飞书通道对接
- 进入夜莺控制台的 **“通知” -> “通知媒介” ,直接克隆飞书的通知模板,重命名为服务器运维飞书通知群,并且将之前在飞书里面创建的群机器人的token地址填入到这里

2.进入夜莺控制台的 **“通知” -> “通知规则”,创建 cpu使用率过高超过80% 的通知规则,并且对接飞书的群机器人并保存

6. CPU 使用率告警与恢复规则配置
在夜莺中通过单条规则实现指标超限告警与指标回落自愈通知。
6.1 新建告警规则
进入 “告警管理” -> “告警规则” -> “新建规则”。
6.2 填写规则核心字段
- 关联数据源:选择已创建的
192.168.108.230。 - 规则名称:
主机 CPU 使用率超过 80% 告警。 - PromQL 查询:
(说明:该指标由 Categraf 采集,表示 CPU 的活动使用率百分比数值。)100 - avg by (agent_hostname,env,region) (cpu_usage_idle) > 80 - 执行频率:
15s。 - 持续时长:
15s(当连续两次评估均超过阈值时才触发告警,防止偶发性尖峰引起误报)。
6.3 触发条件与通道设置
- 触发条件:
Value > 80时,触发 “二级告警 (Warning)”。 - 通知媒介:勾选 飞书 (Feishu)。
- 发送恢复通知:必须勾选此项(夜莺会在指标回落到 80% 以下时,自动发送故障恢复通知)。


7. 压测模拟与自愈验证
本节通过真实压测工具验证告警全链路的有效性。
7.1 阶段一:使用 stress 模拟打满 CPU
登录主机 Nightnare,执行 stress 命令。通过使用 $(nproc) 变量,系统将自动检测当前的 CPU 核心数并启动对应数量的压力线程,从而使 CPU 整体使用率达到接近 100% 的满载状态:
root@Nightnare:/opt# stress --cpu $(nproc)
stress: info: [48284] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
(从日志中可以看出,当前系统检测到 2 个 CPU 核心,并成功派生了 2 个压力进程。)
7.2 阶段二:触发告警并接收飞书通知
- 保持
stress进程持续运行。 - 观察夜莺“活跃告警”页面,由于
cpu_usage_active的数值飙升至接近100,且持续时间超过 15 秒,系统判定触发告警。 - 飞书端效果:飞书告警群立即收到红色主题的消息卡片:
- 告警名称:
主机 CPU 使用率超过 80% 告警 - 当前状态:🔴 异常中
- 目标主机:
Nightnare - 当前数值:
100%
- 告警名称:
7.3 阶段三:停止压测,触发故障自愈
- 在终端中按下
Ctrl + C,强行终止stress命令,释放系统负载:^C root@Nightnare:/opt# - 系统 CPU 使用率迅速回落至常规区间(通常低于 5%)。
- 待夜莺进行下一次周期的评估判定。因检测值已低于 80%,该告警事件从“活跃告警”列表清除,归档至历史告警。
- 飞书端效果:飞书群内随即收到绿色主题的自愈卡片:
- 告警名称:
主机 CPU 使用率超过 80% 告警 - 当前状态:🟢 正常 (故障已自愈)
- 当前数值:
2.3% - 恢复时间:系统记录的指标降温时刻。
- 告警名称:


四、 实验总结与运维价值
本方案通过将 Categraf 指标输入 Prometheus 存储,再由 Nightingale 执行告警判定并投递飞书,构建了一条标准的监控闭环链路。
- 自动恢复机制(自愈通知):
通过勾选“发送恢复通知”,夜莺能够在指标恢复正常后主动通知值班人员。这消除了人工反复登录系统确认故障是否排除的步骤,有助于降低日常运维工作负担。 - 减少告警闪烁:
在规则中引入“持续时长(15秒)”机制。当使用stress --cpu $(nproc)进行模拟时,系统并未在启动瞬间立即报警,而是等指标稳定越线后才推送。这种防抖设置有助于减少由于临时尖峰引起的无效告警。 - 直观的卡片化呈现:
借助飞书的富文本卡片,将故障触发(红色)与自愈恢复(绿色)以明显的视觉差呈现在群聊中,方便值班团队在移动端或 PC 端快速同步当前的故障生命周期状态。
浙公网安备 33010602011771号