メトリックとクエリの設計と実装
プロジェクトライフサイクルに関連するメトリックを収集 することで、組織はソフトウェア開発プラクティスに関する分析情報を得て、DevOps プロセスを合理化することができます。 プロジェクト アクティビティからのテレメトリ データ収集を有効にすると、チームはパイプラインの実行、作業項目の更新、およびその他の DevOps 関連のイベントをリアルタイムで追跡できます。
プロジェクト メトリックが重要な理由
この方法は、いくつかの理由で重要です。
可視性の強化:
- すべてのプロジェクトとチームのリアルタイムの状態を確認する
- 作業の分散と容量を理解する
- マイルストーンと期限に向けた進行状況を追跡する
- 依存関係と阻害要因を早期に特定する
パフォーマンスの監視:
- チームの速度とスループットを測定する
- サイクル時間とリード タイムの傾向を追跡する
- ビルドとデプロイの成功率を監視する
- パフォーマンス低下パターンを特定する
ソフトウェア開発ライフサイクルの最適化:
- プロジェクト ワークフローのボトルネックを特定する
- プロセスの改善に関するデータドリブンの意思決定を行う
- 開発プラクティスを継続的に改善する
- 開発アクティビティとアプリケーションのパフォーマンスの関連付け
主な利点:
- チームがデータドリブンの意思決定を行えるようにします
- 振り返りのための客観的なメトリックを提供します
- 容量計画と予測をサポート
- プロアクティブなリスク管理を可能にする
プラットフォームの比較: GitHub と Azure DevOps
GitHub と Azure DevOps の両方に、プロジェクト関連のテレメトリの収集と分析のサポートが含まれていますが、その機能は大きく異なります。
GitHub プロジェクト追跡機能
GitHub Insights の機能:
- 組み込みのメトリック: リポジトリ アクティビティ、pull request パフォーマンス、コミュニティ エンゲージメント
- パルス ビュー: リポジトリのアクティビティの概要
- 共同作成者グラフ: 時間の経過に伴うコードコントリビューション
- トラフィック分析: ビュー、複製、参照元
Limitations:
- プロジェクト追跡分析は、 専用のプロジェクト管理ツールと比較して制限されています
- アジャイル プロジェクト管理のための定義済みメトリックの数を減らします
- 基本的な視覚化機能
- 制限付きカスタム レポート オプション
- Azure Monitor との組み込み統合なし
Azure DevOps プロジェクト追跡機能
Azure DevOps Analytics の機能:
- プロジェクト監視用に特別に設計された分析およびレポート機能の包括的なセット
- カスタマイズ可能なダッシュボード: カスタム ビュー用のドラッグ アンド ドロップ ウィジェット
- 豊富なレポート機能: Power BI 統合、OData フィード
- さまざまな定義済みのメトリックとクエリ: 速度、バーンダウン、サイクル時間、リード タイム
- ソフトウェア開発ライフサイクル全体の作業の進行状況の追跡を容易にする
長所:
- アジャイルプロジェクト管理に特化して構築されたシステム
- ダッシュボード用の広範なウィジェット ライブラリ
- WIT クエリ言語を使用した高度なクエリ機能
- Azure サービスとの緊密な統合
Azure サービスを使用した監視の拡張
GitHub と Azure DevOps に組み込まれているテレメトリ機能に加えて、Azure Monitor や Application Insights などの Azure サービスを利用して監視の範囲を拡張できます。
統合機能:
- Azure DevOps: GitHub よりも豊富で合理化された統合を 提供します
- ネイティブ コネクタ: Azure DevOps パイプラインを Application Insights とネイティブに統合する
- リリース注釈: デプロイとパフォーマンス メトリックの自動関連付け
- 作業項目の統合: Application Insights アラートから直接作業項目を作成する
- 統合ダッシュボード: プロジェクト メトリックとアプリケーション テレメトリを組み合わせる
GitHub 組み込みプロジェクト追跡の使用
GitHub プロジェクトでは、 進行状況の追跡 には、主要な開発メトリックの監視が含まれます。
主要な GitHub メトリック:
- 問題のスループット: 課題の作成とクローズの速度
- 課題の経過: 課題が未解決のままの期間
- コード レビューの所要時間: PR の作成から最初のレビューと承認までの時間
- プル要求のマージ時間: PR の作成からマージまでの期間
- 共同作成者アクティビティ: コントリビューションの頻度と量
これらのメトリックは 、プロジェクトの正常性、チームの効率、およびコード品質に関する分析情報を提供し、改善の領域を特定するのに役立ちます。
GitHub Insights
メトリックを確認する最も簡単な方法は、Insights 機能を使用することです。
- 時間の経過に伴うリポジトリ アクティビティの視覚化
- pull request の性能を監視する (未処理、マージ済み、閉じられた)
- コミュニティ エンゲージメント (フォーク、スター、ウォッチャー) を監視する
- 共同作成者の統計とコードの頻度を表示する
GitHub Actions を使用したカスタム自動化
メトリック収集を自動化する カスタム GitHub Actions ワークフロー を作成します。
- トリガーベース: プル要求、問題、コード プッシュなどのイベント
- 予定: 定期レポートを行うための cron スケジュールに従って実行する
- アクション: メトリックの収集と分析、レポートの生成、ダッシュボードへの投稿
REST API を使用したプログラムによるアクセス
GitHub REST API を利用して、プログラムによってプロジェクト データにアクセスします。
- イシューとプルリクエストのメトリクス
- 共同作成者の統計
- リポジトリ アクティビティ データ
- 分析ツールを使用してカスタム ダッシュボードまたはレポートを作成する
Azure DevOps 組み込みプロジェクト追跡の使用
Azure DevOps には、プロジェクト管理のさまざまな側面 (サイクル時間、リード タイム、ワークフロー効率、バックログの正常性) を反映する 多数の組み込みメトリック が用意されています。 これらのメトリックは、いくつかのカテゴリにグループ化できます。
作業項目のメトリック
- 作業項目の数: 時間の経過に伴って作成、完了、または進行中の作業項目の合計数を監視する
- 作業項目の有効期間: 未解決の作業項目の経過時間を追跡して、期限切れのタスクを特定する
- 速度: イテレーションまたはスプリントで作業項目が完了した割合を測定する
- バックログの増加: 新しい作業項目の作成と完了の速度を監視すること
- 作業項目の配布: 作業項目の種類 (バグ、機能、タスク) を追跡する
ビルドとリリースのメトリック
- ビルド成功率: 成功したビルドと失敗したビルドの割合を監視する
- リリース展開の頻度: リリースが運用環境またはその他の環境にデプロイされる頻度を追跡する
- デプロイの成功率: デプロイの成功率を測定してデプロイの問題を特定する
- ビルド期間: ビルド完了までの時間を追跡する
- デプロイのリード タイム: コミットから運用までの時間
テストメトリクス
- テスト ケースの合格率: 合格したテスト ケースと失敗したテスト ケースの割合を監視する
- テスト ケースの実行時間: テスト ケースの実行にかかった時間を追跡して、パフォーマンスのボトルネックを特定する
- テスト ケースの失敗の傾向: テスト ケースの失敗の傾向を分析して、繰り返し発生する問題を特定する
- テスト 対象範囲: テストでカバーされるコードの割合
- 不安定なテスト検出: 信頼性の低いテストを特定する
コード メトリクス
- コードチャーン: 時間の経過に伴って追加、変更、または削除されたコードの量を測定する
- コード品質メトリック: コード カバレッジ、サイクロマティックな複雑さ、保守容易性インデックスを監視する
- pull request の指標: 確認時間、承認率
- コード レビューのコメント: フィードバックの頻度と種類
チームパフォーマンス指標
- スプリント バーンダウン: 残存作業時間と時間を監視してスプリント目標の進行状況を追跡する
- チームのベロシティ: 各スプリントでチームが完了した作業の平均量を測定する
- リード タイム: 作業項目の作成から完了までの時間を監視する
- サイクル時間: 作業開始から完了までの時間
- スループット: 期間ごとに完了した作業項目
ダッシュボードとカスタム分析
これらのメトリックは、Azure DevOps ポータル内で直接アクセスできるダッシュボードを使用して表示および分析できます。 その他の分析情報については 、Azure DevOps Analytics でカスタムのクエリ ベースのレポートを作成します。
一般的な分析クエリ
より一般的に使用されるクエリ、グループ化、視覚化の一部を次に示します。
1. サイクルタイム分析:
- クエリ: さまざまな種類の作業項目のサイクル時間 (作業項目の最初から最後までの完了にかかった時間) を計算する
- グルーピング: 状態別の作業項目 (アクティブ、解決済み、クローズ済み)
- 計算: 開始日と終了日の時間差
- 視覚化: 時間の経過に伴う状態ごとの平均サイクル時間
- 目的: ボトルネックを特定し、プロセス効率を向上させる
2. リード タイム分布:
- クエリ: さまざまなチームまたは領域のリード タイム (作成から完了まで) 分布を分析する
- グルーピング: 作業項目をエリア パスまたはチームの割り当てで分類する
- 計算: 各作業項目のリード タイム
- 視覚化: 分布を示すヒストグラムまたはボックス プロット
- 目的: 外れ値を特定し、特定の領域でワークフローを最適化して配送時間を短縮する
3. 累積フロー図 (CFD):
- クエリ: 時間の経過に伴う各状態 (To Do、In Progress、Done) の作業項目の数を追跡する
- グルーピング: 状態別の作業項目(状態変更日順)
- 計算: 毎日、毎週などの一定間隔で各状態の作業項目の累積数を計測します。
- 視覚化: 作業項目のフローを示す CFD
- 目的: プロジェクトステージのフローを監視し、輻輳や遅延を特定する
4. 作業項目の経時変化分析:
- クエリ: バックログまたは特定のステージの作業項目の経年変化を分析する
- グルーピング: 年齢 (作成後の日数)、優先度、または種類別の作業項目
- 計算: カテゴリ間の平均年齢、期限切れの割合、年齢分布
- 視覚化: 経年変化の傾向
- 目的: バックログのクリーンアップに優先順位を付け、優先度の高いアイテムをタイムリーに配信する
プロジェクト追跡に Azure Monitor と Application Insights を使用する
プロジェクト追跡を Azure Monitor および Application Insights と 統合するには、さまざまな方法があります 。 より一般的に使用されるアプローチの 1 つは、 継続的な監視、 リリース注釈、 作業項目の統合の組み合わせです。 これにより、次の方法でソフトウェア開発ライフサイクルが最適化されます。
メリット:
- パフォーマンスのボトルネックに関する貴重な情報 を提供する
- プロアクティブな問題解決の促進
- 情報に基づいた意思決定を可能にする
- 高品質のソフトウェアを正常に提供する
継続的な監視の統合
継続的な監視を使用すると、リリース パイプラインに Application Insights の監視データを組み込むことができます。
テレメトリに基づく品質ゲート:
- Application Insights アラートは、アラートが解決されるまで、ゲートデプロイをブロックまたはロールバックできます
- デプロイ中のエラー率、応答時間、例外数などのメトリックを監視する
- 不適切な展開が運用環境に到達するのを防止する
- 逆に、 監視チェックに合格した場合、手動による介入なしで デプロイを自動的に続行 できます
サンプル シナリオ:
- パイプラインをステージング環境にデプロイする
- デプロイ後ゲートが Application Insights を 15 分間監視する
- エラー率 >1%場合、デプロイはブロックされます
- メトリックが正常な場合、デプロイは自動的に運用環境に進みます
リリース注釈
注釈は、 CI/CD パイプライン内のイベントを指定します。
目的:
- ソフトウェア リリースの配信と結果のアプリケーション パフォーマンスの間の相関関係をキャプチャする
- Application Insights グラフでデプロイ イベントをマークする
- デプロイに対してパフォーマンスの変更が発生した正確なタイミングを確認する
- デプロイによってパフォーマンスの低下が発生したかどうかを迅速に特定する
実装:
- Azure DevOps: ビルド パイプラインによる 注釈の自動生成 をサポート
- カスタム注釈: PowerShell を使用して任意の注釈を作成する
- メタデータ: ビルド番号、リリース ノート、デプロイ環境を含める
ユースケース: パフォーマンス メトリック グラフには、応答時間の急増が表示されます。 リリースノートにより、急上昇がバージョン2.3.1のデプロイメントと一致することが判明し、問題のあるリリースを即座に特定できます。
作業項目の統合
作業項目の統合機能 により、GitHub と Azure DevOps で作業項目を生成するときに、コンテキストに応じた Application Insights データを埋め込むのが容易になります。
データ キャプチャと作業項目の生成を容易にする機能:
高度なフィールド:
- 担当者、プロジェクト、またはマイルストーンを自動的に入力する
- アラートの重大度に基づいて優先度を設定する
- 影響を受けるコンポーネントまたはサービスでタグ付けする
- 関連する作業項目へのリンク
複数の構成:
- 任意の数のリポジトリまたは作業項目の種類のサポート
- アラートの種類ごとに異なる構成
- 環境固有の作業項目テンプレート
事前構築およびカスタマイズ可能な KQL クエリ:
- Application Insights データを作業項目に自動的に追加する
- エラー数、影響を受けるユーザー、スタック トレースを含める
- 関連するログ エントリを添付する
- パフォーマンス グラフを埋め込む
カスタマイズ可能なブック テンプレート:
- 標準化された作業項目の形式を作成する
- トラブルシューティングチェックリストを含める
- ランブックとドキュメントへのリンク
- 診断情報の事前設定
ワークフローの例:
- Application Insights が増加した例外率を検出する
- アラートを自動的に発生させる
- Azure DevOps で作成された作業項目は次のとおりです。
- タイトル: "ProductService での例外率が高い"
- 説明: 上位の例外を示す KQL クエリ結果
- 担当者: サービス チームからのオンコール エンジニア
- 優先度: 高 (ユーザーへの影響に基づく)
- 添付ファイル: 過去 100 個の例外スタック トレース
- リンク: 関連する Application Insights クエリ、デプロイ注釈
- エンジニアが通知を受け取り、すべての診断情報をすぐに取得する