Grafana 仪表盘最佳实践
本节提供了关于中级 Grafana 管理员和用户构建及维护 Grafana 仪表盘的最佳实践信息。
有关您可以创建的不同类型仪表盘的更多信息,请参阅Grafana 仪表盘:您可以构建的所有不同类型仪表盘的完整指南。
常见的可观测性策略
当您有大量内容需要监控时,例如服务器场,您需要一个策略来决定哪些内容足够重要值得监控。本页描述了几种选择监控内容的常见方法。
一个合乎逻辑的策略可以帮助您创建统一的仪表盘,并更容易地扩展您的可观测性平台。
使用指南
- USE 方法告诉您机器的健康状况,RED 方法告诉您用户的满意度。
- USE 报告问题的起因。
- RED 报告用户体验,更可能报告问题的症状。
- 警报的最佳实践是对症状而非起因进行警报,因此应在 RED 仪表盘上进行警报。
USE 方法
USE 代表
- 利用率 (Utilization) - 资源繁忙的百分比时间,例如节点 CPU 使用率
- 饱和度 (Saturation) - 资源需要完成的工作量,通常指队列长度或节点负载
- 错误 (Errors) - 错误事件的计数
此方法最适用于基础设施中的硬件资源,例如 CPU、内存和网络设备。更多信息请参阅USE 方法。
RED 方法
RED 代表
- 速率 (Rate) - 每秒请求数
- 错误 (Errors) - 失败的请求数
- 持续时间 (Duration) - 这些请求花费的时间,延迟测量值的分布
此方法最适用于服务,尤其是微服务环境。对于您的每个服务,应插桩代码以暴露每个组件的这些指标。RED 仪表盘适用于警报和 SLA。设计良好的 RED 仪表盘是用户体验的代理。
更多信息请参阅 Tom Wilkie 的博文RED 方法:如何对您的服务进行插桩。
四大黄金信号
根据Google SRE 手册,如果您只能测量用户面向系统的四个指标,请关注这四个指标。
此方法与 RED 方法类似,但它包括饱和度。
- 延迟 (Latency) - 处理请求所花费的时间
- 流量 (Traffic) - 系统承受的需求量
- 错误 (Errors) - 失败请求的速率
- 饱和度 (Saturation) - 系统“饱和”程度
仪表盘管理成熟度模型
仪表盘管理成熟度指的是您的仪表盘生态系统的设计和效率水平。建议您定期审查您的仪表盘设置,以评估您所处的位置以及如何改进。
一般来说,仪表盘成熟度可以定义为低、中或高。
本主题的大部分内容摘自 KubeCon 2019 的演讲为睡眠不足的 Oncall 人员打造傻瓜式 Kubernetes 仪表盘。
低级 - 默认状态
在此阶段,您没有连贯的仪表盘管理策略。几乎所有人都从这里开始。
您如何知道您处于此阶段?
- 每个人都可以修改您的仪表盘。
- 大量复制的仪表盘,仪表盘复用很少或根本没有。
- 一次性创建但永远不会被清理的仪表盘。
- 没有版本控制(仪表盘 JSON 在版本控制中)。
- 大量浏览仪表盘,搜索正确的仪表盘。这意味着浪费大量时间来寻找您需要的仪表盘。
- 没有任何警报指引您到正确的仪表盘。
中级 - 有条理的仪表盘
在此阶段,您开始使用有条理的仪表盘管理您的仪表盘使用。您可能已经制定了一个策略,但仍有一些地方可以改进。
您如何知道您处于此阶段?
通过使用模板变量防止蔓延。例如,您不需要为每个节点单独创建一个仪表盘,您可以使用查询变量。更好的是,您还可以将数据源设为模板变量,这样您就可以在不同的集群和监控后端重复使用同一个仪表盘。
如果您想要一些想法,请参阅变量示例列表。
根据可观测性策略创建有条理的仪表盘。
带有下钻到下一层级的层次化仪表盘。
使用下钻的示例 仪表盘设计反映了服务层次结构。下面所示的示例使用 RED 方法(左侧显示请求和错误率,右侧显示延迟持续时间),每个服务占一行。行的顺序反映了数据流。
服务层次结构示例 同类比较:当量级差异较大时,拆分服务仪表盘。确保汇总指标不会淹没重要信息。
使用有意义的颜色并尽可能标准化坐标轴的表达性图表。
- 有意义的颜色示例:蓝色表示正常,红色表示异常。阈值可以帮助实现这一点。
- 标准化坐标轴的示例:比较 CPU 使用率时,使用百分比而不是原始数值进行度量,因为机器可能拥有不同数量的核。按核数标准化 CPU 使用率可以降低认知负担,因为观看者可以相信 100% 表示所有核都在使用,而无需知道 CPU 的数量。
定向浏览减少“猜测”。
- 模板变量使得随机或漫无目的地“只是浏览”变得更困难。
- 大多数仪表盘应由警报链接。
- 使用链接进行定向浏览。更多信息请参阅管理仪表盘链接。
版本控制的仪表盘 JSON。
高级 - 优化使用
在此阶段,您已经通过一致且周到的策略优化了仪表盘管理的使用。这需要维护,但结果是值得的。
- 积极减少蔓延。
- 定期审查现有仪表盘,确保它们仍然相关。
- 只有经批准的仪表盘才添加到主仪表盘列表。
- 跟踪仪表盘使用情况。如果您是 Enterprise 用户,可以利用使用洞察功能。
- 设计上保持一致性。
- 使用脚本库生成仪表盘,确保模式和风格的一致性。
- grafonnet (Jsonnet)
- grafanalib (Python)
- 不在浏览器中编辑。仪表盘查看者使用变量更改视图。
- 浏览仪表盘是例外,不是常态。
- 在专门用于实验和测试的独立 Grafana 实例中进行实验和测试,而不是您的生产实例。当测试环境中的仪表盘被证明有用时,再将其添加到您的主要 Grafana 实例中。
创建仪表盘的最佳实践
本页概述了创建 Grafana 仪表盘时应遵循的一些最佳实践。
开始之前
在创建仪表盘之前,这里有一些原则需要考虑。
仪表盘应讲述一个故事或回答一个问题
您想通过仪表盘讲述什么样的故事?尝试创建一个逻辑性的数据进展,例如从大到小或从一般到具体。这个仪表盘的目标是什么?(提示:如果仪表盘没有目标,那么问问自己是否真的需要这个仪表盘。)
保持图表简单,专注于回答您提出的问题。例如,如果您的目的是“哪些服务器出现问题了?”,那么您可能不需要显示所有服务器数据。只需显示出现问题的服务器的数据即可。
仪表盘应该减少认知负担,而不是增加它
认知负担基本上是指您需要思考多少才能理解某件事。让您的仪表盘易于理解。其他用户以及未来的您(当您在凌晨 2 点尝试找出问题时)会感谢您。
问问自己
- 我能确切地知道每个图表代表什么吗?是显而易见的,还是我需要思考?
- 如果我把它展示给其他人,他们需要多久才能理解?他们会迷失方向吗?
制定监控策略
创建新的仪表盘很容易。优化仪表盘创建并遵循计划则更难,但这值得付出努力。这个策略应该指导您的整体仪表盘方案,并强制执行个体仪表盘设计的一致性。
更多信息请参阅常见的可观测性策略和仪表盘管理成熟度级别。
写下来
一旦您有了策略或设计指南,请将它们写下来,以便随着时间的推移保持一致性。查看这个Wikimedia 运行手册示例。
应遵循的最佳实践
- 创建新仪表盘时,确保它具有有意义的名称。
- 如果您创建仪表盘是为了试用或实验,请在名称中加上
TEST
或TMP
。 - 考虑在仪表盘名称中或作为标签包含您的姓名或缩写,以便人们知道谁拥有该仪表盘。
- 使用完临时实验仪表盘后将其移除。
- 如果您创建仪表盘是为了试用或实验,请在名称中加上
- 如果您创建了许多相关的仪表盘,考虑如何进行交叉引用以便于导航。更多信息请参阅管理仪表盘的最佳实践。
- Grafana 从数据源检索数据。对数据源的总体理解以及对您特定数据源的理解非常重要。
- 避免不必要的仪表盘刷新,以减少网络或后端的负载。例如,如果您的数据每小时才变化一次,那么您不需要将仪表盘刷新率设置为 30 秒。
- 显示具有不同单位或范围的时序数据时,使用左右 Y 轴。
- 向仪表盘和面板添加文档。
- 要向仪表盘添加文档,向仪表盘添加一个文本面板可视化。记录仪表盘的目的、有用的资源链接以及用户与仪表盘交互可能需要的任何说明。查看这个Wikimedia 示例。
- 要向面板添加文档,编辑面板设置并添加描述。任何您添加的文本都会在您将光标悬停在面板左上角的小
i
上时出现。
- 通过使用模板和变量复用您的仪表盘并保持一致性。
- 堆叠图表数据时要小心。可视化可能具有误导性,并隐藏重要数据。建议在大多数情况下关闭此功能。
管理仪表盘的最佳实践
本页概述了管理 Grafana 仪表盘时应遵循的一些最佳实践。
开始之前
在开始管理仪表盘之前,这里有一些原则需要考虑。
战略性可观测性
有几种常见的可观测性策略。您应该研究它们,并决定其中一种是否适合您,或者您是否想出自己的策略。无论如何,制定一个计划,写下来,并坚持执行。
根据需要调整您的策略以适应不断变化的需求。
成熟度级别
您的仪表盘成熟度级别是多少?分析您当前的仪表盘设置,并将其与仪表盘管理成熟度模型进行比较。了解您所处的位置可以帮助您决定如何达到您希望的目标。
应遵循的最佳实践
- 避免仪表盘蔓延,即仪表盘不受控制的增长。仪表盘蔓延会对找到正确仪表盘的时间产生负面影响。复制仪表盘并更改“一件事”(更糟糕的是:保留原始标签)是最容易导致蔓延的方式。
- 定期审查仪表盘并移除不必要的。
- 如果您创建临时仪表盘(例如用于测试),请在其名称前加上
TEST:
。完成后删除该仪表盘。
- 复制没有重大更改的仪表盘不是一个好主意。
- 您会错过原始仪表盘的更新,例如文档更改、错误修复或指标添加。
- 在许多情况下,复制仪表盘只是为了通过设置模板参数来定制视图。这应该通过维护到主仪表盘的链接并使用URL 参数来定制视图来实现。
- 当您必须复制仪表盘时,请明确重新命名,并且不要复制仪表盘标签。标签是仪表盘的重要元数据,在搜索时使用。复制标签可能导致错误匹配。
- 维护一个仪表盘列表(仪表盘的仪表盘)或交叉引用仪表盘。这可以通过几种方式实现