阶段组仪表板
阶段组仪表板是生成的仪表板,包含大多数阶段组常用组件的指标。该仪表板完全可自定义,由各阶段组拥有。
本页面解释了这些仪表板上显示的内容、如何使用其内容以及如何自定义它们。
仪表板内容
错误预算面板
顶部面板显示 错误预算。这些面板始终显示在 时间范围控件 中选择的结束时间之前的 28 天。此数据不遵循所选范围,但会遵循环境和阶段的筛选条件。
指标面板
尽管面板中显示的大多数指标在标题和附近描述中都能自明,但请注意以下几点:
-
事件被计数、测量、累积、收集并存储为 时间序列。数据通过统计方法计算以生成指标。这意味着指标在一段时间内是近似正确且有意义的。它们帮助您随时间了解系统的状态。它们不旨在为您提供离散事件的精确数值。
如果您需要更高的准确性,请使用其他监控工具,例如 日志。 阅读以下示例以获取更多解释。
-
所有速率指标的单位都是
每秒请求数。默认聚合时间框架为 1 分钟。例如,一个面板显示在
2020-12-25 00:42:00时的每秒请求数为34.13。这意味着在第 42 分钟(从2020-12-25 00:42:00到2020-12-25 00:42:59),Web 服务器处理了大约34.13 * 60 = ~ 2047个请求。 -
您可能会经常遇到与小数和向上舍入相关的陷阱,特别是在低流量情况下。例如,
RepositoryUpdateMirrorWorker在2020-12-25 02:04:00的错误率为0.07,相当于每分钟4.2个作业。原始结果是0.06666666667,相当于每分钟 4 个作业。 -
当数据足够大时,所有速率指标都更准确。默认浮点精度为 2。在一些极低的面板中,即使仍有实际流量,您可能会看到
0.00。
要检查面板的原始数据以进行进一步计算,请从面板的下拉列表中选择 Inspect。可用的查询、原始数据和面板 JSON 结构。 更多信息请参阅 Grafana 面板检查。
所有仪表板都由 Grafana 驱动,这是用于显示指标的前端。Grafana 消耗从后端 Prometheus 数据源返回的数据,然后通过可视化呈现。阶段组仪表板是为最常见的用例设计的,具有有限的筛选器和预构建查询。Grafana 提供了一种使用 Grafana Explore 探索和可视化指标数据的方法。这需要一些 Prometheus PromQL 查询语言 的知识。
示例:使用仪表板进行调试
示例调试工作流:
- 代码审查组的一名成员已合并了一个 MR 并部署到生产环境。
- 要验证部署,您可以检查 代码审查组的仪表板。
- Sidekiq 错误率面板显示错误率升高,特别是
UpdateMergeRequestsWorker。
- 如果在 Extra links 部分选择 Kibana: Kibana Sidekiq failed request logs,您可以筛选
UpdateMergeRequestsWorker并阅读日志。
- 使用 Sentry,您可以找到异常,其中可以按事务类型和来自 Kibana 结果项的
correlation_id进行筛选。
- 现在应该会出现一个精确的异常,包括堆栈跟踪、作业参数和其他信息。
祝您调试愉快!
自定义仪表板
GitLab 中的所有 Grafana 仪表板都存储在 runbooks 项目 中的 Jsonnet 文件 生成。特别是,阶段组仪表板定义存储在 /dashboards/stage-groups 中。
按照惯例,每个组都有一个对应的 Jsonnet 文件。仪表板每月与 GitLab 阶段组数据 同步一次。
扩展和自定义是我们设计此系统时的关键原则之一。要自定义您组的仪表板,请编辑相应的文件并遵循 Runbook 工作流。仪表板在 MR 合并后更新。
查看自动生成的文件,例如 product_planning.dashboard.jsonnet:
// 此文件使用 scripts/update_stage_groups_dashboards.rb 自动生成
// 欢迎自定义此文件。
local stageGroupDashboards = import './stage-group-dashboards.libsonnet';
stageGroupDashboards.dashboard('product_planning')
.stageGroupDashboardTrailer()我们提供基本自定义来筛选出对您组活动至关重要的组件。默认情况下,仪表板中只显示 web、api 和 sidekiq 组件,而 git 被隐藏。请参阅 如何启用可用组件和可选图表。
您还可以向仪表板添加更多信息或自定义指标。以下示例在页面顶部添加了一些链接和总请求率:
local stageGroupDashboards = import './stage-group-dashboards.libsonnet';
local grafana = import 'github.com/grafana/grafonnet-lib/grafonnet/grafana.libsonnet';
local basic = import 'grafana/basic.libsonnet';
stageGroupDashboards.dashboard('source_code')
.addPanel(
grafana.text.new(
title='组信息',
mode='markdown',
content=|||
源代码管理组仪表板的有用链接:
- [问题列表](https://gitlab.com/groups/gitlab-org/-/issues?scope=all&state=opened&label_name%5B%5D=repository)
- [史诗列表](https://gitlab.com/groups/gitlab-org/-/epics?label_name[]=repository)
|||,
),
gridPos={ x: 0, y: 0, w: 24, h: 4 }
)
.addPanel(
basic.timeseries(
title='总请求率',
yAxisLabel='每秒请求数',
decimals=2,
query=|||
sum (
rate(gitlab_transaction_duration_seconds_count{
env='$environment',
environment='$environment',
feature_category=~'source_code_management',
}[$__interval])
)
|||
),
gridPos={ x: 0, y: 0, w: 24, h: 7 }
)
.stageGroupDashboardTrailer()如果您想查看实际工作流程,我们录制了一个自定义仪表板的配对会话,可在 GitLab Unfiltered 上观看。
对于更深度的自定义和更复杂的指标,请参阅 Grafonnet lib 项目和 GitLab Prometheus Metrics 文档。
可选图表
某些图表并非对所有组都相关,因此默认不会添加到仪表板中。它们可以通过自定义仪表板来添加。
默认情况下,只显示 web、api 和 sidekiq 指标。如果您希望查看 git 舰队(或未来可能添加的任何其他组件)的指标,可以按如下方式配置:
stageGroupDashboards
.dashboard('source_code', components=stageGroupDashboards.supportedComponents)
.stageGroupDashboardTrailer()如果您的组对 Sidekiq 作业持续时间及其阈值感兴趣,可以通过调用 .addSidekiqJobDurationByUrgency 函数添加这些图表:
stageGroupDashboards
.dashboard('access')
.addSidekiqJobDurationByUrgency()
.stageGroupDashboardTrailer()