Nightingale + Categraf + Prometheus + 飞书告警与故障自愈配置全流程指南

本指南记录了基于 Nightingale(夜莺监控)CategrafPrometheus飞书(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. 数据流向说明

  1. 指标采集与存储:Categraf 定期采集主机指标,利用 Prometheus Remote Write 协议推送到 Prometheus TSDB。
  2. 心跳与资产注册:Categraf 通过 HTTP 接口向 Nightingale 发送心跳,完成主机的自动注册。
  3. 异常判定(CPU > 80%):Nightingale 周期性向 Prometheus 发起 PromQL 查询。若连续多次满足 cpu_usage_active > 80,则判定指标进入“告警(Alerting)”状态,渲染红色告警卡片并向飞书发送。
  4. 恢复判定(CPU < 80%):当 CPU 使用率回落至 80% 以下时,Nightingale 判定故障已“恢复(Resolved)”,自动渲染绿色恢复卡片发送至同一个飞书群。

二、 部署与配置步骤大纲

  1. Prometheus 部署与配置:解压二进制包、建立专属系统用户、配置服务并开启远程写入接收功能。
  2. Categraf 部署与配置:部署采集程序,配置指标推送(Writers)与心跳上报(Heartbeat)。
  3. 服务状态确认:启动 Prometheus、Categraf 与 Nightingale 服务,验证组件健康状态。
  4. 夜莺数据源关联:在 Nightingale 界面上接入 Prometheus 存储。
  5. 飞书自定义机器人配置:在飞书群中创建机器人,获取 Webhook 地址,设置安全选项。
  6. 夜莺飞书通道对接:配置夜莺中的联系介质,绑定用户的飞书 Token。
  7. CPU 告警与恢复规则配置:在夜莺中编写 PromQL 告警规则,配置触发阈值与自动发送恢复通知。
  8. 压测模拟与自愈验证:使用 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 端配置数据源

  1. 登录夜莺系统控制台(http://192.168.108.230:17000)。
  2. 导航至 “系统配置” -> “数据源”,点击 “添加数据源”,选择 Prometheus
  3. 填入以下配置:
    • 数据源名称192.168.108.230
    • URLhttp://192.168.108.230:9090
  4. 点击“关联测试”,成功后保存。

image


4. 飞书自定义机器人配置

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

944dcddf335c2c217bc15e831431e263

image


5. 夜莺飞书通道对接

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

image

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

image


6. CPU 使用率告警与恢复规则配置

在夜莺中通过单条规则实现指标超限告警指标回落自愈通知

6.1 新建告警规则

进入 “告警管理” -> “告警规则” -> “新建规则”

6.2 填写规则核心字段

  • 关联数据源:选择已创建的 192.168.108.230
  • 规则名称主机 CPU 使用率超过 80% 告警
  • PromQL 查询
    100 - avg by (agent_hostname,env,region) (cpu_usage_idle) > 80
    
    (说明:该指标由 Categraf 采集,表示 CPU 的活动使用率百分比数值。)
  • 执行频率15s
  • 持续时长15s(当连续两次评估均超过阈值时才触发告警,防止偶发性尖峰引起误报)。

6.3 触发条件与通道设置

  • 触发条件Value > 80 时,触发 “二级告警 (Warning)”
  • 通知媒介:勾选 飞书 (Feishu)
  • 发送恢复通知必须勾选此项(夜莺会在指标回落到 80% 以下时,自动发送故障恢复通知)。

image

image


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 阶段二:触发告警并接收飞书通知

  1. 保持 stress 进程持续运行。
  2. 观察夜莺“活跃告警”页面,由于 cpu_usage_active 的数值飙升至接近 100,且持续时间超过 15 秒,系统判定触发告警。
  3. 飞书端效果:飞书告警群立即收到红色主题的消息卡片:
    • 告警名称主机 CPU 使用率超过 80% 告警
    • 当前状态:🔴 异常中
    • 目标主机Nightnare
    • 当前数值100%

7.3 阶段三:停止压测,触发故障自愈

  1. 在终端中按下 Ctrl + C,强行终止 stress 命令,释放系统负载:
    ^C
    root@Nightnare:/opt# 
    
  2. 系统 CPU 使用率迅速回落至常规区间(通常低于 5%)。
  3. 待夜莺进行下一次周期的评估判定。因检测值已低于 80%,该告警事件从“活跃告警”列表清除,归档至历史告警。
  4. 飞书端效果:飞书群内随即收到绿色主题的自愈卡片:
    • 告警名称主机 CPU 使用率超过 80% 告警
    • 当前状态:🟢 正常 (故障已自愈)
    • 当前数值2.3%
    • 恢复时间:系统记录的指标降温时刻。

05eaea6145402f137799b7d9ff1a9e13

image


四、 实验总结与运维价值

本方案通过将 Categraf 指标输入 Prometheus 存储,再由 Nightingale 执行告警判定并投递飞书,构建了一条标准的监控闭环链路。

  1. 自动恢复机制(自愈通知)
    通过勾选“发送恢复通知”,夜莺能够在指标恢复正常后主动通知值班人员。这消除了人工反复登录系统确认故障是否排除的步骤,有助于降低日常运维工作负担。
  2. 减少告警闪烁
    在规则中引入“持续时长(15秒)”机制。当使用 stress --cpu $(nproc) 进行模拟时,系统并未在启动瞬间立即报警,而是等指标稳定越线后才推送。这种防抖设置有助于减少由于临时尖峰引起的无效告警。
  3. 直观的卡片化呈现
    借助飞书的富文本卡片,将故障触发(红色)与自愈恢复(绿色)以明显的视觉差呈现在群聊中,方便值班团队在移动端或 PC 端快速同步当前的故障生命周期状态。
posted on 2026-06-22 10:31  LeeHang  阅读(19)  评论(0)    收藏  举报