ステージグループダッシュボード

ステージ・グループ・ダッシュボードは、ほとんどのステージ・グループが使用する共通コンポーネントのメトリクスを含むダッシュボードです。ダッシュボードは完全にカスタマイズ可能で、ステージグループが所有します。

このページでは、これらのダッシュボードの内容、使用方法、カスタマイズ方法について説明します。

ダッシュボードの内容

エラー予算パネル

28 day budget

一番上のパネルはエラーバジェットを表示します。これらのパネルには、時間範囲コントロールで選択された終了時刻の28日前が常に表示されます。このデータは選択された範囲には従いません。環境とステージのフィルタには従います。

メトリクスパネル

Metrics panels

パネルに表示されるメトリクスのほとんどは、そのタイトルと近くの説明で自明ですが、次の点に注意してください:

  • イベントは、カウントされ、測定され、蓄積され、収集され、時系列として保存されます。データは統計的手法で計算され、メトリクスが生成されます。つまり、メトリクスは、ある期間にわたって、おおよそ正しく、意味のあるものです。これは、時間の経過に伴うシステムのステージの概要を把握するのに役立ちます。離散的なイベントの正確な数値を示すものではありません。

    より高い精度が必要な場合は、ログなど別の監視ツールを使用してください。より詳しい説明は、以下の例を読んでください。

  • すべてのレート・メトリクスの単位はrequests per second です。デフォルトの集計時間枠は 1 分です。

    たとえば、パネルでは、2020-12-25 00:42:00 の 1 秒あたりの要求数は34.13 です。これは、42 分の間 (2020-12-25 00:42:00 から2020-12-25 00:42:59 まで)、約34.13 * 60 = ~ 2047 の要求が Web サーバーによって処理されたことを意味します。

  • 特にトラフィックが少ない場合、小数の端数や切り上げに関連したゴッチャに頻繁に遭遇するかもしれません。例えば、2020-12-25 02:04:00 におけるRepositoryUpdateMirrorWorker のエラーレートは0.07 で、1分あたり4.2 のジョブに相当します。生の結果は0.06666666667 、1分あたり4ジョブに相当します。
  • すべてのレート・メトリクスは、データが十分大きいとより正確になります。デフォルトの浮動小数点の精度は2です。極端に低いパネルでは、まだ実際のトラフィックがあるにもかかわらず、0.00

さらなる計算のためにパネルの生データを検査するには、パネルのドロップダウン・リストから「検査」を選択します。クエリ、生データ、パネルのJSON構造が利用できます。詳細はGrafana panel inspectionをご覧ください。

すべてのダッシュボードは、メトリクスを表示するためのフロントエンドであるGrafanaによって提供されています。Grafana はクエリからバックエンドの Prometheus データソースに返されたデータを消費し、ビジュアライゼーションで表示します。ステージグループのダッシュボードは、限られたフィルタと事前に構築されたクエリのセットで、最も一般的なユースケースに対応するように構築されています。Grafanaは、Grafana Exploreを使用してメトリクスデータを探索し、視覚化する方法を提供します。これには、Prometheus のクエリ言語 PromQLの知識が必要です。

例を示します:ダッシュボードによるデバッグ

デバッグワークフローの例

  1. コードレビューグループのチームメンバーが、本番環境にデプロイされた MR をマージしました。
  2. デプロイを確認するには、コード・レビュー・グループのダッシュボードをチェックしてください。
  3. Sidekiq Error Rateパネルにエラー率が上昇していることが表示され、特にUpdateMergeRequestsWorker

Debug 1

  1. Kibanaを選択します:Extra linksセクションでKibana Sidekiq failed request logsを選択すると、UpdateMergeRequestsWorker をフィルタリングし、ログを読むことができます。

Debug 2

  1. Sentryを使用すると、Kibanaの結果項目からトランザクションの種類とcorrelation_id によってフィルタリングできる例外を見つけることができます。

Debug 3

  1. スタックトレース、ジョブ引数、その他の情報を含む正確な例外が表示されるはずです。

デバッグを楽しんでください!

ダッシュボードのカスタマイズ

GitLabのすべてのGrafanaダッシュボードは、runbooksプロジェクトに格納されているJsonnetファイルから生成されます。特に、ステージグループのダッシュボード定義は/dashboards/stage-groups に格納されています。

慣例として、各グループには対応する Jsonnet ファイルがあります。ダッシュボードは、毎月GitLabのステージグループのデータと同期されます。

拡張性とカスタマイズ性は、このシステムを設計する際に使われた重要な原則の一つです。グループのダッシュボードをカスタマイズするには、対応するファイルを編集し、Runbookのワークフローに従ってください。ダッシュボードはMRがマージされた後に更新されます。

自動生成されたファイルを見ると、例えばproduct_planning.dashboard.jsonnet

// This file is autogenerated using scripts/update_stage_groups_dashboards.rb
// Please feel free to customize this file.
local stageGroupDashboards = import './stage-group-dashboards.libsonnet';

stageGroupDashboards.dashboard('product_planning')
.stageGroupDashboardTrailer()

グループのアクティビティに不可欠なコンポーネントをフィルタリングするための基本的なカスタマイズを提供します。デフォルトでは、webapisidekiq のコンポーネントのみがダッシュボードで利用可能で、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='Group information',
    mode='markdown',
    content=|||
      Useful link for the Source Code Management group dashboard:
      - [Issue list](https://gitlab.com/groups/gitlab-org/-/issues?scope=all&state=opened&label_name%5B%5D=repository)
      - [Epic list](https://gitlab.com/groups/gitlab-org/-/epics?label_name[]=repository)
    |||,
  ),
  gridPos={ x: 0, y: 0, w: 24, h: 4 }
)
.addPanel(
  basic.timeseries(
    title='Total Request Rate',
    yAxisLabel='Requests per Second',
    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()

Stage Group Dashboard Customization

ワークフローのアクションを見たい場合は、ダッシュボードをカスタマイズするペアセッションをGitLab Unfilteredで録画しています。

より深いカスタマイズやより複雑なメトリクスについては、Grafonnet libプロジェクトやGitLab Prometheus Metricsドキュメントをご覧ください。

オプションのグラフ

一部のグラフはすべてのグループに関連するものではないため、デフォルトではダッシュボードに追加されていません。これらはダッシュボードをカスタマイズすることで追加できます。

デフォルトでは、webapisidekiq のメトリクスのみが表示されます。git フリート(または今後追加される可能性のある他のコンポーネント)のメトリクスも表示したい場合は、次のように設定します:

stageGroupDashboards
.dashboard('source_code', components=stageGroupDashboards.supportedComponents)
.stageGroupDashboardTrailer()

Sidekiqジョブの継続時間とそのしきい値に関心のあるグループの場合は、.addSidekiqJobDurationByUrgency 関数を呼び出すことで、これらのグラフを追加できます:

stageGroupDashboards
.dashboard('access')
.addSidekiqJobDurationByUrgency()
.stageGroupDashboardTrailer()