用 N8N 搭建阿里云公告监控告警系统

近期在使用阿里云服务时,遇到了一次颇为棘手的问题 —— 某项核心配置在未收到任何官方告知的情况下被自动回滚,不仅导致服务临时异常,更造成了关键业务日志的丢失,排查与恢复耗费了大量时间。事后复盘发现,核心原因在于未能及时获取阿里云的官方配置调整公告与更新通知,错过了提前规避风险的机会。
为了避免类似问题再次发生,我决定用 N8N 快速搭建一套阿里云公告 RSS 采集器,实现公告内容的实时抓取与提醒。本文将详细记录整个采集器的搭建过程(注:不包含 N8N 的部署环节,默认已完成基础环境配置),帮助有同样需求的开发者快速落地公告监控方案,让服务变更尽在掌握。

准备工作

  • 已部署 N8N 基础环境
  • 阿里云公告 RSS 订阅地址(可从阿里云官网公告页面获取)
  • 钉钉机器人(需提前创建,获取 access_token 和加签 secret)

搭建步骤

1. 创建工作流

登录 N8N 后,点击顶部导航栏的Create workflow按钮创建新工作流,开始配置监控流程。

2. 添加定时触发器(Schedule Trigger)

用于设置公告采集频率,配置如下:

  • 触发类型:选择时间间隔触发
  • 时间间隔:测试环境可设为每分钟,生产环境建议每小时(平衡时效性与资源消耗)
  • 时区:根据实际业务场景调整(默认与服务器时区一致

3. 添加 RSS 读取节点(RSS Read)

用于获取阿里云公告的 RSS 订阅内容:

  • 在节点配置中填入阿里云公告 RSS 地址(例如产品公告、安全更新等特定分类的 RSS 链接)
  • 其他参数保持默认(自动解析 RSS XML 格式内容)

4. 添加过滤节点(Filter)

用于筛选指定时间范围内的公告,避免重复处理历史数据:

  • 条件设置:pubDate(发布时间)大于等于当前时间减去指定天数
  • 测试环境建议设置为 7 天(便于验证流程),生产环境建议设置为 1 天(仅监控当天新公告)

5. 添加数据处理节点(Code in JavaScript)

  • 用于提取 RSS 内容中的关键信息(N8N 对 JavaScript 支持更完善),代码如下
// 从输入数据中安全获取第一条记录
// 使用可选链操作符(?.)避免$input为空时调用first()报错
// 若$input或first()返回空值,则默认使用空对象{}
const item = $input?.first() || {};

// 从item中解构出json字段,并设置默认值为空对象{}
// 防止item.json不存在时,后续访问json的属性报错
const { json = {} } = item;

// 定义需要从json中提取的目标字段列表
const targetKeys = [
  'title',               // 标题字段
  'pubDate',             // 发布日期字段
  'content:encodedSnippet', // 内容摘要字段
  'categories'           // 分类字段
];

// 使用reduce方法遍历目标字段,构建处理后的结果对象
const transformedData = targetKeys.reduce((result, key) => {
  const value = json[key];
  // 过滤掉值为undefined或null的字段
  if (value !== undefined && value !== null) {
    result[key] = value;
  }
  return result;
}, {});

// 返回处理结果作为节点输出
return transformedData;

6. 添加 AI 处理节点(AI Agent)

使用 AI 对公告内容进行分析提炼(以 DeepSeek 为例),快速抓取关键信息:

  • 模型选择:DeepSeek(可根据需求替换为其他支持的模型)
  • 提示词配置:请分析以下阿里云公告内容,提炼关键变更点和影响范围,用简洁的语言总结(不超过200字)
  • 输入数据:选择上一节点处理后的字段(title、content:encodedSnippet 等)

7. 添加钉钉签名处理(Code in Python)

为钉钉机器人请求生成加签信息(确保请求安全性),代码如下:

import time
import hmac
import hashlib
import base64
import urllib.parse

for item in _input.all():
  # 生成时间戳(毫秒级)
  timestamp = str(round(time.time() * 1000))
  # 钉钉机器人加签密钥(替换为实际secret)
  secret = '你的钉钉机器人secret'
  secret_enc = secret.encode('utf-8')
  # 构建签名字符串
  string_to_sign = '{}\n{}'.format(timestamp, secret)
  string_to_sign_enc = string_to_sign.encode('utf-8')
  # 计算HMAC-SHA256签名
  hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
  # 对签名进行Base64编码和URL编码
  sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
  # 存储计算结果到输出
  item.json.timestamp = timestamp
  item.json.sign = sign 
return _input.all()

8. 添加 HTTP 请求节点(HTTP Request)

用于发送通知到钉钉机器人,配置如下:

配置项 取值
Method POST
URL https://oapi.dingtalk.com/robot/send?access_token=你的钉钉机器人access_token
Authentication None
Send Query Parameters Using Field Below
Query 参数 1 name: timestamp, Value:
Query 参数 2 name: sign, Value:
Body Content Type application/json
Body json { “msgtype”: “text”, “text”: { “content”: “阿里云公告提醒:\n标题:\n发布时间:\n摘要:\nAI分析:“ } }

工作流测试与运行

  • 点击工作流编辑器右上角的Execute Workflow按钮进行测试
  • 检查各节点执行状态(绿色表示成功,红色表示失败),可通过节点日志排查错误
  • 测试成功后,点击Activate按钮启用工作流自动运行

任务流全景:

消息展示: