Meraki 网络性能监控与告警

Meraki Network Monitor

自动监测 Cisco Meraki 网络的延迟和丢包率,当性能超过阈值时通过 Teams 发送告警,并使用 Redis 防止重复通知

23 NodesIndustry Vertical网络监控性能告警Meraki

工作流概述

本 n8n 工作流是一个 Cisco Meraki 网络监控与告警系统,用于自动监测网络性能指标(延迟和丢包率),并在检测到问题时发送告警通知。该工作流通过 Meraki API 获取组织、网络和上行链路统计数据,计算平均性能指标,筛选出有问题的站点,并通过 Microsoft Teams 发送告警消息,同时使用 Redis 数据库防止重复告警。


工作流结构

1. 触发器节点

节点名称:

  • When clicking "Execute Workflow" (手动触发器)
  • Schedule Trigger (定时触发器)

功能说明: 该工作流支持两种触发方式:

  • 手动执行:通过点击"执行工作流"按钮手动触发
  • 定时执行:按照预设的时间计划自动执行(用于持续监控)

2. 数据采集阶段

2.1 获取 Meraki 组织信息

节点名称: Get Meraki Organizations

功能说明:

  • 通过 HTTP 请求调用 Meraki API (https://api.meraki.com/api/v1/organizations)
  • 使用 Header 认证方式,需要配置 Meraki API 密钥
  • 获取账户有权访问的所有组织列表

技术细节:

  • 请求类型:GET
  • 认证方式:HTTP Header Auth
  • 必需的 Header:
    • Authorization: 用于身份验证
    • Accept: application/json: 指定返回 JSON 格式数据

2.2 整理组织数据

节点名称: Get Org Name & ID

功能说明:

  • 使用 Set 节点提取和重命名关键字段
  • 从原始数据中提取:
    • CompanyName: 组织名称
    • OrgID: 组织 ID

2.3 获取网络 ID

节点名称: Get Network IDs

功能说明:

  • 针对每个组织 ID,调用 API 获取其下的所有网络
  • 使用动态 URL:https://api.meraki.com/api/v1/organizations/{{ $json.OrgID }}/networks
  • 为后续的网络监控提供网络列表

2.4 整理网络变量

节点名称: Sets Network Variables

功能说明:

  • 提取和格式化网络信息
  • 包含网络名称、网络 ID、网络 URL 等关键字段

2.5 获取上行链路统计数据

节点名称: Get Uplink Loss and Latency

功能说明:

  • 获取网络设备的上行链路性能统计
  • 包含:
    • 丢包率百分比(Loss Percent)
    • 延迟毫秒数(Latency Ms)
    • 时间序列数据(最近 5 个时间点的数据)

3. 数据处理与分析阶段

3.1 数据合并

节点名称: Combine latency to its respective Network

功能说明:

  • 使用 Merge 节点将网络信息和性能统计数据合并
  • 匹配字段:NetworkIDnetworkId
  • 合并模式:enrichInput1(丰富输入 1 的数据)

3.2 数据重组

节点名称: Makes Latency and Loss Filterable

功能说明:

  • 重新组织数据结构,使延迟和丢包数据更易于筛选和分析
  • 提取 5 个时间序列数据点:
    • TS0-LossTS4-Loss:5 个时间点的丢包率
    • TS0-LatencyTS4-Latency:5 个时间点的延迟
  • 保留网络名称、序列号、URL 等元数据

3.3 计算平均值

节点名称: Average Latency & Loss over 5m

功能说明:

  • 使用 JavaScript 代码计算最近 5 个时间点的平均值
  • 计算两个关键指标:
    • AverageLoss:平均丢包率
    • AverageLatency:平均延迟(毫秒)
  • 这些平均值用于更准确地识别性能问题

代码逻辑:

// 计算 5 个时间点的总丢包率和总延迟
// 除以 5 得到平均值
// 将结果添加到数据项中

3.4 筛选有问题的站点

节点名称: Filters Problematic sites

功能说明:

  • 使用 JavaScript 代码筛选超过阈值的站点
  • 阈值标准:
    • 平均延迟 > 300 毫秒
    • 平均丢包率 > 2%
  • 只有满足任一条件的站点会被传递到下一步

筛选逻辑:

// 如果 AverageLatency > 300 或 AverageLoss > 2
// 则该站点被标记为有问题

4. 告警去重与通知阶段

4.1 检查告警是否已存在

节点名称: Check if Alert Exists

功能说明:

  • 查询 Redis 数据库,检查该网络是否已经发送过告警
  • 使用网络名称作为键值
  • 如果键存在,说明已发送过告警(在 TTL 时间内)

4.2 创建响应数据

节点名称: Create Response

功能说明:

  • 使用 JavaScript 处理 Redis 的查询结果
  • 将结果转换为可用的布尔值或标识
  • 判断是否需要发送新的告警

4.3 合并去重

节点名称: Merge

功能说明:

  • 合并有问题的站点和已存在告警的数据
  • 匹配字段:NetworkName
  • 合并模式:保留所有不匹配的项
  • 关键逻辑:如果网络名称匹配,说明告警已存在,不再发送;只有不匹配的(即新问题)才会继续

4.4 发送 Teams 消息

节点名称: Message Techs

功能说明:

  • 通过 Microsoft Teams Webhook 发送告警消息
  • 消息内容包括:
    • 网络名称
    • 平均延迟和丢包率数据
    • 网络 URL(超链接形式,可直接跳转到问题站点)
  • 通知技术团队有站点超过性能阈值

4.5 记录告警日志

节点名称: Log the Alert

功能说明:

  • 将告警记录到 Redis 数据库
  • 设置 TTL(生存时间)为 3 小时
  • 防重复逻辑:如果同一站点的问题在 3 小时内未解决,3 小时后会再次发送告警

5. 辅助说明节点

工作流中包含多个 Sticky Note(便签)节点,提供详细的使用说明:

  • Sticky Note3:解释如何配置 Meraki API 认证
  • Sticky Note4:说明数据合并和统计计算的逻辑
  • Sticky Note5:详细说明告警去重机制和通知流程
  • Sticky Note6:建议其他使用场景(如集成 PSA 工具创建工单)

工作流程图

[触发器] → [获取组织] → [整理组织数据] → [获取网络ID] → [整理网络数据]
                ↓                                                    ↓
          [获取上行链路数据] ----------------------------------------→ [合并数据]
                                                                        ↓
                                                        [重组延迟丢包数据]
                                                                        ↓
                                                           [计算5分钟平均值]
                                                                        ↓
                                                          [筛选有问题的站点]
                                                                        ↓
                                            [检查告警是否存在] ← → [去重合并]
                                                    ↓                   ↓
                                            [创建响应] ----------------→ [发送Teams消息]
                                                                        ↓
                                                                 [记录告警日志]

关键技术要点

1. API 认证

2. 性能阈值

  • 延迟阈值:300 毫秒
  • 丢包阈值:2%
  • 这些阈值可根据实际需求调整

3. 告警防重复机制

  • 使用 Redis 存储已发送的告警
  • TTL 设置为 3 小时
  • 在 TTL 期内不会重复发送相同站点的告警

4. 数据处理方式

  • 采集最近 5 个时间点的数据
  • 计算平均值以减少瞬时波动的影响
  • 使用 JavaScript 代码节点进行复杂的数据处理和筛选

使用场景

  1. 网络性能监控:持续监测 Meraki 网络的延迟和丢包情况
  2. 主动告警:在性能下降时自动通知技术团队
  3. 故障排除:提供网络 URL 直达链接,快速定位问题
  4. 告警管理:防止告警轰炸,3 小时内只发送一次告警

扩展建议

根据 Sticky Note6 的说明,可以进行以下扩展:

  1. 集成 PSA 系统:将 Teams 消息节点替换为 PSA 工具节点(如 ConnectWise Manage),自动创建工单而非仅发送消息
  2. 多通道通知:除了 Teams,还可添加邮件、Slack 等通知渠道
  3. 自定义阈值:为不同网络设置不同的性能阈值
  4. 历史数据存储:将监控数据存入数据库,用于长期分析和趋势预测

总结

这是一个完整的网络监控自动化工作流,充分利用了 n8n 的以下能力:

  • HTTP 请求集成外部 API
  • 数据转换和处理(Set、Code 节点)
  • 数据合并(Merge 节点)
  • 条件筛选和逻辑判断
  • 外部通知(Teams Webhook)
  • 数据持久化(Redis)

通过自动化监控和智能告警,显著提高了网络运维效率,减少了手动检查的工作量。