前回のブログでは、GoogleのDevOps Research and Assessment(DORA)チームが提唱したDORAメトリクスについてわかりやすく解説し、ソフトウェアデリバリーのパフォーマンスを向上させるために、なぜ重要なのかをご紹介しました。

今回の記事では、New Relicスコアカードを活用してDORAメトリクスを自動的に算出・追跡する方法や、エンジニアリングや運用現場の生データを継続的な改善につながる洞察へと変えるポイントについて解説します。スコアカードのご利用ガイドはこちらからご覧いただけます。

DORAメトリクスをサービスの担当別でグループ化

DORAメトリクスをサービスの担当やチーム別にグループ化

DORAメトリクスのおさらい

DORAメトリクスは、DevOpsのパフォーマンスを次の4つの側面から評価します。

  1. デプロイの頻度 – コードを本番環境に導入する頻度
  2. 変更のリードタイム – 修正したコードが本番環境で稼働するまでにかかる時間
  3. 変更失敗率 – インシデントの原因となったり、修正対応が必要になったデプロイの割合
  4. 平均復旧時間(MTTR) – インシデントの発生後、サービスを復旧するまでにかかる時間

DORAメトリクスにNew Relicスコアカードを使用

New Relicスコアカードを使えば、体系的な手順で、既存の開発・運用データからDORAメトリクスを簡単に算出できます。

使い方は次のとおり簡単です。

  1. All Capabilities → Scorecardsに移動します
  2. Create Scorecard → Use a Templateをクリックします
  3. DORAメトリクスを選択し、作成フローに従います

New Relicに必要なデータがすでに揃っていれば、テンプレートを使用してワンクリックですぐに使えるDORAスコアカードを作成できます。

テンプレートを使用してスコアカードを作成

テンプレートを使用してスコアカードを作成

データの前提条件

DORAメトリクスの精度は、元となるデータの質に左右されます。New Relicでは、データの取得には以下の製品や連携機能を利用するのが最も簡単です。

スコアカードのルールごとに、NRQLクエリや必要なデータの集め方もあわせてご説明します。

1. デプロイの頻度 - NRQLクエリ

データソース - デプロイ頻度のルールには、デプロイに関するデータが必要です。このデータは、New RelicのChange Tracking(変更追跡機能)を使用して取得できます。Change TrackingをCI/CDパイプラインに統合して、デプロイイベントをNerdGraph API経由でNew Relicに送信してください。

この操作によって、ルールで使用されるデプロイデータが含まれるデプロイイベントが生成されます。イベントは以下のコマンドで取得できます。

FROM Deployment SELECT * SINCE last week

💡 プロのポイント:エンティティ(サービス)をデプロイした際、GUIDとコミットSHAがNew Relic Change Tracking APIに渡るよう、CI/CDパイプラインを設定しておきましょう。このGUIDによって、デプロイがNew Relic上の正しいサービスに紐付けられ、デプロイ頻度の算出が可能になります。コミットSHAは、変更のリードタイムの算出に不可欠です。具体例はこちらをご覧ください。

2. 変更のリードタイム - NRQLクエリ

データソース - 変更のリードタイムのルールには、次の2つのデータが必要です。

  1. デプロイデータ – Change Tracking(変更追跡機能)から取得します(前述の通り)。

プルリクエストのライフサイクルデータ – リポジトリ、チーム、プルリクエストデータを同期するNew Relic GitHub連携機能から取得します。

この操作でGitHubPullRequestイベントが組織のストレージアカウントに生成されます。以下のコマンドでクエリを実行すると、連携設定後に新たに作成されたプルリクエストを抽出できます。

FROM GitHubPullRequest SELECT * SINCE last week

💡 プロのポイント:プルリクエストがマージされると、commitSha属性を持つ新しいイベントがGitHubPullRequestイベントとして追加されます。このcommitShaを使ってデプロイイベントと関連付けることで、最初のコミットからデプロイまでにかかった時間を計算することができます。

3. 平均復旧時間(MTTR)- NRQLクエリ

データソース - MTTRルールには、インシデントの開始時刻と復旧時刻など、インシデントのライフサイクルデータが必要です。New Relic Issues & Incident Managementを使用して、インシデントを記録・追跡します。インシデントが発生すると、システムはNrAiIncidentイベントを記録します。記録されたイベントをもとに、インシデント対応にかかった時間の平均を計算し、平均的な復旧速度を割り出します。

4. 変更失敗率 - NRQLクエリ

データソース - 変更失敗率のルールでは、修正対応やロールバックが発生したデプロイの割合を測定します。つまり、ご利用の環境内にインシデントや問題を引き起こしたデプロイがあることを意味します。

Change Tracking(変更追跡機能)によって、すでにデプロイ情報は取得できているはずです。このルールを使うには、デプロイAPIを呼び出す際に、カスタム属性としてHotfixOrRollback(または任意のカスタム属性)を送信する必要があります。このフラグがあることで、通常のデプロイと、本番環境でトラブルが起きたデプロイとを分けて集計できます。

💡 プロのポイント:CI/CDでこのフラグを自動化するには、ロールバック/ホットフィックス用のブランチにタグ付けをするか、デプロイジョブ内で変数を設定します。また、他の属性を使用する場合は、ルールのクエリも必ずその属性に対応した内容へ変更しましょう。

チーム別のDORA

New Relic Teamsを利用すれば、DORAメトリクスをサービスの担当チーム別に簡単にグループ化できます。

DORAスコアカードを開き、「Group by」 → 「Team」を選択すると、各チームごとのデプロイ、変更、復旧のパフォーマンスをすぐに確認できます。

DORAメトリクスを自動的に計算・追跡

DORAメトリクスを自動的に計算・追跡

基準値とデータソースのカスタマイズ

提供されているクエリはGoogleの高パフォーマンス基準に基づいていますが、必要に応じて自由に編集できます。スコアカードで任意のルールを開いて「Edit Rule」をクリックすれば、目標に合わせてNRQLの基準値を調整できます。さらに、カスタムイベントを使用してNew Relicの連携機能や製品以外からデータを送信している場合は、クエリを変更することで、そのデータを含むイベントを対象にできます。

基準値とデータソースをカスタマイズ

基準値とデータソースをカスタマイズ