

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 控制面板的最佳实践
<a name="v10-dash-bestpractices"></a>

****  
本文档主题专为支持 **Grafana 10.x 版本**的 Grafana 工作区而设计。  
有关支持 Grafana 版本 12.x 的 Grafana 工作空间，请参阅。[在 Grafana 版本 12 中工作](using-grafana-v12.md)  
对于支持 Grafana 9.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 9](using-grafana-v9.md)。  
对于支持 Grafana 8.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 8](using-grafana-v8.md)。

本节为 Grafana 管理员和用户提供了有关如何构建和维护 Grafana 控制面板的最佳实践。

有关您可以创建的不同类型的控制面板的信息，请参阅 Grafana Labs 网站上的博文 [Grafana 控制面板：您可以构建的不同类型的完整指南](https://grafana.com/blog/2022/06/06/grafana-dashboards-a-complete-guide-to-all-the-different-types-you-can-build/?pg=webinar-getting-started-with-grafana-dashboard-design-amer&plcmt=related-content-1)。

**注意**  
本节可帮助您制定监控和控制面板维护策略。您最了解自己的系统，因此应通过本节内容加强理解。归根结底，您有责任为自己的系统制定最佳实践。

## 常见可观测性策略
<a name="v10-dash-common-observability-strategies"></a>

如果需要监控的内容很多，比如服务器场，就需要有一个策略来决定哪些内容足够重要，需要监控。本页介绍了选择监控内容的几种常用方法。

通过逻辑策略，您可以创建统一的控制面板，并轻松扩展可观测性平台。

**策略指南**
+ 您可以通过 USE 方法了解计算机状况，通过 RED 方法了解用户是否满意。
+ USE 报告问题的原因。
+ RED 报告用户体验，并很有可能报告问题的症状。
+ 监视两者对于了解系统非常重要。最佳做法是注意症状而不是原因。通常，警报是在 RED 控制面板上配置的。

**USE 方法**

USE 代表：
+ **利用率**：资源繁忙的时间百分比，例如节点 CPU 使用率。
+ **饱和度**：资源必须完成的工作量，通常是队列长度或节点负载。
+ **错误**：错误事件计数。

这种方法最适合基础设施中的硬件资源，例如 CPU、内存和网络设备。有关更多信息，请参阅 Brendan Gregg 的博文 [USE 方法](http://www.brendangregg.com/usemethod.html)。

**RED 方法**

RED 代表：
+ **速率**：每秒请求数
+ **错误**：失败的请求数。
+ **持续时间**：这些请求花费的时间，延迟测量值的分布。

这种方法最适用于服务，尤其是微服务环境。对于每项服务，都要检测代码以便对每个组件公开这些指标。RED 控制面板非常适合警报和 SLA。精心设计的 RED 控制面板是用户体验的代名词。

有关更多信息，请参阅 Tom Wilkie 的博文 [RED 方法：如何检测服务](https://grafana.com/blog/2018/08/02/the-red-method-how-to-instrument-your-services)。

**四个黄金信号**

根据 [Google SRE 手册](https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/#xref_monitoring_golden-signals)，如果您只能衡量面向用户系统的四个指标，请重点关注这四个指标。

此方法与 RED 方法类似，但包括饱和度。
+ **延迟**：处理请求所花费的时间。
+ **流量**：对系统的要求。
+ **错误**：失败的请求率。
+ **饱和度**：系统是否满载。

## 控制面板管理成熟度模型
<a name="v10-dash-management-maturity-model"></a>

*控制面板管理成熟度*是指控制面板生态系统的完善程度和效率。建议您定期查看控制面板设置，以评估现状以及如何改进。

从广义上讲，控制面板成熟度可以定义为低、中或高。

 这个话题的大部分内容都取自 KubeCon 2019 年的演讲 [Fool-Proof Kubernetes Oncalls 仪表板](https://www.youtube.com/watch?v=YE2aQFiMGfY)。 Sleep-Deprived 

**低：默认状态**

在此阶段，您没有一致的控制面板管理策略。几乎每个人都从这里开始。

如何知道自己所处的位置？
+ 每个人都可以修改您的控制面板。
+ 有大量复制的控制面板，几乎没有重复使用的控制面板。
+ One-off 永远存在的仪表板。
+ 无版本控制（版本控制中的控制面板 JSON）。
+ 大量浏览控制面板，搜索合适的控制面板。这意味着要浪费大量时间去寻找所需的控制面板。
+ 没有任何警报将您定向到正确的控制面板。

**中：有条理的控制面板**

在此阶段，您将开始使用有条理的控制面板来管理控制面板的使用。您可能已经制定了策略，但有些方面还可以改进。

 如何知道自己所处的位置？ 
+ 使用模板变量防止蔓延。例如，您不需要为每个节点提供单独的控制面板，可以使用查询变量。更棒的是，您还可以将数据来源设置为模板变量，以便您可以在不同的集群和监控后端之间重用相同的控制面板。

  请参阅 [变量](v10-dash-variables.md) 中的示例列表，了解相关想法。
+ 基于[可观测性策略](#v10-dash-common-observability-strategies)的有条理的控制面板。
+ 分层控制面板，可向下钻取到下一级。
+ 控制面板设计反映了服务层次结构。例如，您可以使用 RED 方法，每个服务一行。当您向下滚动控制面板时，行顺序可以反映数据流。
+ 同类比较：当大小不同时拆分服务控制面板。确保聚合指标不会淹没重要信息。
+ 富有表现力的图表，有意义地使用颜色，并在可能的情况下标准化轴。
  + 有意义的颜色示例：蓝色表示不错，红色表示不好。[阈值](v10-panels-configure-thresholds.md)可以帮助解决这个问题。
  + 标准化轴的示例：在比较 CPU 使用率时，请按百分比而不是原始数字来衡量，因为计算机的内核数可能不同。按内核数量标准化 CPU 使用率可以减少认知负载，因为查看器无需知道 CPU 的数量便相信所有内核使用率都是 100%。
+ 定向浏览可减少猜测。
  + 模板变量使随机或漫无目的地浏览变得更加困难。
  + 大多数控制面板都应通过警报链接。
  + 通过链接定向浏览。有关更多信息，请参阅 [管理控制面板链接](v10-dash-manage-dashboard-links.md)。
+  Version-controlled 控制板 JSON。

**高：优化使用**

在此阶段，您已经通过一致且周到的策略优化了控制面板管理的使用。策略需要维护，但结果是值得的。
+ 主动减少蔓延。
  + 定期查看现有控制面板，以确保其仍然相关。
  + 只有批准的控制面板才会添加到主控制面板列表。
  + 跟踪控制面板的使用情况。您可以利用[使用情况见解](v10-dash-assess-dashboard-usage.md)。
+ 设计的一致性。
+ 使用脚本库生成控制面板，确保模式和样式的一致性。
  + gravonnet（Jsonnet）
  + grafanalib（Python）
+ 无法在浏览器中编辑。控制面板查看器使用变量更改视图。
+ 浏览控制面板是例外，而不是常规。
+ 在专用于此用途的单独 Grafana 实例（而不是生产实例）中执行实验和测试。当测试环境中的控制面板被证明有用时，请将该控制面板添加到主 Grafana 实例中。

## 创建控制面板的最佳实践
<a name="v10-dash-best-practices-for-creating-dashboards"></a>

本节概述了创建 Grafana 控制面板时应遵循的一些最佳实践。

**开始之前**

 以下是在创建控制面板之前需要考虑的一些原则。

**控制面板应讲述故事或回答问题**

您想用控制面板讲述什么故事？ 尝试创建数据的逻辑进程，例如从大到小，或者从一般到具体。此控制面板的目标是什么？ （提示：如果控制面板没有目标，问问自己是否真的需要控制面板。）

图形要简单明了，重点放在回答问题上。例如，如果您的问题是“哪些服务器有问题？”，您可能不需要显示所有服务器数据。只显示有问题的服务器数据。

**控制面板应减少而非增加认知负荷**

*认知负荷*是指您需要多么努力去思考某件事才能弄明白。使控制面板易于理解。其他用户和未来的您（当您凌晨 2 点还在想哪里出现问题）会很感激。

 问问自己：
+ 我能说出每个图形具体代表什么吗？ 这是显然的，还是我必须考虑一下？
+ 如果我把这个给别人看，他们需要多长时间才能弄清楚？ 他们会不会迷惑？

**制定监控策略**

制作新的控制面板很容易。优化控制面板创建和遵守计划更难，但这是值得的。此策略应管理总体控制面板方案，并确保单个控制面板设计的一致性。

有关更多信息，请参阅[常见可观测性策略](#v10-dash-common-observability-strategies)和[控制面板管理成熟度水平](#v10-dash-management-maturity-model)。

**写下来**

有了策略或设计指南后，将其写下来，以保持长期的一致性。

**应遵循的最佳实践**
+ 创建新控制面板时，确保为其提供有意义的名称。
  + 如果要创建用来播放或试验的控制面板，请在名称中输入词 `TEST` 或 `TMP`。
  + 考虑在控制面板名称中包含姓名或首字母缩写或作为标签，以便人们知道谁拥有控制面板。
  + 完成临时试验控制面板后，将其删除。
+ 如果您创建了许多相关的控制面板，请考虑如何交叉引用以便于导航。有关更多信息，请参阅本节后面的[管理控制面板的最佳实践](#v10-dash-best-practices-for-managing-dashboards)。
+ Grafana 从数据来源检索数据。重要的是，对 [连接到数据来源](AMG-data-sources.md) 的一般情况和您的特定数据来源有基本的了解。
+ 避免不必要的控制面板刷新，以减少网络或后端的负载。例如，如果您的数据每小时变化一次，则无需将控制面板刷新率设置为 30 秒。
+ 显示具有不同单位或范围的时间序列 Y-axes 时，请使用左右键。
+ 向控制面板和面板添加文档。
  + 要向控制面板添加文档，请向控制面板添加[文本面板可视化](v10-panels-text.md)。记录控制面板的用途、有用的资源链接以及用户与控制面板交互可能需要的任何说明等内容。
  + 要向面板添加文档，请编辑面板设置并添加描述。如果将光标悬停在面板左上角的小 `i` 上，您添加的任何文本都会出现。
+ 重用控制面板，并使用[模板和变量](v10-dash-variables.md)来确保一致性。
+ 堆叠图形数据时要小心。可视化可能会产生误导，并隐藏重要数据。大多数情况下，我们建议将其关闭。

## 管理控制面板的最佳实践
<a name="v10-dash-best-practices-for-managing-dashboards"></a>

 本页概述了管理 Grafana 控制面板时要遵循的一些最佳实践。

**开始之前**

以下是在开始管理控制面板之前需要考虑的一些原则。

**战略可观测性**

有几种[常见的可观测性策略](#v10-dash-common-observability-strategies)。您应该研究这些策略，确定哪种策略对您有用，或者您想提出自己的策略。无论哪种方式，都要有一个计划，写下来，然后去执行。

根据需要调整策略以适应不断变化的需求。

**成熟度级别**

您的控制面板成熟度级别如何？ 分析您当前的控制面板设置，并将其与[控制面板管理成熟度模型](#v10-dash-management-maturity-model)比较。了解所处的位置有助于确定如何实现自己的目标。

**应遵循的最佳实践**
+ 避免控制面板蔓延，即控制面板不受控制地增长。控制面板的蔓延会对找到合适控制面板的时间产生负面影响。复制控制面板并更改“某项内容”（糟糕的是：保留原始标签）是最简单的蔓延方式。
  + 定期查看控制面板并删除不必要的控制面板。
  + 如果您创建一个临时控制面板，也许是为了测试某些内容，请在名称前加上 `TEST:` 前缀。完成后删除控制面板。
+ 复制没有重大更改的控制面板并不是一个好办法。
  + 您错过了对原始控制面板的更新，例如文档更改、错误修复或指标添加。
  + 在许多情况下，制作副本只是为了通过设置模板参数来自定义视图。应该通过维护指向主控制面板的链接并使用 [URL 参数](v10-panels-configure-data-links.md#v10-panels-data-link-variables)自定义视图来完成。
+ 当必须复制控制面板时，请将其重命名，但*不要*复制控制面板标签。标签是搜索期间使用的控制面板的重要元数据。复制标签可能会导致匹配错误。
+ 维护控制面板或交叉引用控制面板。这可以通过几种方式来实现：
  + 创建控制面板链接、面板或数据链接。链接可以指向其他控制面板或外部系统。有关更多信息，请参阅[管理控制面板链接](v10-dash-manage-dashboard-links.md)。
  +  添加[控制面板列表面板](v10-panels-dashboard-list.md)。然后，您可以通过执行标签或文件夹搜索来自定义您看到的内容。
  + 添加[文本面板](v10-panels-dashboard-list.md)并使用 markdown 来自定义显示。