跳转到内容

监控与运营

Monibuca V6 内置了全链路监控与运营分析体系,覆盖从单条流的码率帧率实时观测,到全站直播间的运营大盘。无需对接第三方监控系统,开箱即用。

维度能力说明
流级监控实时码率 / 帧率 / GOP 可视化逐帧波形图 + 历史趋势图
房间级分析发送端 ↔ 接收端配对分析码率、卡顿、丢包、分辨率全维度
直播运营大盘全站实时概览 + 7 日趋势开播数、观众、峰值、收入一目了然
告警与风险异常检测 + 风险分级零观众检测、卡顿率、丢包飙升
数据导出CSV 导出 + JSON API对接 BI 系统和自定义分析

Monibuca V6 的数据采集分为三个层级,各自承担不同职责:

graph LR
subgraph Client["客户端 SDK"]
HB["HeartbeatReport<br/>(周期上报)"]
LR["LeaveRoomReport<br/>(离房上报)"]
KV["KVReport<br/>(事件计数)"]
end
subgraph Server["Room Service"]
RS["ReportStorage"]
DB["SQLx 数据库"]
MEM["内存回退"]
end
HB -->|每数秒| RS
LR -->|离开时| RS
KV -->|事件触发| RS
RS --> DB
RS -.->|DB 不可用| MEM

客户端在房间内持续周期上报,是最核心的质量数据来源:

指标类别采集内容
视频码率(bps)、帧率(fps)、分辨率(W×H)、编解码器、已处理/丢弃帧数、卡顿次数与时长
音频码率(bps)、采样率、声道数、编解码器、音量电平
网络RTT(往返延迟)、码率、丢包率
设备终端类型、设备名称、操作系统版本、网络类型(WiFi/4G/5G)

每条心跳包含:

  • 上行(upstream):发布者自身的音视频指标
  • 下行(downstream)数组:每个订阅者的接收指标

数据存储在 report_heartbeats + report_heartbeat_downstream 表中,支持时间范围查询。

用户离开房间时提交完整会话快照

  • 房间 ID、用户 ID
  • 会话起止时间、在房时长(joining_duration_ms
  • 加入请求状态、退出指令时间
  • SDK 版本、设备信息
  • ClientJoinInfo 入房上下文快照

存储在 report_leave_rooms 表中,用于会话粒度的回溯分析。

以键值对形式记录标准化事件计数,覆盖 15+ 关键操作:

事件分组追踪内容
ENTER_ROOM / EXIT_ROOM进出房成功率、耗时
PUBLISH / SUBSCRIBE推/拉流成功率、耗时
START_AUDIO / START_VIDEO音视频开启成功率
ICE_CONNECTWebRTC ICE 连接成功率
SIGNAL_CHANNEL_SETUP信令通道建立耗时
START_MICROPHONE / START_CAMERA设备打开成功率
PING心跳往返耗时

每个事件组包含:尝试次数(attempt)、成功率(success_rate)、平均耗时(cost_ms)。


Admin 后台的流详情页提供对单条流的深度实时观测,是排查音视频质量问题的核心工具。

模式适用场景数据来源
历史统计(Stats)回溯分析趋势变化定期采样,ECharts 折线图
实时波形(Realtime)逐帧级别排查SSE 实时推送,SVG 波形图
  • 音频码率 + 帧率:kbps 折线叠加 fps 曲线
  • 视频码率 + 帧率:kbps 折线叠加 fps 曲线
  • 视频 GOP 趋势:GOP(Group of Pictures)大小变化
  • 下行码率分布:所有订阅者的总体下行码率

实时模式通过 SSE(Server-Sent Events) 逐帧推送数据,以 SVG 柱状图渲染:

  • 🔴 红色柱:视频关键帧(I 帧),柱高与帧大小成正比
  • 🔵 蓝色柱:普通视频帧(P/B 帧)
  • 支持暂停/恢复 SSE 流,便于截取特定时段数据

同时展示当前每个订阅者的实时状态:

指标说明
插件名 & 类型拉流协议来源
同步模式音视频同步策略
缓冲时间播放缓冲深度
已处理帧数音频/视频各自的累计帧数
丢帧数被丢弃的帧数量
迟到帧数晚到的帧数量
问题观察方式
推流端码率不足视频码率折线长期低于预期
关键帧间隔过大GOP 趋势图出现异常尖峰
订阅者卡顿订阅者丢帧数持续增长
编码器异常实时波形中出现连续小帧或 I 帧丢失

Admin 后台的房间分析页面向 QoS 排障和用户体验分析,支持对已结束的会话进行深入回溯。

  • 合并 leave_reports + heartbeat_reports 自动发现历史会话
  • 支持关键词搜索、用户数范围、日期范围筛选
  • 可导出会话列表为 CSV 文件

根据心跳上报模式自动识别用户角色:

角色识别依据
🎙 主播有上行推流数据
👁 观众仅有下行数据
🎧 坐席客服场景中的操作端
👤 访客客服场景中的用户端

UserBitratePanel 提供两种视角:

  • 发送端视角:查看用户上行码率随时间的变化
  • 接收端视角:查看该用户从各发送端接收的下行码率
  • 支持切换:全部指标 / 仅视频 / 仅音频

这是最强大的排障工具——PairDetailView 展示一对发送者与接收者之间的完整传输链路:

┌─────────┐ 网络链路 ┌─────────┐
│ 发送端 │ ──── 码率/帧率/丢包 ────▶ │ 接收端 │
│ │ │ │
│ 编码器 │ ◀──── RTT/丢包 ──── │ 解码器 │
│ 采集帧率 │ │ 播放帧率 │
│ 采集码率 │ │ 播放码率 │
└─────────┘ └─────────┘
分析维度发送端指标接收端指标
视频采集帧率、编码码率播放帧率、解码码率
视频质量分辨率(W×H)卡顿次数/时长、丢包率
音频采集音量、采样率播放音量、声道数
网络上行码率RTT、总码率、丢包率

所有图表通过 ECharts Group Sync 联动——拖动任一图表的时间轴,其余图表同步跟随,方便交叉对比。

在码率图上叠加关键事件标记:

  • 用户加入/离开
  • 推流开始/停止
  • 角色切换

Admin 后台的直播大盘面向运营人员和管理者,提供全站维度的实时概览和趋势分析。

指标说明
直播间总数全部房间数(含已结束)
当前开播状态为 Living 的房间数
全站在线观众所有房间观众总和
总点赞数当前累计点赞
礼物收入当前累计礼物价值
指标说明
今日开播场次当天新开直播数
今日开播房间当天去重房间数
今日累计用户进入过房间的去重用户数
峰值在线当天最高同时在线人数
总直播时长所有直播累计时长

以日为粒度展示以下指标的趋势变化:

  • 📈 开播场次趋势
  • 📈 累计用户趋势
  • 📈 峰值在线趋势

数据源自 report_live_daily_stats 表的每日聚合数据。

大盘提供三个分析 Tab:

  • 直播间列表:状态(准备中/直播中/暂停/已结束)、观众数、互动数据
  • 热度排行:基于 (观众数 × 3 + 点赞数) 的热度公式
  • 各状态房间数量分布
  • 异常检测:自动识别潜在问题房间
  • 风险分级:高/中/低/正常
  • 风险原因标注:卡顿率异常、码率骤降、零观众等
  • 支持按风险等级筛选
  • 监控覆盖率:被监控的房间占比
  • 健康率:流可用性健康度
  • 零观众检测:直播中但无人观看的房间
  • 数据保留策略:当前配置的数据保留天数

大盘以 10 秒间隔自动轮询,支持静默刷新(后台更新数据)和全量刷新(刷新 UI)两种模式,确保运营人员看到的数据始终是最新的。


除了 Room 服务内置的上报系统外,V6 还提供独立的 Report 插件用于流级别的实时指标聚合:

方法路径说明
POST/metrics提交指标上报
GET/rooms获取所有房间聚合指标
GET/metrics/{room_id}获取指定房间聚合指标
GET/metrics/{room_id}/{user_id}获取指定用户指标
GET/history/{room_id}获取房间历史指标
指标说明
在线用户数当前房间内用户
上行总码率所有发布者码率之和
下行总码率所有订阅者接收码率之和
平均帧率房间内发布者平均帧率
卡顿率出现卡顿的用户占比

数据保留窗口为 1 小时,每 5 分钟自动清理过期数据。


┌──────────────────┐
│ ReportStorage │
│ │
│ ┌────────────┐ │
│ │ SQLx Pool │──│──▶ report_heartbeats
│ │ (primary) │ │ report_heartbeat_downstream
│ └────────────┘ │ report_leave_rooms
│ │ │ report_kv
│ │ 失败 │ report_live_daily_stats
│ ▼ │
│ ┌────────────┐ │
│ │ In-Memory │ │
│ │ (fallback) │ │
│ └────────────┘ │
└──────────────────┘
  • 主存储:SQLx 异步数据库持久化,支持时间范围查询
  • 回退存储:数据库不可用时自动切换到内存 HashMap,保证数据不丢失
  • 写入通过 异步 mpsc 通道,不阻塞主业务线程
room:
live:
report_retention_days: 15 # 保留最近 15 天数据
# 0 = 永久保留
  • 后台清理任务定期运行,自动删除过期记录
  • Admin 日期选择器自动禁用超出保留期的日期

Room Service 内置了系统级性能指标采集(MetricsCollector),使用原子计数器实现无锁记录:

类别指标说明
API请求数、错误数、延迟(p50/p95/p99)HTTP 接口性能
WebSocket消息数、广播数信令通道负载
数据库查询数、延迟(p50/p95/p99)持久化性能
缓存命中数、未命中数、命中率缓存效率
系统内存使用、CPU、活跃任务数、运行时长资源占用

基于这些指标实时计算健康状态

状态含义
🟢 Healthy所有指标正常
🟡 Degraded部分指标超阈值,服务可用但需关注
🔴 Unhealthy关键指标异常,需立即处理

所有监控数据均可通过 HTTP JSON API 获取,方便对接外部 BI、告警、数据分析系统:

端点说明
GET /room_stats/{room_id}单房间详细统计(支持时间范围)
GET /all_room_stats全站聚合统计
GET /daily_stats每日趋势数据
POST /submit_report外部服务上报入口

Admin 后台支持将会话列表导出为 CSV 文件,便于离线分析和报告。


  1. 发现问题:在直播大盘的风险视角发现异常房间
  2. 定位房间:进入房间分析页,查看该房间的用户列表和角色
  3. 对比码率:使用码率分析面板,对比发送端和接收端数据
  4. 配对分析:选择具体的发送端-接收端配对,查看全维度指标
  5. 确认根因:通过事件时间轴关联问题发生时刻,判断是推流端、网络还是拉流端问题
  • 7 日趋势判断增长态势,评估运营活动效果
  • 峰值在线用于容量规划和服务器扩容依据
  • 热度排行发现优质主播,优化推荐策略
  • 零观众检测及时下架无人观看的直播间,优化资源分配

联系我们

微信公众号:不卡科技 微信公众号二维码
腾讯频道:流媒体技术 腾讯频道二维码
QQ 频道:p0qq0crz08 QQ 频道二维码
QQ 群:751639168 QQ 群二维码