新浪CDN监控实践:基于夜莺+VictoriaMetrics监控数千台边缘节点

新浪CDN技术团队 2026-02-28 09:23:47

分享者:新浪CDN技术团队,负责为公司内部各业务线(微博、新浪新闻、新浪视频等)提供内容分发网络服务。

业务介绍

为了更好的管理CDN服务,我司建立了CDN边缘服务管理平台,这个平台包含的核心功能是:

  • 设备管理: 管理全国数千台CDN边缘节点服务器
  • 域名调度: 实现智能DNS调度,根据用户地理位置、运营商、服务器负载等因素进行流量分配
  • 配置下发: 通过Puppet自动化工具批量下发配置到边缘节点
  • 内容管理: 处理内容刷新、预热等CDN核心功能
  • 热点事件保障: 针对重大活动(如春晚、体育赛事等)提供专项保障
  • 监控告警: 实时监控服务状态和性能指标

其中监控告警部分,我们是基于夜莺监控实现的。本文介绍选型思考、监控架构、落地实践的一些经验等。

监控选型

我们对监控部分的核心诉求是:

高并发写入:需要监控数千台边缘节点服务器,另外CDN业务涉及带宽、请求量、命中率、回源率等多维度指标,需要监控系统支持高并发写入、鲁棒高可靠的集群能力。

多团队协作:我们会有多个团队使用这套系统,希望支持权限划分,支持功能角色、数据权限等,让各个团队自助操作,而不是有啥事都来找我们。

运维联动难:监控系统与CDN边缘服务管理平台,需要联动,监控系统需要提供各类 API,有些自定义逻辑要支持插入告警事件处理流里,否则就太过割裂了。

灵活告警: 支持复杂的告警规则,至少要同时支持指标和日志的告警配置,要支持多种通知渠道,并且支持我们自定义通知渠道,和内部渠道贯通。

我们调研了以下监控方案:

方案 优点 缺点 评分
Zabbix 成熟稳定,功能全面 性能瓶颈,UI体验差,不支持Prometheus生态 6/10
Prometheus + Grafana 云原生,生态丰富 告警能力弱,多租户支持差,长期存储成本高 7/10
云厂商监控 开箱即用,无需运维 成本高,数据不可控,定制化困难 5/10
夜莺 v8 开源免费,性能优秀,告警强大,易于集成 社区相对较小,团队研发来自 Open-Falcon,倒也积累了10多年了 9/10

在时序数据库的选择上,我们对比了Prometheus、InfluxDB、VictoriaMetrics等方案,最终选择VictoriaMetrics,我在夜莺资深用户群里观察,其他公司大都也是使用 VictoriaMetrics,确实很强,供新用户选型参考:

特性 Prometheus VictoriaMetrics 我们的选择
压缩率 一般 优秀(10倍压缩) ✅ VM
查询性能 优秀 ✅ VM
长期存储 需要额外方案 原生支持 ✅ VM
资源占用 较高 ✅ VM
集群模式 复杂 简单 ✅ VM
兼容性 原生 完全兼容 ✅ VM

架构介绍

夜莺在我们的体系里,当做一个后端服务对待,在 CDN 管理平台中通过 API 调用夜莺。我们直接使用二进制部署夜莺,只有一个二进制,使用 systemd 托管。

┌─────────────────────────────────────────────────────────────┐
│                        业务系统层                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ CDN管理平台   │  │   Puppet     │  │   其他业务    │      │
│  │  (Go服务)     │  │  (配置管理)   │  │              │      │
│  └──────┬───────┘  └──────────────┘  └──────────────┘      │
│         │ API调用(标签管理、告警屏蔽等)                        │
└─────────┼────────────────────────────────────────────────────┘
          │
┌─────────▼────────────────────────────────────────────────────┐
│                      夜莺监控层                                │
│  ┌──────────────────────────────────────────────────────┐   │
│  │              Nightingale v8 Server                    │   │
│  │  - Web UI (告警规则、大盘、监控对象管理)                │   │
│  │  - API Server (RESTful API)                          │   │
│  │  - Alert Engine (告警引擎)                            │   │
│  │  - Business Group (业务组管理)                        │   │
│  └────────────────┬─────────────────────────────────────┘   │
│                   │                                          │
│  ┌────────────────▼─────────────────────────────────────┐   │
│  │           VictoriaMetrics (时序数据库)                 │   │
│  │  - Remote Write (接收categraf数据)                    │   │
│  │  - PromQL查询 (提供查询服务)                          │   │
│  │  - 高压缩存储 (10倍压缩率)                             │   │
│  │  - 长期存储 (支持数月甚至数年)                         │   │
│  └──────────────────────────────────────────────────────┘   │
└──────────────────────────────────────────────────────────────┘
          ▲
          │ Remote Write (Prometheus协议)
          │
┌─────────┴────────────────────────────────────────────────────┐
│                      采集器层                                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│  │Categraf  │  │Categraf  │  │Categraf  │  │Categraf  │    │
│  │ (节点1)   │  │ (节点2)   │  │ (节点3)   │  │ (节点N)   │    │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘    │
│       │             │             │             │            │
│  ┌────▼─────────────▼─────────────▼─────────────▼────────┐  │
│  │  采集插件: CPU、内存、磁盘、网络、进程、自定义指标等      │  │
│  └──────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘
          ▲
          │ 心跳上报
          │
┌─────────┴────────────────────────────────────────────────────┐
│                    监控对象(Targets)                           │
│  数千台CDN边缘节点服务器                                        │
│  - 标签: idc、region、cluster、role等                          │
│  - 自动注册到夜莺                                              │
└──────────────────────────────────────────────────────────────┘

Categraf 需要在所有机器安装部署,涉及批量安装管理的问题,我们之前已经有 Puppet 做配置管理,继续使用 Puppet 安装管理 Categraf。Puppet模块结构:

console-puppet/modules/categraf/
├── files/          # 静态文件
├── manifests/      # Puppet配置清单
│   └── init.pp
└── templates/      # 配置模板
    └── config.toml.erb

Categraf配置要点:

  • hostname配置: 使用服务器FQDN作为唯一标识
  • 采集间隔: 15秒
  • Remote Write地址: 指向夜莺的指标写入端点
  • 认证配置: Basic Auth用户名和密码
  • 心跳上报: 启用心跳功能,自动注册监控对象
  • 日志配置: 日志路径、轮转策略

批量部署流程:

  1. 在Puppet Master上更新categraf模块
  2. 通过Puppet Agent自动分发到所有节点
  3. Categraf自动启动并开始采集
  4. 通过心跳机制自动注册到夜莺

CDN管理平台集成夜莺

CDN 管理平台使用 API 操作夜莺,典型的操作和设计要点如下:

  1. 监控对象自动化管理
    • 服务器上线时自动注册到夜莺
    • 自动绑定到对应的业务组
    • 自动打标签(IDC、集群、角色等)
    • 服务器下线时自动删除或标记
  2. 告警自动化屏蔽
    • 服务器下线时自动创建告警屏蔽规则
    • 服务器上线时自动取消屏蔽
    • 计划性维护时批量屏蔽告警
    • 维护结束后自动恢复告警
  3. 标签动态管理
    • 根据服务器属性自动生成标签
    • 标签格式: key=value
    • 常用标签: idc、cluster、role、region、isp等
    • 支持标签的增删改查
  4. 告警事件查询
    • 查询指定服务器的历史告警
    • 查询指定时间范围的告警
    • 支持按告警级别、状态过滤
    • 用于故障分析和统计
  5. 异步队列处理
    • CDN管理平台调用夜莺操作时,通过异步队列处理,避免阻塞主业务流程
    • 支持失败重试机制
    • 记录操作日志便于追踪

通过CDN管理平台与夜莺的深度集成,实现了完整的自动化运维闭环:

服务器上线 
  → 自动注册到夜莺 
  → 自动打标签(idc、cluster、role等) 
  → 自动绑定业务组
  → 开始监控
  → 触发告警
  → 自动执行修复脚本
  → 自动恢复
服务器下线 
  → 自动屏蔽告警 
  → 自动解绑业务组 
  → 自动删除或标记监控对象

我们会继续深入使用夜莺,并积极参与社区建设,贡献我们的实践经验。希望这篇案例能够帮助更多的团队了解和使用夜莺监控系统。

夜莺项目开源地址:https://github.com/ccfos/nightingale 欢迎收藏。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
开源项目