Application Insights を実装する
このユニットでは、アプリケーションに Application Insights を実装 するための実用的なガイダンスを提供し、インストールから継続的な監視と最適化までの完全なワークフローをカバーします。
モニター: 継続的な可視性を確立する
Application Insights をアプリにインストールしたら、外部の観点からアプリケーションを監視するように 可用性 Web テスト を設定します。 次に、次の監視プラクティスを実装します。
チームの可視性のためのダッシュボードを設定する
チーム ルーム用の ダッシュボード を作成 して、重要なメトリックを確認します。
表示する主要メトリック:
- 負荷メトリック: 要求率、同時ユーザー、スループット
- 応答: 応答時間のパーセンタイル (50 番目、95 番目、99 番目)
- 依存関係のパフォーマンス: データベース クエリ時間、API 呼び出しの待機時間、キャッシュ ヒット率
- クライアント側のメトリック: ページ読み込み時間、AJAX 呼び出しのパフォーマンス
- エラー率: 失敗した要求、例外、依存関係の失敗
ダッシュボードのベスト プラクティス:
- デプロイ中にリアルタイムで更新する
- チーム領域のモニターに表示する
- 健康状態を色分けするインジケーター (緑/黄/赤)
- SLA コンプライアンス メトリックを含める
- 時間の経過に伴う傾向を現在の値と共に表示する
パフォーマンスの問題を特定する
最も遅く、最も失敗する要求を検出します。
- 要求を応答時間別に並べ替えてボトルネックを見つける
- エラー率が最も高い要求を特定する
- 低速な要求を依存関係と関連付ける
- デプロイ全体のパフォーマンス低下を追跡する
- ユーザーへの影響に基づいて最適化の優先順位を付ける
Live Stream を使用してデプロイを検証する
新しいリリースをデプロイするときに ライブ ストリーム を視聴する:
- 低下についてすぐに知る
- リアルタイムでエラー率を監視する (1 秒の更新)
- 失敗したリクエストをリアルタイムで確認する
- 依存関係の失敗を追跡する
- ロールアウトを完了する前にパフォーマンスを検証する
検出、診断: 迅速な問題の解決
アラートを受け取ったり、問題を検出したりすると、Application Insights には包括的な診断機能が用意されています。
ユーザーへの影響を評価する
影響を受けるユーザーの数を確認します。
- 影響を受けるユーザー数のテレメトリを照会する
- 影響の地理的分布を特定する
- 問題がすべてのユーザーまたは特定のセグメントに影響するかどうかを判断する
- ビジネスへの影響 (収益の損失、破棄されたトランザクション) を計算する
- ユーザーへの影響の重大度に基づいて解決の優先順位を付ける
KQL クエリの例:
requests
| where timestamp > ago(1h)
| where success == false
| summarize AffectedUsers = dcount(user_Id), FailedRequests = count() by resultCode
関連するテレメトリを関連付ける
エラーを例外、依存関係呼び出し、トレースと関連付けます。
- 操作 ID のリンク: 要求のすべてのテレメトリが操作 ID を共有する
- エンド ツー エンドのトランザクション ビュー: サービス間の完全な要求フローを確認する
- 例外の相関関係: 例外をトリガーした要求にリンクする
- 依存関係分析: 障害の原因となったダウンストリーム サービスを特定する
- ログの関連付け: 失敗した要求のコンテキストでアプリケーション ログを表示する
調査ワークフロー:
- 診断検索で失敗した要求から開始する
- 操作 ID を使用して関連するすべてのテレメトリを表示する
- 依存関係の呼び出しを調べて、低速または失敗したサービスを特定する
- 例外の詳細とスタック トレースを確認する
- アプリケーション ログで追加のコンテキストを確認する
詳細な診断ツール
プロファイラー、スナップショット、スタック ダンプ、トレース ログを調べます。
プロファイラー:
- コード レベルのパフォーマンスの内訳を確認する
- 最も多くの時間を消費したメソッドを特定する
- 非効率的なアルゴリズムまたはクエリを検索する
スナップショット デバッガー:
- 運用環境からメモリ スナップショットをキャプチャする
- 例外時にローカル変数の値を表示する
- ローカルで再現せずにデバッグする
スタック ダンプ:
- すべての例外の完全なスタック トレース
- 例外からソース コードへの移動
- エラーにつながる呼び出しチェーンについて
トレース ログ:
- 要求と関連付けられたアプリケーション ログ
- 分散サービス全体のログを検索する
- 重大度、時間範囲、カスタム プロパティでフィルター処理する
構築、測定、学習: データドリブン開発
構造化されたデータドリブン アプローチを使用して、デプロイする各新機能の有効性を測定します。
測定戦略を計画する
顧客が新しい UX またはビジネス機能を使用する方法を測定する計画:
開発前:
- 成功メトリック (導入率、コンバージョン率、エンゲージメント) を定義する
- 追跡する主要なユーザー アクションを特定する
- セグメント化基準 (ユーザーの種類、地域、デバイス) を決定する
- 比較のためのベースライン メトリックを確立する
- 機能の成功のターゲットを設定する
測定寸法:
- 養子縁組: この新機能を試すユーザーの割合は何パーセントですか?
- エンゲージメント: ユーザーはどのくらいの頻度で関与していますか?
- 完了: ユーザーはワークフローを完了しますか?
- パフォーマンス: この機能は適切に動作しますか?
- 満足: ユーザーは成功し、満足していますか?
カスタム テレメトリを実装する
カスタム テレメトリをコードに書き込み、ビジネス固有のイベントをキャプチャします。
カスタム イベント:
telemetryClient.TrackEvent("FeatureUsed",
properties: new Dictionary<string, string> {
{"FeatureName", "AdvancedSearch"},
{"UserTier", "Premium"}
},
metrics: new Dictionary<string, double> {
{"SearchResultCount", 42},
{"SearchDurationMs", 150}
});
カスタム メトリック:
telemetryClient.TrackMetric("CartValue", orderTotal);
telemetryClient.TrackMetric("ItemsInCart", itemCount);
インストルメンテーションのベスト プラクティス:
- 一貫した名前付け規則を使用します
- セグメント化に関連するプロパティを追加する
- テンポラル分析にタイムスタンプを含める
- 個人を特定できる情報 (PII) を追跡しない
- テレメトリを軽量に保つ (カーディナリティが高くないようにする)
データドリブンの意思決定を行う
次の開発サイクルは、テレメトリからのハード 証拠に基づいて行います。
分析ワークフロー:
- メトリックを比較する: 機能のパフォーマンスとベースライン
- セグメント分析: 異なるユーザー グループ間のパフォーマンス
- ファネル分析: 複数ステップのプロセスにおける離脱ポイント
- コーホート分析: この機能を採用したユーザーのリテンション期間
- 影響分析: ビジネス成果との相関関係
意思決定フレームワーク:
メトリックがターゲットを超える場合:
- 機能の拡張に投資する
- 同様の機能に学習を適用する
- 機能をより目立たせることを検討する
メトリックがターゲットを満たしている場合:
- 保守と監視
- フィードバックに基づく段階的な改善
- リソースを他の優先順位に移動する
メトリックのパフォーマンスが低い場合:
- その理由 (使いやすさ、発見可能性、価値提案) を分析する
- A/B テストの改善
- 成功へのパスがない場合は、非推奨を検討してください
シナリオの例: 新しいレコメンデーション エンジンでは、60% 導入が示されていますが、% 変換は 15 個のみです (ターゲットは 25%)。 分析では、推奨事項は正確ですが、UI は混乱します。 次のスプリントでは、アルゴリズムの機能強化ではなく UX の機能強化に重点を置いています。
はじめに: 実装のアプローチ
Application Insights は 、Microsoft Azure 内でホストされている多くのサービスの 1 つであり、分析とプレゼンテーションのためにテレメトリが送信されます。
[前提条件]
開始する前に、 Microsoft Azure のサブスクリプションが必要です。
サブスクリプション オプション:
- 無料サインアップ: 無料試用版にクレジット カードは必要ありません
- 従量 制: 使用した分だけ支払う
- エンタープライズ契約: 組織の交渉済み料金
- Azure for Students: 学生向けの無料クレジット
価格に関する考慮事項:Application Insights の基本的な価格プランを選択した場合、アプリケーションの使用量が大きくなるまで料金は発生しません。
- Free レベル: 最初の 5 GB/月のインジェストが含まれています
- GBあたりの支払い: 無料枠を超えると、取り込んだデータ分だけ支払う
- コミットメント レベル: 予測可能な使用量の割引
組織のアクセス: 組織に既にサブスクリプションがある場合は、Microsoft アカウントを追加できます。 アクセスについては、Azure 管理者に問い合わせてください。
実装手法
開始するには、いくつかの方法があります。 どちらが最適かから始めてください。 その他は後で追加できます。
方法 1: ランタイム インストルメンテーション
コードを変更せずにサーバー上の Web アプリをインストルメント化します。
長所:
- コードの更新を回避します。 再コンパイルまたは再デプロイは必要ありません
- 即時監視: 数分でテレメトリの収集を開始する
- SDK の依存関係なし: アプリケーションの依存関係を変更しない
- 運用環境対応: 既存の運用アプリケーションに対して安全
要件:
- サーバーへの管理者アクセス: 監視エージェントのインストールに必要
- サポートされているプラットフォームのみ: すべてのプラットフォームでランタイム インストルメンテーションがサポートされているわけではありません
サポートされているプラットフォーム:
- WINDOWS Server と IIS 7.5 以降
- ASP.NET アプリケーション (フレームワークまたはコア)
- Status Monitor または Application Insights エージェントをインストールします
- コードを変更せずに自動的にインストルメント化する
- Azure portal を使用して Application Insights を有効にする
- Azure App Service のワンクリック統合
- Azure Virtual Machines の VM 拡張機能
- コード変更がない自動インストルメンテーション
J2EE:
- Tomcat、JBoss、または WebLogic で実行されている Java アプリケーション
- エージェント ベースのインストルメンテーション
- 要求、依存関係、例外をキャプチャします
- Spring Boot および Jakarta EE に対応している
アプローチ 2: 開発時 SDK の統合
Application Insights をコードに追加して 、完全な制御とカスタマイズを行います。
長所:
- カスタム テレメトリ: ビジネス固有のイベントとメトリックを記述する
- フル コントロール: サンプリング、フィルター処理、プロセッサの構成
- すべてのプラットフォーム: Web アプリケーションに限定されない
- ローカル デバッグ: 開発中のテレメトリをテストする
要件:
- ソース コードへのアクセス: アプリケーションの変更と再コンパイル
- SDK の統合: NuGet/Maven/npm パッケージを追加する
- 開発時間: 初期セットアップとテストが必要
サポートされているプラットフォーム:
- Visual Studio 2013 アップデート 2 以降
- NuGet パッケージのインストール
- 自動インストルメンテーション + カスタム テレメトリ
- テレメトリ API の IntelliSense
Java:
- Maven または Gradle の依存関係
- Spring Boot の自動構成のサポート
- Jakarta EE と Micronaut フレームワーク
- カスタム イベントの手動インストルメンテーション
Node.js:
- npm パッケージのインストール
- Express、Koa、Hapi フレームワークのサポート
- 依存関係の自動追跡
- カスタム イベントとメトリックの追跡
- Python (Flask、Django)
- Ruby (Rails、Sinatra)
- PHP (Laravel, Symfony)
- Go、Rust、その他のコミュニティ SDK
クライアント側のインストルメンテーション
包括的な監視のために Web ページをインストルメント化します。
JavaScript SDK の機能:
- ページ ビュー: SPA でのナビゲーションの追跡
- AJAX 呼び出し: ブラウザーからの API 要求を監視する
- クライアント側の例外: JavaScript エラーをキャプチャする
- パフォーマンス メトリック: ページの読み込み時間、リソースのタイミング
- ユーザー分析: セッション追跡、ユーザー フロー
実装:
- HTML ページに JavaScript スニペットを追加する
- ページ ビューの自動追跡
- クライアントとサーバーのテレメトリを関連付ける
- React、Angular、Vue フレームワークと連携する
モバイル アプリケーションの監視
Visual Studio App Center と統合してモバイル アプリの使用状況を分析する:
モバイル プラットフォームのサポート:
- iOS (Swift、Objective-C)
- Android (Java、Kotlin)
- React Native
- Xamarin、Flutter
モバイル固有の機能:
- クラッシュ レポート
- 分析 (セッション、イベント、ユーザー プロパティ)
- プッシュ通知の追跡
- 配布とテストの統合
シンセティック監視
テストの種類:
- URL ping テスト: 単純なエンドポイントの可用性チェック
- 複数ステップの Web テスト: 記録されたユーザー シナリオ
- カスタムTrackAvailability: コードに基づく可用性追跡
テスト構成:
- 分散した場所から定期的に Web サイトに ping を実行する
- 5 つ以上のグローバル Azure リージョンからの監視
- エンドポイントが使用できなくなった場合にアラートを生成する
- ユーザーの観点から応答時間を測定する
適切なアプローチの選択
| Scenario | 推奨されるアプローチ |
|---|---|
| 既存の運用アプリ、コードを変更できない | ランタイム インストルメンテーション |
| 新しいアプリケーション開発 | 開発時の SDK 統合 |
| カスタム ビジネス イベントが必要 | SDK 統合 (必須) |
| Web アプリケーションのみ | ランタイム計装(簡略化) |
| モバイル アプリケーション | Visual Studio App Center + App Insights |
| 完全な監視 (サーバー + クライアント) | SDK 統合 + JavaScript スニペット |
| 外部のみの可用性 | 可用性テスト |