前言
本系列是对 www.datadoghq.com/blog/timese… 的翻译,介绍可视化领域的一些实用理念。
正文
这是关于可视化监控数据系列文章的第一篇。本篇文章聚焦于时间序列图表。
可观测性不仅仅是拥有监控数据——这些数据必须易于获取和解释。为数据选择合适的可视化表达是提供系统健康和性能的可读性表示的重要部分。没有一刀切的解决方案:使用不同的图表类型可以从相同的指标中看到不同的内容。
为了帮助你有效地可视化你的指标,本篇文章探讨了四种不同的时间序列图,这些图在x轴上表示时间,在y轴上表示指标值:
- 线性图表
- 堆叠面积图
- 柱状图
- 热图
对于每种图表类型,我们将解释其工作原理、何时使用它,以及何时使用其他类型。
线性图表
线性图是将指标数据转换为可视化的最简单方法,但通常它们被默认使用,当事实上有其他图表更为合适时也是如此。例如,来自数百个主机的剧烈波动的指标容易变得像钢丝绒一样缠绕不清。从这样的图表中几乎不可能得出任何有用的结论。
何时使用线性图表
| 情形 | 目的 | 示例 |
|---|---|---|
| 不同范围报告的相同指标 | 一目了然地找到异常值 | 集群中每个主机的空闲CPU |
| 追踪单一来源或聚合的单一指标 | 清楚地传达关键指标随时间的演变 | 所有Web服务器的中值响应时间 |
| 来自特定基础设施切片的未聚合值特别有价值的指标 | 找到个体偏离不可接受范围 | 每个数据库节点的磁盘利用率 |
| 共享相同单位的相关指标 | 找到系统内的相关性 | 同一台机器上的磁盘读写延迟 |
| 有明确可接受领域的指标 | 轻松找到不可接受的降级 | 处理Web请求的延迟 |
何时使用其他类型
| 情形 | 示例 | 使用其他类型... |
|---|---|---|
| 来自大量来源的高度可变指标 | 所有主机的CPU使用率 | 使用热图使噪音数据更具可解释性 |
| 更适合作为聚合结果而非独立数据点的指标 | 数十个Web服务器每秒请求数 | 使用堆叠面积图对标记组进行聚合 |
| 通常为零的指标 | 跟踪相对稀少的S3访问错误的指标 | 使用柱状图避免跳跃性插值 |
堆叠面积图
面积图类似于线性图,只不过指标值用二维区域带表示,而不是线条。多个时间序列可以简单地通过堆叠这些区域带相加,但过多的区域带会使图表难以理解。如果每个带状只有一两个像素高,所传达的信息是微不足道的。
何时使用堆叠面积图
| 情形 | 目的 | 示例 |
|---|---|---|
| 来自不同范围的相同指标,堆叠显示 | 一目了然地查看总和及其每部分的贡献 | 每个可用区的负载均衡器请求数 |
| 相同单位的补充指标相加 | 查看有限资源的利用情况 | CPU利用率指标(用户、系统、空闲等) |
何时使用其他类型
| 情形 | 示例 | 使用其他类型... |
|---|---|---|
| 来自大量主机的未聚合指标,使得切片过薄,毫无意义 | 数百个应用服务器的吞吐量指标 | 使用线性图或实体颜色面积图跟踪总的聚合值 |
| 不能合理相加的指标 | 多个服务器的系统负载 | 使用线性图,或对于大量主机使用热图 |
柱状图
在柱状图中,每个柱代表一个时间间隔内的指标汇总值。这个特性使柱状图非常适合表示计数。与表示瞬时值的量表(gauge)指标不同,计数指标只有在与时间间隔配对时才有意义(例如,过去五分钟内有13个服务器错误)。
柱状图不需要插值来连接一个间隔到下一个,使得它们尤其适合表示稀疏的指标。像面积图一样,柱状图天然能够容纳指标的堆叠和求和。
何时使用柱状图
| 情形 | 目的 | 示例 |
|---|---|---|
| 稀疏指标(如跟踪罕见事件的指标) | 传达指标值,不出现跳跃或误导性插值 | Cassandra内部队列中的被阻塞任务 |
| 代表计数的指标(而不是量表) | 传达总数和相应的时间间隔 | 按数据中心(4小时间隔)失败的作业 |
何时使用其他类型
| 情形 | 示例 | 使用其他类型... |
|---|---|---|
| 不能合理相加的指标 | 每个负载均衡器的平均延迟 | 使用线性图隔离每个主机的时间序列 |
| 来自大量来源的未聚合指标,使得切片过薄,毫无意义 | 数十个Cassandra节点的已完成任务 | 使用实体颜色柱形图跟踪总的聚合指标值 |
热图
热图显示特定时间切片内的指标值分布。具体地说,每列代表特定时间切片内的值分布。每个单元格的阴影对应在特定时间内报告特定值的实体数量。
热图本质上是分布图,但热图显示的是随时间变化的分布,而分布图是某一窗口时间的快照。分布图将在系列文章的第二部分中介绍。
何时使用热图
| 情形 | 目的 | 示例 |
|---|---|---|
| 单个由大量组报告的指标 | 传达总体趋势 | 每个主机的Web延迟 |
| 看到群组成员的瞬时变化 | 每个主机收到的请求数 |
何时使用其他类型
| 情形 | 示例 | 使用其他类型... |
|---|---|---|
| 来自少量个体来源的指标 | 少量RDS实例的CPU利用率 | 使用线性图隔离每个主机的时间序列 |
| 更重要的是单个值的指标 | 每个Cassandra列族的磁盘利用率 | 使用面积图对标记集的值进行求和 |
结论
通过了解每种时间序列图的理想用途和局限性,可以更清楚地展示指标中的可操作信息,从而提供对系统的可观测性。
在系列文章的下一篇中,我们将探讨其他方法来绘图和监控指标,包括变化图、排序列表、分布图和其他可视化方式。