Yao Yue在QCon San Francisco的演讲中呼吁重新审视系统测量数据的呈现方式。线形图已成为大多数监控面板的默认形式,适用于干净且连续的数据;但当时间序列增多、噪声升高,或所要回答的问题本身与时间并无直接关系时,线形图的作用就会减弱。
Yue拥有15年大规模系统运营经验,其中7年是在一级服务轮班制中度过的;她此前还曾在Twitter工作,先后领导缓存团队并组建性能团队。2022年11月之后,她参与创办了IOP Systems。这是一家通过智能性能工程提升软件效率和可靠性的公司。
问题不在于线条本身
Yue解释说,线形图不仅展示测量点,还会在每两个相邻点之间绘制线条。这意味着它添加了数据中实际不存在的视觉元素,也就是她所说的外推(extrapolation),即在测量值之间进行推断。当数据规整时,这可能很有用;但它也可能暗示两个测量点之间存在一条我们并没有直接信息支持的轨迹,尤其对于我们不知道其间发生了什么的指标而言。
对于包含大量实例或时间序列的系统,这一问题会更加严重。大量线条和颜色可能让监控面板看起来信息丰富,但并不能让“生产速率是否发生变化?”或“新部署是否导致了明显恶化?”等问题的答案更加清晰。在许多情况下,只有经验丰富的工程师才能解释这类图表,并且需要长时间凝视细节。Yue认为,这种模式并不适合构建可依赖的工程系统。
根据测量数据的性质选择图形
演讲者建议从三个方面入手:数据的形状、测量的类型,以及团队希望从数据中了解什么。当数据过于拥挤时,可以使用时间窗口内的平均值,或计算最小值、最大值和平均值,以降低噪声并突出趋势。但这种转换必须服务于所要回答的问题,而不能只是为了美化图表。
Yue警告说,汇总数据可能会隐藏重要差异。她借用了“Datasaurus”的概念:不同的数据集可能拥有相同的平均值和标准差,但在绘制原始值时却呈现出截然不同的形状。因此,在某些情况下,不带线条地展示点可能更加诚实,因为它呈现的是实际测量值,而不会添加未经确认的视觉轨迹。
根据演讲内容,大多数测量数据可分为三种主要类型:计数器、瞬时量和直方图。随时间增长的计数器可能适合使用线条,但监控应用中通常展示的并不是原始计数器,而是相邻两个值之间的差值,例如请求速率或错误速率。Yue认为,将这一差值表示为线段或柱形,可能更准确地展示累积变化和波动。
至于瞬时量,两次读数之间的时间段并不能由它保证任何信息。数值可能在两次测量之间上升或下降,而这些变化不会出现在数据中。因此,演讲者更倾向于原样展示点,并尽可能减少外推。对于响应时间,她强调单个数值并不足够,因为响应时间代表的是一个分布,而不是一个孤立数字。直方图是保留尾部信息(例如P99和P99.9)的更好方式,而不是将其压缩成一条线。
实际会发生什么变化?
演讲中最重要的观点并不是要替换所有线形图,而是要让可视化方式与运营问题相匹配。如果问题是负载对服务级别协议的影响,可以按照负载范围对数据进行分组,例如每秒500个或5000个请求的范围,然后将其与响应时间分布关联起来。这样,图表就会直接呈现负载与响应时间之间的关系,而不必查看不同日期,寻找负载达到峰值的时刻。
同样,在比较两个软件版本时,可以按照版本对测量结果进行分组,然后比较分布或百分位数,而不必将时间作为主要分析轴。至于硬件类型的选择,可以将性能数据与版本类型、价格等其他信息结合起来,从而形成一个比较表,真正比较对容量规划决策重要的因素。
certi.news解读
这一观点揭示的不仅是视觉设计问题,也反映了监控工具架构的局限。测量数据存储系统通常一方面围绕指标名称及其属性构建,另一方面存储数值和时间戳。这使得查询某个值随时间的变化相对容易,却增加了将一个指标的值与另一个指标的值关联起来的难度,例如将响应时间与负载关联,或按软件版本比较性能。
在实践中,这意味着改进监控面板并不总是从选择新颜色或新图形开始,而应先确定它需要帮助完成什么决策。团队可能需要重新聚合数据,或整合时间序列数据库之外的数据源。同时,演讲也没有提供适用于所有人的单一方案;它强调,测量的类型和形状以及所要回答的问题,共同决定最合适的表示方式,而且原文并未证明当前所有监控工具都能自动提供这些转换。因此,对于可靠性团队和性能工程团队而言,可试验性、对原始数据的访问,以及理解每种汇总方式的局限,仍然是开放的实际问题。