Application Insights でのデータの収集、保持、保存

ご利用のアプリに Application Insights SDK をインストールすると、アプリに関するテレメトリがクラウドに送信されます。 担当開発者は、送信されるデータ、データに対して発生すること、それを制御する方法について知りたいと考えます。 特に、機密データの送信、その保存先、安全性が重要です。

まず、手短に言えば次のようになります。

  • 「難しい設定なしで」動く標準の製品利用統計情報モジュールは、多くの場合、機密データをサービスに送信しません。 製品利用統計情報は、負荷指標、パフォーマンス指標、利用率指標、例外レポート、その他の診断データに関連します。 診断レポートに表示される主なユーザー データは URL です。 ただし、いかなる場合も、アプリでは URL にプレーンテキストで機密データを入力するべきではありません。
  • 診断と監視利用に役立つ追加のカスタム製品利用統計情報を送信するコードを記述できます。 (この拡張機能は Application Insights の優れた機能です。)手違いにより、このコードを記述し、個人データやその他の機密データが含まれてしまうことはあります。 アプリケーションがそのようなデータを利用する場合、記述するあらゆるコードに徹底したレビュー プロセスを適用してください。
  • アプリを開発してテストするとき、SDK により送信される内容は簡単に調査できます。 データは IDE とブラウザーのデバッグ出力ウィンドウに表示されます。
  • 新しい Application Insights リソースを作成するときに場所を選択できます。 リージョンごとの Application Insights の可用性の詳細については、「リージョン別の利用可能な製品」を参照してください。
  • 収集されたデータを確認します。ある状況では許可されても他の状況では許可されないデータが含まれている可能性があるためです。 この状況の典型的な例は、デバイス名です。 サーバーのデバイス名はプライバシーに影響しないので便利です。 電話やノート PC のデバイス名はプライバシーに影響するので、あまり役に立たない場合があります。 主にサーバーを対象に開発された SDK では、既定でデバイス名が収集されます。 この機能は、通常のイベントと例外の両方で上書きしなければならない場合があります。

この記事の残りの部分では、これらの点についてさらに詳しく説明します。 この記事は自己完結型であるため、直近のチームに入っていない同僚と共有できます。

Application Insights とは

Application Insights は、ライブ アプリケーションのパフォーマンスと使いやすさの改善に役立つ、Microsoft が提供するサービスです。 テスト中と公開後またはデプロイ後の両方で、実行中のアプリケーションを常時監視します。 Application Insights では、有益なメトリックを示すグラフとテーブルが作成されます。 たとえば、1 日の中でユーザー数が最も多い時間帯、アプリの反応性、アプリが依存している外部サービスのサービス性能などがわかります。 エラーやパフォーマンスの問題が発生した場合、テレメトリを調査し、原因を診断できます。 アプリの可用性やパフォーマンスに変化があった場合は、サービスからメールが届きます。

この機能を入手するには、アプリケーションに Application Insights SDK をインストールします。インストールすることでそのコードの一部になります。 アプリが実行されているとき、SDK はその操作を監視し、テレメトリを Application Insights (Microsoft Azure によってホストされるクラウド サービス) に送信します。 Application Insights は、Azure にホストされているアプリケーションだけでなく、あらゆるアプリケーションでも動作します。

Application Insights ではテレメトリを保存し、分析します。 分析を確認し、保存されている製品利用統計情報を検索するには、Azure アカウントにサインインし、アプリケーションの Application Insights リソースを開きます。 データへのアクセスをチームの他のメンバーや指定した Azure サブスクライバーと共有することもできます。

Application Insights から、たとえば、データベースや外部ツールにデータをエクスポートできます。 サービスから取得した特別なキーを各ツールに提供します。 キーは必要に応じて取り消すことができます。

Application Insights SDK は、さまざまな種類のアプリケーションで使用できます。

  • Java EE または ASP.NET の独自のサーバー、または Azure でホストされている Web サービス
  • Web クライアント、つまり Web ページで実行されているコード
  • デスクトップ アプリとサービス
  • Windows Phone、iOS、Android などのデバイス アプリ

これらはすべて同じサービスに製品利用統計情報を送信します。

注意

インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。

どのようなデータが収集されますか。

データ ソースは 3 つあります。

  • SDK は開発時または実行時にアプリと統合します。 アプリケーションの種類が違えば SDK も違います。 Web ページ用の SDK もあります。ページと共にユーザーのブラウザーに読み込まれます。

    • それぞれの SDK には多くのモジュールがあり、さまざまな手法でさまざまな種類の製品利用統計情報を収集します。
    • デプロイ時に SDK をインストールする場合、標準のモジュールに加え、その API を利用し、独自の製品利用統計情報を送信できます。 このカスタム製品利用統計情報にあらゆるデータを含め、送信できます。
  • 一部の Web サーバーには、アプリと共に実行され、CPU、メモリ、ネットワーク占有率に関する製品利用統計情報を送信するエージェントもあります。 たとえば、Azure VM、Docker ホスト、Java アプリケーション サーバーにそのようなエージェントがあります。

  • 可用性テスト は Microsoft が実行するプロセスであり、定期的な間隔で要求を Web アプリに送信します。 結果は Application Insights に送信されます。

どのような種類のデータが収集されますか?

主なカテゴリは次のとおりです。

  • Web サーバーのテレメトリ: HTTP 要求。 URI、要求の処理にかかる時間、応答コード、クライアント IP アドレス。 Session id.
  • Web ページ: ページ、ユーザー、セッションの数。 ページの読み込み時間。 例外。 AJAX 呼び出し。
  • パフォーマンス カウンター: メモリ、CPU、IO、ネットワーク占有率。
  • クライアントとサーバーのコンテキスト: OS、ロケール、デバイスの種類、ブラウザー、画面の解像度。
  • 例外とクラッシュ: スタック ダンプ、build id、CPU タイプ。
  • 依存関係: REST、SQL、AJAX など、外部サービスの呼び出し。 URI または接続文字列、期間、成功、コマンド。
  • 可用性テスト: テストとステップの期間、応答。
  • トレース ログカスタム テレメトリ: コード化してログまたはテレメトリに入れるすべて。

詳細については、「Application Insights によって送信されるデータ」セクションを参照してください。

収集された内容はどのような方法で検証しますか。

Visual Studio でアプリを開発している場合、デバッグ モードでアプリを実行してください (F5)。 テレメトリは [出力] ウィンドウに表示されます。 そこから、それをコピーし、JSON として書式設定すれば、調査が簡単になります。

Visual Studio のデバッグ モードでのアプリの実行を示すスクリーンショット。

[診断] ウィンドウには、さらに読みやすいビューもあります。

Web ページの場合、ブラウザーのデバッグ ウィンドウを開きます。 F12 を押し、[ネットワーク] タブを開きます。

[ネットワーク] タブをいたところを示すスクリーンショット。

送信前にテレメトリを絞り込むコードを記述できますか。

テレメトリ プロセッサ プラグインを記述する必要があります。

データはどれだけの期間保持されますか。

生データ ポイント (つまり、Analytics でクエリを実行したり Search で調べることができる項目) は、最大 730 日間保持されます。 30、60、90、120、180、270、365、550 または 730 日間の保有期間を選択できます。 730 日以上データを保持する必要がある場合は、連続エクスポートを使用して、データ インジェスト中にストレージ アカウントにコピーすることができます。

90 日より長く保持されるデータには、追加料金が発生します。 Application Insights の価格の詳細については、「Azure Monitor の価格」ページを参照してください。

集計されたデータ (つまり、メトリックス エクスプローラーに表示されるカウント、平均、その他の統計データ) は、1 分の詳細度であれば 90 日の期間にわたって保持されます。

デバッグ スナップショットは 15 日間格納されます。 この保持ポリシーは、アプリケーションごとに設定されます。 この値を増やす必要がある場合は、Azure portal でサポート ケースを開くことによって増加を要求できます。

誰がデータにアクセスできますか。

お客様と、組織アカウントを持っている場合はチーム メンバーが、データを見ることができます。

お客様とチーム メンバーはデータをエクスポートできます。また、他の場所にデータをコピーしたり、第三者にデータを渡したりすることもできます。

アプリから Application Insights に送信された情報を Microsoft はどのように利用しますか。

Microsoft は、お客様にサービスを提供する目的でのみデータを使用します。

データが保持されている場所はどこですか。

新しい Application Insights リソースを作成するときに場所を選択できます。 Application Insights の可用性の詳細については、「リージョン別の利用可能な製品」を参照してください。

データのセキュリティは保たれますか。

Application Insights は Azure サービスのひとつです。 セキュリティ ポリシーについては、Azure のセキュリティ、プライバシー、およびコンプライアンスに関するホワイト ペーパーをご覧ください。

データは、Microsoft Azure サーバーに保管されます。 Azure portal のアカウントの場合、アカウントの制限は Azure のセキュリティ、プライバシー、コンプライアンスの文書に記載されています。

Microsoft のスタッフによるデータへのアクセスは制限されます。 Microsoft は、Application Insights の使用をサポートするために必要であれば、ユーザーからアクセス許可を得た上でデータにアクセスします。

このほか、Application Insights の機能の向上に役立てるために、すべてのお客様のアプリケーションのデータ (データ レート、トレースの平均サイズなど) を集計のうえ使用します。

だれかのテレメトリが Application Insights データに干渉する可能性はありますか。

インストルメンテーション キーを使用して、他のユーザーがお客様のアカウントにさらにテレメトリを送信できます。 このキーは、Web ページのコードにあります。 追加データの量が多いと、アプリのパフォーマンスと使用状況がメトリクスに適切に示されなくなる可能性があります。

コードを他のプロジェクトと共有する場合は、インストルメンテーション キーを必ず削除してください。

データは暗号化されますか。

すべてのデータが、保存時とデータ センター間での移動時に暗号化されます。

アプリケーションから Application Insights サーバーに送信されるときにデータは暗号化されますか。

はい。 ほぼすべての SDK からポータル (Web サーバー、デバイス、HTTPS Web ページなど) への送信に HTTPS が使用されます。

SDK では一時的なローカル ストレージが作成されますか?

はい。 特定のテレメトリ チャネルでは、エンドポイントに到達できない場合、データをローカルで保持します。 次の段落では、影響を受けるフレームワークとテレメトリ チャネルについて説明します。

  • ローカル ストレージを利用するテレメトリ チャネルは、TEMP または APPDATA ディレクトリ内に一時ファイルを作成します。これらは、アプリケーションを実行している特定のアカウントだけに制限されます。 この状況は、エンドポイントが一時的に使用できなくなったか、または調整制限に達した場合に発生する可能性があります。 この問題が解決すると、テレメトリ チャネルでは、すべての新しいデータおよび保持されているデータの送信を再開します。
  • この保持されているデータはローカルでは暗号化されません。 この問題が懸念事項である場合は、データを確認して、プライベート データのコレクションを制限します。 詳細については、個人データをエクスポートして削除に関するページを参照してください。
  • 顧客がこのディレクトリを特定のセキュリティ要件で構成する必要がある場合は、フレームワークごとに構成できます。 アプリケーションを実行しているプロセスにこのディレクトリへの書き込みアクセス権があることを確認します。 また、意図しないユーザーによってテレメトリが読み取られることを防ぐために、このディレクトリが保護されていることを確認します。

Java

フォルダー C:\Users\username\AppData\Local\Temp はデータを保持するために使用されます。 この場所は config ディレクトリからは構成できす、このフォルダーにアクセスするためのアクセス許可は、必要な資格情報を持つ特定のユーザーに制限されています。 詳細については、実装に関するページを参照してください。

.NET

既定では、ServerTelemetryChannel は、現在のユーザーのローカル アプリ データ フォルダー %localAppData%\Microsoft\ApplicationInsights または一時フォルダー %TMP% を使用します。 詳細については、実装に関するページを参照してください。

構成ファイルを使用する場合:

<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel,   Microsoft.AI.ServerTelemetryChannel">
    <StorageFolder>D:\NewTestFolder</StorageFolder>
</TelemetryChannel>

コードを使用する場合:

  • 構成ファイルから ServerTelemetryChannel を削除します。

  • 構成に次のスニペットを追加します。

    ServerTelemetryChannel channel = new ServerTelemetryChannel();
    channel.StorageFolder = @"D:\NewTestFolder";
    channel.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryChannel = channel;
    

NetCore

既定では、ServerTelemetryChannel は、現在のユーザーのローカル アプリ データ フォルダー %localAppData%\Microsoft\ApplicationInsights または一時フォルダー %TMP% を使用します。 詳細については、実装に関するページを参照してください。

Linux 環境では、ストレージ フォルダーが指定されていない限り、ローカル ストレージは無効になります。

Note

リリース 2.15.0-beta3 以降、ローカル ストレージは Linux、Mac、Windows で自動的に作成されるようになりました。 Windows 以外のシステムの場合、次のロジックに基づいてローカル ストレージ フォルダーが自動的に作成されます。

  • ${TMPDIR}: ${TMPDIR} 環境変数が設定されている場合、この場所が使用されます。
  • /var/tmp: 前述の場所が存在しない場合は、/var/tmp を試します。
  • /tmp: 前述のどちらの場所も存在しない場合は、tmp を試します。
  • これらの場所のいずれも存在しない場合、ローカル ストレージは作成されません。以前と同様に、手動による構成が必要になります。

完全な実装の詳細については、「ServerTelemetryChannel では、Windows 以外の環境で一時的なエラーが発生した場合に、既定のフォルダーにテレメトリ データを格納する」を参照してください。

次のコード スニペットは、Startup.cs クラスの ConfigureServices() メソッドで ServerTelemetryChannel.StorageFolder を設定する方法を示しています。

services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});

詳細については、AspNetCore のカスタム構成に関するページを参照してください。

Node.js

既定では、%TEMP%/appInsights-node{INSTRUMENTATION KEY} はデータを保持するために使用されます。 このフォルダーにアクセスするためのアクセス許可は、現在のユーザーと管理者に制限されています。 詳細については、実装に関するページを参照してください。

フォルダー プレフィックス appInsights-node は、Sender.ts にある静的変数 Sender.TEMPDIR_PREFIX のランタイム値を変更することによって上書きできます。

JavaScript (ブラウザー)

データを永続化するには、HTML5 セッション ストレージを使用します。 AI_bufferAI_sent_buffer という 2 つの別のバッファーが使用されます。 バッチ処理され、送信を待機しているテレメトリは AI_buffer に格納されます。 送信されたテレメトリは、インジェスト サーバーが正常に受信されたことを応答するまで AI_sent_buffer に配置されます。

テレメトリが正常に受信されると、すべてのバッファーから削除されます。 一時的なエラーが発生した場合 (たとえば、ユーザーがネットワーク接続を失った場合)、正常に受信されるか、インジェスト サーバーがテレメトリが無効であると応答するまで (たとえば、不正なスキーマ、古すぎる)、テレメトリは AI_buffer に格納されたままです。

テレメトリ バッファーを無効にするには、enableSessionStorageBufferfalse に設定します。 セッション ストレージがオフの場合、代わりにローカル アレイが永続ストレージとして使用されます。 JavaScript SDK はクライアント デバイス上で実行されるため、ユーザーはブラウザーの開発者ツールを介してこの格納場所にアクセスできます。

OpenCensus Python

既定では、OpenCensus Python SDK は現在のユーザー フォルダー %username%/.opencensus/.azure/ を使用します。 このフォルダーにアクセスするためのアクセス許可は、現在のユーザーと管理者に制限されています。 詳細については、実装に関するページを参照してください。 永続化されたデータを含むフォルダーは、テレメトリを生成した Python ファイルの名前が付けられます。

使用しているエクスポーターのコンストラクターで storage_path パラメーターを渡すことによって、ストレージ ファイルの場所を変更できます。

AzureLogHandler(
  connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000',
  storage_path='<your-path-here>',
)

TLS 1.2 を使用して Application Insight にデータを送信するにはどうすればよいですか。

Application Insight エンドポイントへのデータの転送時のセキュリティを保証するため、少なくとも Transport Layer Security (TLS) 1.2 を使用するようにアプリケーションを構成することを強くお勧めします。 これより前のバージョンの TLS/Secure Sockets Layer (SSL) は脆弱であることが判明しています。 現在も下位互換性を確保するために動作していますが、推奨されません。 業界は、これらの古いプロトコルのサポートを中止する方向へ急速に動いています。

PCI Security Standards Council は、2018 年 6 月 30 日を期限として、TLS/SSL の以前のバージョンを無効にし、より安全なプロトコルにアップグレードすることを求めています。 Azure でレガシー サポートが廃止されたら、アプリケーションまたはクライアントが TLS 1.2 以上で通信できない場合は Application Insights にデータを送信できなくなります。 アプリケーションの TLS のサポートをテストおよび検証する方法は、オペレーティング システムまたはプラットフォーム、およびアプリケーションで使用する言語またはフレームワークによって異なります。

必要な場合を除き、TLS 1.2 のみを使用するようにアプリケーションを明示的に設定することはお勧めしません。 このように設定すると、TLS 1.3 など、より新しく、より安全なプロトコルを自動的に検出して利用できるようにするプラットフォーム レベルのセキュリティ機能が無効になる可能性があるためです。 アプリケーションのコードを徹底的に監査して、特定の TLS/SSL バージョンのハードコーディングを確認することをお勧めします。

プラットフォーム/言語に固有のガイダンス

プラットフォーム/言語 サポート 詳細情報
Azure App Service サポートされています。構成が必要な場合があります。 サポートは 2018 年 4 月に発表されました。 構成の詳細のお知らせを参照してください。
Azure Function App サポートされています。構成が必要な場合があります。 サポートは 2018 年 4 月に発表されました。 構成の詳細のお知らせを参照してください。
.NET サポートされています。長期サポート (LTS)。 詳細な構成情報については、こちらの手順を参照してください。
Status Monitor サポートされています。構成が必要です。 Status Monitor は、TLS 1.2 をサポートするために OS 構成 + .NET 構成に依存します。
Node.js サポートされています。v10.5.0 では構成が必要な場合があります。 アプリケーションに固有の構成については、公式の Node.js TLS/SSL ドキュメントを使用してください。
Java サポートされています。JDK の TLS 1.2 のサポートは、JDK 6 更新プログラム 121 および JDK 7 で追加されました。 JDK 8 では、既定で TLS 1.2 が使用されます。
Linux Linux ディストリビューションでは、TLS 1.2 のサポートに関して OpenSSL に依存する傾向があります。 OpenSSL の Changelog を参照して、使用している OpenSSL のバージョンがサポートされていることを確認してください。
Windows 8.0 - 10 サポートされています。既定で有効になっています。 既定の設定を使用していることを確認します。
Windows Server 2012 - 2016 サポートされています。既定で有効になっています。 既定の設定を使用していることを確認します。
Windows 7 SP1 および Windows Server 2008 R2 SP1 サポートされていますが、既定では有効になっていません。 有効にする方法の詳細については、「トランスポート層セキュリティ (TLS) のレジストリ設定」を参照してください。
Windows Server 2008 SP2 TLS 1.2 のサポートには、更新プログラムが必要です。 Windows Server 2008 SP2 に TLS 1.2 のサポートを追加する更新プログラムに関するページを参照してください。
Windows Vista サポートされていません。 該当なし

Linux ディストリビューションで実行されている OpenSSL のバージョンを確認する

インストールされている OpenSSL のバージョンを確認するには、ターミナルを開き、次のコマンドを実行します。

openssl version -a

Linux 上でテスト TLS 1.2 トランザクションを実行する

Linux システムが TLS 1.2 で通信できるかどうかを確認する基本的な予備テストを実行するには、ターミナルを開いて、次のように実行してください。

openssl s_client -connect bing.com:443 -tls1_2

Application Insights に格納される個人データ

この問題の詳細については、「Log Analytics および Application Insights 内の個人データの管理」を参照してください。

ユーザーは Application Insights を無効にできますか。

直接無効にすることはできません。 ユーザーが Application Insights を無効にするために操作できるスイッチはありません。

アプリケーションでそのような機能を実装することはできます。 すべての SDK には、テレメトリの収集を無効にする API 設定が含まれています。

Application Insights によって送信されるデータ

SDK はプラットフォームごとに異なり、インストールできるコンポーネントは複数あります 詳細については、「Application Insights の概要」をご覧ください。 各コンポーネントは、それぞれ異なるデータを送信します。

さまざまなシナリオで送信されるデータのクラス

操作 収集されるデータのクラス (次の表を参照)
Application Insights SDK を .NET Web プロジェクトに追加する ServerContext
Inferred
Perf counters
Requests
例外
Session
users
Status Monitor を IIS にインストールする 依存関係
ServerContext
Inferred
Perf counters
Application Insights SDK を Java Web アプリに追加する ServerContext
Inferred
Request
Session
users
JavaScript SDK を Web ページに追加する ClientContext
Inferred
ページ
ClientPerf
Ajax
既定のプロパティを定義する Properties (すべての標準イベントおよびカスタム イベント)
TrackMetric を呼び出す 数値
Properties
Track* を呼び出す イベント名
Properties
TrackException を呼び出す 例外
Stack dump
Properties
SDK はデータを収集できません。 次に例を示します。
- パフォーマンス カウンターにアクセスできない
- テレメトリ初期化子で例外が発生した
SDK diagnostics

他のプラットフォームの SDK については、該当するドキュメントを参照してください。

収集されるデータのクラス

収集されるデータのクラス 含まれるデータ (網羅的なリストではありません)
Properties コードによって決まる任意のデータ
DeviceContext Id、IP、ロケール、デバイス モデル、ネットワーク、ネットワークの種類、OEM の名前、画面解像度、ロール インスタンス、ロール名、デバイスの種類
ClientContext OS、ロケール、言語、ネットワーク、ウィンドウの解像度
Session session id
ServerContext コンピューター名、ロケール、OS、デバイス、ユーザー セッション、ユーザー コンテキスト、操作
Inferred IP アドレス、タイムスタンプ、OS、ブラウザーからの位置情報
メトリック メトリックの名前と値
events イベントの名前と値
PageViews URL とページ名または画面名
Client perf URL/ページ名、ブラウザーの読み込み時間
Ajax Web ページからサーバーへの HTTP 呼び出し
Requests URL、期間、応答コード
依存関係 種類 (SQL、HTTP、...)、接続文字列または URI、同期または非同期、期間、成功、SQL ステートメント (Status Monitor による)
例外 種類、メッセージ、呼び出し履歴、ソース ファイル、行の番号、thread id
Crashes Process idparent process idcrash thread id。アプリケーションの修正プログラム、id、ビルド。例外の種類、アドレス、理由。難読化されたシンボルとレジスタ、バイナリの開始アドレスと終了アドレス、バイナリ名とパス、CPU の種類
Trace メッセージ と重大度レベル
Perf counters プロセッサ時間、使用可能なメモリ、要求レート、例外レート、プロセスのプライベート バイト、IO レート、要求の期間、要求のキューの長さ
可用性 Web テストの応答コード、各テスト ステップの期間、テスト名、タイムスタンプ、成功、応答時間、テストの場所
SDK diagnostics トレース メッセージまたは例外

ApplicationInsights.config を編集して、データの一部をオフにすることができます

Note

クライアント IP は地理的な場所の推論に使用されますが、既定では、IP データは格納されなくなっており、関連するフィールドにはすべてゼロが書き込まれます。 個人データの処理の詳細については、「Log Analytics および Application Insights 内の個人データの管理」を参照してください。 IP アドレスのデータを格納する必要がある場合は、「位置情報と IP アドレスの処理」のオプションについての説明をご覧ください。

収集後にデータを変更または更新できますか。

いいえ。 データは読み取り専用であり、消去機能による削除のみが可能です。 詳細については、「Log Analytics と Application Insights に格納される個人データに関するガイダンス」を参照してください。

謝辞

この製品には、MaxMind によって作成された GeoLite2 データが含まれています。