# 第 11 部分回顾 · 可观测的通话

> 第 11 部分讲了两大观测支柱——getStats 快照与 RtcEventLog 黑匣子。这一章串起它们的配合闭环，并补上另外几件调试利器：RTC_LOG 日志、field trials 实验开关、metrics 直方图，以及 chrome：//webrtc-internals 一站式面板。

- 作者：David（道雾轩）
- 专栏：音视频与 WebRTC 详解（https://daiw.org/manual/webrtc.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/webrtc/observability-recap
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 第 11 部分回顾 · 可观测的通话

[第 11 部分](https://daiw.org/manual/webrtc/observability-overview)把“[看不见的通话怎么调试](https://daiw.org/manual/webrtc/observability-overview)”讲清了。这一章串起两大支柱的配合，并补上几件本部分没细讲、但实战常用的调试利器，然后收尾。

## 两支柱回顾

| 支柱 | 是什么 | 用于 |
| --- | --- | --- |
| [getStats / RTCStatsReport](https://daiw.org/manual/webrtc/stats-report) | [W3C 标准](https://daiw.org/manual/webrtc/stats-report)的实时指标快照，[跨线程收集 + 缓存](https://daiw.org/manual/webrtc/stats-collection) | 线上**监控**、质量告警 |
| [RtcEventLog](https://daiw.org/manual/webrtc/rtc-event-log) | 逐事件二进制黑匣子，[可视化回放](https://daiw.org/manual/webrtc/event-log-visualizer) | 深挖**具体问题**的根因 |

它们的**配合闭环**是 WebRTC 排障的标准动作：[持续 `getStats` 监控](https://daiw.org/manual/webrtc/stats-report) → 发现异常通话 → [抓 `RtcEventLog`](https://daiw.org/manual/webrtc/rtc-event-log) → [`event_log_visualizer` 看波形](https://daiw.org/manual/webrtc/event-log-visualizer)、[沿时间轴找“谁先动”](https://daiw.org/manual/webrtc/event-log-visualizer) → [跳到对应子系统源码](https://daiw.org/manual/webrtc/reading-the-source)。**监控发现、黑匣子定位。**

## 另外几件利器

除了两大支柱，`rtc_base` 和引擎还提供了几样常用的调试 / 调优手段：

<Callout type="info">
  **实战中还会用到这几件：**

  - **`RTC_LOG(sev)`**(`rtc_base/logging.h`)—— WebRTC 的[日志宏](https://daiw.org/manual/webrtc/reading-the-source)，按严重级（`LS_VERBOSE`/`LS_INFO`/`LS_WARNING`/`LS_ERROR`）输出。变体丰富：`RTC_LOG_F`（带函数名）、`RTC_LOG_T`（带 `this` 指针）、`RTC_LOG_IF`（条件日志）。读源码时，`RTC_LOG` 出现处往往是[开发者认为“值得关注”的关键节点](https://daiw.org/manual/webrtc/reading-the-source)——顺着它们能快速找到一条流程的骨架。
  - **field trials**(`field_trials_view.h`)—— WebRTC 的[实验 / 开关机制](https://daiw.org/manual/webrtc/reading-the-source)，用 `WebRTC-Xxx/Enabled/` 这样的字符串**在不改代码的前提下切换行为 / 调参数**（如换某个[拥塞控制变体](https://daiw.org/manual/webrtc/loss-based-bwe)、调某个阈值）。大量[实验性特性](https://daiw.org/manual/webrtc/reading-the-source)藏在 field trial 后面——你在源码里看到 `field_trials.IsEnabled("WebRTC-...")` 就是一个可调的旋钮。
  - **metrics 直方图**（`include/metrics.h`，`RTC_HISTOGRAM_*`）—— 把[关键指标](https://daiw.org/manual/webrtc/stats-report)聚合成直方图上报，用于**大盘统计**（比如“[所有通话的连接建立耗时分布](https://daiw.org/manual/webrtc/ice-overview)”），和 [per-call 的 getStats](https://daiw.org/manual/webrtc/stats-report) 互补。
  - **`chrome://webrtc-internals`** —— Chrome 内置的**一站式面板**：实时看[所有 `getStats` 指标随时间变化](https://daiw.org/manual/webrtc/stats-report)的曲线、一键 [dump `RtcEventLog`](https://daiw.org/manual/webrtc/rtc-event-log)。做 Web 端 WebRTC 开发，这是你**最先该打开**的页面。
</Callout>

## 观测的意义：让引擎“自证”

回头看整个第 11 部分，它体现了 WebRTC 一个深层的工程理念：

<Callout type="info">
  **一个[跑在无数不可控环境](https://daiw.org/manual/webrtc/what-is-webrtc)、[跨十几个子系统](https://daiw.org/manual/webrtc/call-recap)的实时引擎，必须能“**自证**”——在运行时[吐出足够的数据](https://daiw.org/manual/webrtc/observability-overview)，让工程师事后无需复现就能还原“当时发生了什么”。** 这不是[事后补的功能](https://daiw.org/manual/webrtc/observability-overview)，而是[从设计之初就编织进引擎](https://daiw.org/manual/webrtc/rtc-event-log)的能力：[每条流水线关键处埋了 stats](https://daiw.org/manual/webrtc/stats-collection)、[每个重要决策记进 event log](https://daiw.org/manual/webrtc/rtc-event-log)、[热点函数点了 `RTC_LOG`](https://daiw.org/manual/webrtc/reading-the-source)。**可观测性是实时系统的一等公民**——这也是为什么本教程要专辟一部分讲它：不懂观测，你能读懂 WebRTC 怎么工作，却修不了它在真实世界里出的毛病。
</Callout>

## 我们走到了哪

至此，本教程覆盖了：**[核心引擎](https://daiw.org/manual/webrtc/call-recap)**（第 0~9 部分）、**[支撑地基](https://daiw.org/manual/webrtc/rtc-base-recap)**（第 10 部分）、**观测与调试**（第 11 部分）。只剩最后一块——这套 C++ 引擎[怎么落到各个平台](https://daiw.org/manual/webrtc/what-is-webrtc)（Android / iOS / 桌面），以及全专栏的收尾。这是[第 12 部分](https://daiw.org/manual/webrtc/platform-overview)。

## 小结与下一部分

**第 11 部分**用两大支柱让通话可观测：**[getStats 快照](https://daiw.org/manual/webrtc/stats-report)**（监控）+ **[RtcEventLog 黑匣子](https://daiw.org/manual/webrtc/rtc-event-log)**（定位），配合成[发现→定位→修](https://daiw.org/manual/webrtc/event-log-visualizer)的排障闭环。另有 **[`RTC_LOG`](https://daiw.org/manual/webrtc/reading-the-source)**（日志）、**[field trials](https://daiw.org/manual/webrtc/reading-the-source)**（实验开关）、**[metrics 直方图](https://daiw.org/manual/webrtc/stats-report)**（大盘）、**`chrome://webrtc-internals`**（一站式面板）几件利器。背后是“[实时引擎必须能自证](https://daiw.org/manual/webrtc/observability-overview)”的理念——[可观测性是一等公民](https://daiw.org/manual/webrtc/rtc-event-log)。

引擎、地基、观测俱全，最后一部分看这套引擎[怎么落到 Android / iOS / 桌面](https://daiw.org/manual/webrtc/what-is-webrtc)，并为全专栏收尾。👉 [第 12 部分 · 平台集成与收尾](https://daiw.org/manual/webrtc/platform-overview)。

## 参考资料

- [1] libwebrtc 源码.`rtc_base/logging.h`（`RTC_LOG`）、`api/field_trials_view.h`、`system_wrappers/include/metrics.h`。
- [2] Chrome `chrome://webrtc-internals`（实时 stats + event log dump）。
- [3] 本部分各章：[总览](https://daiw.org/manual/webrtc/observability-overview)、[stats 报告](https://daiw.org/manual/webrtc/stats-report)、[stats 收集](https://daiw.org/manual/webrtc/stats-collection)、[event log](https://daiw.org/manual/webrtc/rtc-event-log)、[可视化](https://daiw.org/manual/webrtc/event-log-visualizer)。
