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 を共有する
  • エンド ツー エンドのトランザクション ビュー: サービス間の完全な要求フローを確認する
  • 例外の相関関係: 例外をトリガーした要求にリンクする
  • 依存関係分析: 障害の原因となったダウンストリーム サービスを特定する
  • ログの関連付け: 失敗した要求のコンテキストでアプリケーション ログを表示する

調査ワークフロー:

  1. 診断検索で失敗した要求から開始する
  2. 操作 ID を使用して関連するすべてのテレメトリを表示する
  3. 依存関係の呼び出しを調べて、低速または失敗したサービスを特定する
  4. 例外の詳細とスタック トレースを確認する
  5. アプリケーション ログで追加のコンテキストを確認する

詳細な診断ツール

プロファイラー、スナップショット、スタック ダンプ、トレース ログを調べます。

プロファイラー:

  • コード レベルのパフォーマンスの内訳を確認する
  • 最も多くの時間を消費したメソッドを特定する
  • 非効率的なアルゴリズムまたはクエリを検索する

スナップショット デバッガー:

  • 運用環境からメモリ スナップショットをキャプチャする
  • 例外時にローカル変数の値を表示する
  • ローカルで再現せずにデバッグする

スタック ダンプ:

  • すべての例外の完全なスタック トレース
  • 例外からソース コードへの移動
  • エラーにつながる呼び出しチェーンについて

トレース ログ:

  • 要求と関連付けられたアプリケーション ログ
  • 分散サービス全体のログを検索する
  • 重大度、時間範囲、カスタム プロパティでフィルター処理する

構築、測定、学習: データドリブン開発

構造化されたデータドリブン アプローチを使用して、デプロイする各新機能の有効性を測定します。

測定戦略を計画する

顧客が新しい 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) を追跡しない
  • テレメトリを軽量に保つ (カーディナリティが高くないようにする)

データドリブンの意思決定を行う

次の開発サイクルは、テレメトリからのハード 証拠に基づいて行います。

分析ワークフロー:

  1. メトリックを比較する: 機能のパフォーマンスとベースライン
  2. セグメント分析: 異なるユーザー グループ間のパフォーマンス
  3. ファネル分析: 複数ステップのプロセスにおける離脱ポイント
  4. コーホート分析: この機能を採用したユーザーのリテンション期間
  5. 影響分析: ビジネス成果との相関関係

意思決定フレームワーク:

メトリックがターゲットを超える場合:

  • 機能の拡張に投資する
  • 同様の機能に学習を適用する
  • 機能をより目立たせることを検討する

メトリックがターゲットを満たしている場合:

  • 保守と監視
  • フィードバックに基づく段階的な改善
  • リソースを他の優先順位に移動する

メトリックのパフォーマンスが低い場合:

  • その理由 (使いやすさ、発見可能性、価値提案) を分析する
  • 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 の依存関係なし: アプリケーションの依存関係を変更しない
  • 運用環境対応: 既存の運用アプリケーションに対して安全

要件:

  • サーバーへの管理者アクセス: 監視エージェントのインストールに必要
  • サポートされているプラットフォームのみ: すべてのプラットフォームでランタイム インストルメンテーションがサポートされているわけではありません

サポートされているプラットフォーム:

オンプレミスまたは VM 上の IIS:

  • WINDOWS Server と IIS 7.5 以降
  • ASP.NET アプリケーション (フレームワークまたはコア)
  • Status Monitor または Application Insights エージェントをインストールします
  • コードを変更せずに自動的にインストルメント化する

Azure Web アプリまたは VM:

  • 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 (ASP.NET):

  • 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 スニペット
外部のみの可用性 可用性テスト