次の方法で共有


Application Insights for Java 2.x

注意事項

この記事は Application Insights Java 2.x に適用されます。これは 推奨されなくなりました

最新バージョンのドキュメントについては、 Application Insights Java 3.x を参照してください。

この記事では、Application Insights Java 2.x を使用する方法について説明します。 この記事では、次の方法について説明します:

  • 最初に、要求のインストルメント化、依存関係の追跡、パフォーマンス カウンターの収集、パフォーマンスの問題と例外の診断、アプリでのユーザーの操作を追跡するコードの記述を行う方法について説明します。
  • Application Insights ポータルを使用して、トレース ログを Application Insights に送信し、調査します。
  • Java Web アプリで依存関係、キャッチされた例外、メソッドの実行時間を監視します。
  • Java Web アプリでテレメトリをフィルター処理します。
  • collectdを使用して、Application Insights の Linux システム パフォーマンス メトリックを調べる。
  • Java 仮想マシン (JVM) ベースのアプリケーション コードのメトリックを測定します。 Micrometer アプリケーション監視を使用して、お気に入りの監視システムにデータをエクスポートします。

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

Java Web プロジェクトで Application Insights を始める方法

このセクションでは、Application Insights SDK を使用して、要求のインストルメント化、依存関係の追跡、パフォーマンス カウンターの収集、パフォーマンスの問題と例外の診断、アプリでのユーザーの操作を追跡するコードの記述を行います。

Application Insights は、ライブ アプリケーションのパフォーマンスと使用状況を理解するのに役立つ、Web 開発者向けの拡張可能な分析サービスです。 Application Insights では、Linux、Unix、または Windows で実行されている Java アプリがサポートされます。

[前提条件]

必要なもの:

  • アクティブなサブスクリプションを持つ Azure アカウント。 アカウントは無料で作成できます。
  • 機能している Java アプリケーション。

Application Insights インストルメンテーション キーを取得する

  1. Azure portal にサインインします。

  2. Azure portal で、Application Insights リソースを作成します。 アプリケーションの種類を Java Web アプリケーションに設定します。

  3. 新しいリソースのインストルメンテーション キーを見つけます。 このキーは、間もなくコード プロジェクトに貼り付ける必要があります。

    インストルメンテーション キーが強調表示されている Azure portal の Application Insights リソースの [概要] ウィンドウのスクリーンショット。

Application Insights SDK for Java をプロジェクトに追加する

プロジェクトの種類を選択します。

ビルドに Maven を使用するようにプロジェクトが既に設定されている場合は、次のコードを pom.xml ファイルにマージします。 次に、プロジェクトの依存関係を更新して、バイナリをダウンロードします。

    <dependencies>
      <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <!-- or applicationinsights-web for manual web filter registration -->
        <!-- or applicationinsights-core for bare API -->
        <version>2.6.4</version>
      </dependency>
    </dependencies>

よく寄せられる質問

  • -web-auto-web、および-coreコンポーネントの関係は何ですか?

    • applicationinsights-web-auto では、実行時に Application Insights サーブレット フィルターを自動的に登録することで、HTTP サーブレット要求数と応答時間を追跡するメトリックが提供されます。
    • applicationinsights-web では、HTTP サーブレット要求数と応答時間を追跡するメトリックも提供されます。 ただし、アプリケーションで Application Insights サーブレット フィルターを手動で登録する必要があります。
    • applicationinsights-core は、アプリケーションがサーブレットベースでない場合に、基本的なAPIが提供されます。
  • SDK を最新バージョンに更新するにはどうすればよいですか?

    • 2020 年 11 月の時点で、Java アプリケーションを監視するために、Application Insights Java 3.x を使用することをお勧めします。 開始方法の詳細については、 Application Insights Java 3.x を参照してください。

ApplicationInsights.xml ファイルを追加する

ApplicationInsights.xml をプロジェクトのリソース フォルダーに追加するか、プロジェクトの配置クラス パスに追加されていることを確認します。 次の XML をコピーします。

インストルメンテーション キーを、Azure portal から取得したキーに置き換えます。

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">

   <!-- The key from the portal: -->
   <InstrumentationKey>** Your instrumentation key **</InstrumentationKey>

   <!-- HTTP request component (not required for bare API) -->
   <TelemetryModules>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebRequestTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebSessionTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebUserTrackingTelemetryModule"/>
   </TelemetryModules>

   <!-- Events correlation (not required for bare API) -->
   <!-- These initializers add context data to each event -->
   <TelemetryInitializers>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationIdTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationNameTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebSessionTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserAgentTelemetryInitializer"/>
   </TelemetryInitializers>

</ApplicationInsights>

必要に応じて、構成ファイルは、アプリケーションからアクセスできる任意の場所に配置できます。 システム プロパティ -Dapplicationinsights.configurationDirectory は、 ApplicationInsights.xmlを含むディレクトリを指定します。 たとえば、 E:\myconfigs\appinsights\ApplicationInsights.xml にある構成ファイルは、プロパティ -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights"で構成されます。

  • インストルメンテーション キーはテレメトリのすべての項目と共に送信され、リソースに表示するように Application Insights に指示します。
  • HTTP 要求コンポーネントは省略可能です。 要求と応答時間に関するテレメトリがポータルに自動的に送信されます。
  • イベントの相関関係は、HTTP 要求コンポーネントへの追加です。 サーバーが受信した各要求に識別子を割り当てます。 次に、この識別子をプロパティとしてテレメトリのすべての項目にプロパティ Operation.Idとして追加します。 これにより、 診断検索でフィルターを設定することで、各要求に関連付けられているテレメトリを関連付けることができます。

インストルメンテーション キーを設定する別の方法

Application Insights SDK は、次の順序でキーを検索します。

  • システムのプロパティ: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
  • 環境変数: APPINSIGHTS_INSTRUMENTATIONKEY
  • 構成ファイル: ApplicationInsights.xml

コードで設定することもできます。

    String instrumentationKey = "00000000-0000-0000-0000-000000000000";

    if (instrumentationKey != null)
    {
        TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
    }

エージェントの追加

Java エージェントをインストール して、送信 HTTP 呼び出し、JDBC クエリ、アプリケーション ログ、およびより適切な操作の名前付けをキャプチャします。

アプリケーションを実行する

開発用コンピューターでデバッグ モードで実行するか、サーバーに発行します。

Application Insights でテレメトリを表示する

Azure portal で Application Insights リソースに戻ります。

HTTP 要求データが概要ウィンドウに表示されます。 存在しない場合は、数秒待ってから [ 最新の情報に更新] を選択します。

概要サンプル データを示すスクリーンショット。

詳しく知るメトリックについて。

グラフをクリックすると、より詳細な集計メトリックが表示されます。

Application Insights のエラー ウィンドウとグラフを示すスクリーンショット。

インスタンス データ

特定の要求の種類をクリックして、個々のインスタンスを表示します。

特定のサンプル ビューへのドリルインを示すスクリーンショット。

Log Analytics: 強力なクエリ言語

より多くのデータを蓄積すると、クエリを実行してデータを集計し、個々のインスタンスを見つけることができます。 Log Analytics は、パフォーマンスと使用状況を理解し、診断を目的とした強力なツールです。

Azure portal での Log Analytics の例を示すスクリーンショット。

サーバーにアプリをインストールする

次に、アプリをサーバーに発行し、ユーザーがアプリを使用できるようにして、ポータルにテレメトリが表示されるのを確認します。

  • アプリケーションが次のポートにテレメトリを送信することをファイアウォールで許可していることを確認します。

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • 送信トラフィックをファイアウォール経由でルーティングする必要がある場合は、 http.proxyHost および http.proxyPortシステム プロパティを定義します。

  • Windows サーバーで、次のコマンドをインストールします。

Azure App Service、Azure Kubernetes Service、VM 構成

Azure リソース プロバイダーで実行されているアプリケーションを監視する最も簡単で最も簡単な方法は、 Application Insights Java 3.x を使用することです。

例外と要求エラー

未処理の例外と要求エラーは、Application Insights Web フィルターによって自動的に収集されます。

他の例外に関するデータを収集するには、 trackException() の呼び出しをコードに挿入します。

メソッド呼び出しと外部依存関係を監視する

Java エージェントをインストールして、ログが指定された内部メソッドと JDBC を介して行われた呼び出しをタイミングデータと共に記録し、自動で操作に名前を付けます。

W3C 分散トレース

Application Insights Java SDK で W3C 分散トレースがサポートされるようになりました。

受信 SDK の構成については、 Application Insights のテレメトリの相関関係に関するページで詳しく説明します。

送信 SDK の構成は、 AI-Agent.xml ファイルで定義されます。

性能カウンター

[ 調査>メトリック ] を選択して、さまざまなパフォーマンス カウンターを表示します。

プロセスプライベート バイトが選択されている Azure portal の Application Insights リソースの [メトリック] ウィンドウを示すスクリーンショット。

パフォーマンス カウンターコレクションをカスタマイズする

パフォーマンス カウンターの標準セットのコレクションを無効にするには、 ApplicationInsights.xml ファイルのルート ノードの下に次のコードを追加します。

    <PerformanceCounters>
       <UseBuiltIn>False</UseBuiltIn>
    </PerformanceCounters>

より多くのパフォーマンス カウンターを収集する

収集するパフォーマンス カウンターをさらに指定できます。

JMX カウンター (Java 仮想マシンによって公開)
    <PerformanceCounters>
      <Jmx>
        <Add objectName="java.lang:type=ClassLoading" attribute="TotalLoadedClassCount" displayName="Loaded Class Count"/>
        <Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.used" displayName="Heap Memory Usage-used" type="composite"/>
      </Jmx>
    </PerformanceCounters>
  • displayName: Application Insights ポータルに表示される名前。
  • objectName: JMX オブジェクト名。
  • attribute: フェッチする JMX オブジェクト名の属性。
  • type (省略可能): JMX オブジェクトの属性の型:
    • 既定値: int や long などの単純型。
    • composite: パフォーマンス カウンター データは、 Attribute.Dataの形式です。
    • tabular: パフォーマンス カウンター データはテーブル行の形式です。
Windows パフォーマンス カウンター

Windows パフォーマンス カウンター は、(フィールドがクラスのメンバーであるのと同じ方法で) カテゴリのメンバーです。 カテゴリはグローバルにすることも、番号付きインスタンスまたは名前付きインスタンスを持つこともあります。

    <PerformanceCounters>
      <Windows>
        <Add displayName="Process User Time" categoryName="Process" counterName="%User Time" instanceName="__SELF__" />
        <Add displayName="Bytes Printed per Second" categoryName="Print Queue" counterName="Bytes Printed/sec" instanceName="Fax" />
      </Windows>
    </PerformanceCounters>
  • displayName: Application Insights ポータルに表示される名前。
  • categoryName: このパフォーマンス カウンターが関連付けられているパフォーマンス カウンター カテゴリ (パフォーマンス オブジェクト)。
  • counterName: パフォーマンス カウンターの名前。
  • instanceName: パフォーマンス カウンター カテゴリ インスタンスの名前、または空の文字列 ("") (カテゴリに 1 つのインスタンスが含まれている場合)。 categoryNameProcessされ、収集するパフォーマンス カウンターが、アプリが実行されている現在の JVM プロセスからのものである場合は、"__SELF__"を指定します。

Unix パフォーマンス カウンター

Application Insights プラグイン付きの collectd をインストールすると、さまざまなシステムおよびネットワーク データを取得できます。

ユーザーとセッションのデータを取得する

次に、Web サーバーからテレメトリを送信します。 アプリケーションの完全な 360 度ビューを取得するには、さらに監視を追加できます。

独自のテレメトリを送信する

SDK をインストールしたので、API を使用して独自のテレメトリを送信できます。

可用性 Web テスト

Application Insights では、Web サイトを定期的にテストして、Web サイトが稼働していて適切に応答していることを確認できます。

可用性 Web テストを設定する方法の詳細について説明します。

トラブルシューティング

専用のトラブルシューティングに関する記事をご覧ください。

アプリケーション ホストとインジェスト サービスの間の接続をテストする

Application Insights SDK とエージェントからテレメトリが送信され、インジェスト エンドポイントへの REST 呼び出しとして取り込まれます。 Web サーバーまたはアプリケーション ホスト マシンからインジェスト サービス エンドポイントへの接続は、PowerShell の生の REST クライアントを使用するか、curl コマンドを使用してテストできます。 「Azure Monitor Application Insights でアプリケーション テレメトリが見つからない場合のトラブルシューティング」をご覧ください。

Application Insights で Java トレース ログを調べる

トレースに Logback または Log4J (v1.2 または v2.0) を使用している場合は、トレース ログを Application Insights に自動的に送信して、探索して検索することができます。

ヒント

Application Insights インストルメンテーション キーは、アプリケーションに対して 1 回だけ設定する必要があります。 Java Spring のようなフレームワークを使用している場合は、アプリの構成の他の場所にキーを既に登録している可能性があります。

Application Insights Java エージェントを使用する

既定では、Application Insights Java エージェントは、 WARN レベル以上で実行されたログ記録を自動的にキャプチャします。

AI-Agent.xml ファイルを使用して、キャプチャされるログのしきい値を変更できます。

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging threshold="info"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

AI-Agent.xml ファイルを使用して、Java エージェントのログ キャプチャを無効にすることができます。

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging enabled="false"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

Alternatives

Java エージェントを使用する代わりに、次の手順に従うことができます。

Java SDK をインストールする

まだインストールしていない場合は、指示に従って Application Insights SDK for Java をインストールします。

ログ ライブラリをプロジェクトに追加する

プロジェクトに適した方法を選択します。

Maven

ビルドに Maven を使用するようにプロジェクトが既に設定されている場合は、次のいずれかのコード スニペットを pom.xml ファイルにマージします。 次に、プロジェクトの依存関係を更新して、バイナリをダウンロードします。

Logback


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-logback</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J v2.0


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J v1.2


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j1_2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>
Gradle

ビルドに Gradle を使用するようにプロジェクトが既に設定されている場合は、dependencies ファイルの グループに次のいずれかの行を追加します。 次に、プロジェクトの依存関係を更新して、バイナリをダウンロードします。

Logback


    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-logback', version: '2.0.+'

Log4J v2.0

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j2', version: '2.0.+'

Log4J v1.2

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '2.0.+'

ガイドラインに従って Application Insights Java SDK を手動でインストールし、jar をダウンロードします。 Maven Central ページで、適切なアペンダーのダウンロード セクションで jar リンクを選択します。 ダウンロードしたアペンダー jar をプロジェクトに追加します。

Logger ダウンロード 図書館
Logback Logback アペンダー Jar アプリケーションインサイツ-ロギング-ログバック
Log4J v2.0 Log4J v2 付加装置 Jar applicationinsights-logging-log4j2
Log4j v1.2 Log4J v1.2 アペンダー JAR applicationinsights-logging-log4j1_2

ログ 記録フレームワークにアペンダーを追加する

トレースの取得を開始するには、関連するコード スニペットを Logback または Log4J 構成ファイルにマージします。

Logback


    <appender name="aiAppender" 
      class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
        <instrumentationKey>[APPLICATION_INSIGHTS_KEY]</instrumentationKey>
    </appender>
    <root level="trace">
      <appender-ref ref="aiAppender" />
    </root>

Log4J v2.0


    <Configuration packages="com.microsoft.applicationinsights.log4j.v2">
      <Appenders>
        <ApplicationInsightsAppender name="aiAppender" instrumentationKey="[APPLICATION_INSIGHTS_KEY]" />
      </Appenders>
      <Loggers>
        <Root level="trace">
          <AppenderRef ref="aiAppender"/>
        </Root>
      </Loggers>
    </Configuration>

Log4J v1.2


    <appender name="aiAppender" 
         class="com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender">
        <param name="instrumentationKey" value="[APPLICATION_INSIGHTS_KEY]" />
    </appender>
    <root>
      <priority value ="trace" />
      <appender-ref ref="aiAppender" />
    </root>

Application Insights アペンダーは、前のコード サンプルに示すように、構成済みのロガーによって参照でき、ルート ロガーによって参照されるわけではありません。

Application Insights ポータルでトレースを探索する

Application Insights にトレースを送信するようにプロジェクトを構成したので、Application Insights ポータルの [検索] ウィンドウでこれらのトレースを表示および 検索 できます。

ロガー経由で送信された例外は、 例外テレメトリとして ポータルに表示されます。

Azure portal の Application Insights リソースの [検索] ウィンドウを示すスクリーンショット。

Java Web アプリで依存関係、キャッチされた例外、メソッドの実行時間を監視する

Application Insights SDK を使用して Java Web アプリをインストルメント化した場合は、Java エージェントを使用して、コードを変更することなく、より深い分析情報を得ることができます。

  • 依存関係: アプリケーションが他のコンポーネントに対して行う呼び出しに関するデータ(以下を含む):

    • 発信 HTTP 呼び出し: Apache HttpClientOkHttp、および java.net.HttpURLConnection を介して行われた呼び出しがキャプチャされます。
    • Redis 呼び出し: Jedis クライアントを介して行われた呼び出しがキャプチャされます。
    • JDBC クエリ: MySQL と PostgreSQL の場合、呼び出しに 10 秒を超える時間がかかる場合、エージェントはクエリ プランを報告します。
  • アプリケーション ログ: アプリケーション ログをキャプチャし、HTTP 要求やその他のテレメトリと関連付けます。

    • Log4j 1.2
    • Log4j2
    • Logback
  • 操作の名前付けの強化: ポータルでの要求の集計に使用されます。

    • Spring: @RequestMappingに基づく。
    • JAX-RS: @Pathに基づく。

Java エージェントを使用するには、サーバーにインストールします。 Web アプリは 、Application Insights Java SDK を使用してインストルメント化する必要があります。

Java 用 Application Insights エージェントをインストールする

  1. Java サーバーを実行しているコンピューターで、 2.x エージェントをダウンロードします。 使用する 2.x Java エージェントのバージョンが、使用する 2.x Application Insights Java SDK のバージョンと一致していることを確認します。

  2. アプリケーション サーバーのスタートアップ スクリプトを編集し、次の JVM 引数を追加します。

    -javaagent:<full path to the agent JAR file>

    たとえば、Linux マシン上の Tomcat では、次のようになります。

    export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"

  3. アプリケーション サーバーを再起動します。

エージェントの構成

AI-Agent.xmlという名前 ファイルを作成し、エージェント jar ファイルと同じフォルダーに配置します。

XML ファイルの内容を設定します。 次の例を編集して、目的の機能を含めるか省略します。

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn enabled="true">

         <!-- capture logging via Log4j 1.2, Log4j2, and Logback, default is true -->
         <Logging enabled="true" />

         <!-- capture outgoing HTTP calls performed through Apache HttpClient, OkHttp,
              and java.net.HttpURLConnection, default is true -->
         <HTTP enabled="true" />

         <!-- capture JDBC queries, default is true -->
         <JDBC enabled="true" />

         <!-- capture Redis calls, default is true -->
         <Jedis enabled="true" />

         <!-- capture query plans for JDBC queries that exceed this value (MySQL, PostgreSQL),
              default is 10000 milliseconds -->
         <MaxStatementQueryLimitInMS>1000</MaxStatementQueryLimitInMS>

      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

その他の構成 (Spring Boot)

java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar

Azure App Service の場合は、次の手順に従います。

  1. [設定]>[アプリケーション設定]を選択します

  2. [ アプリの設定] で、新しいキー値ペアを追加します。

    • キー: JAVA_OPTS
    • : -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    エージェントは、 D:/home/site/wwwroot/ ディレクトリに格納されるように、プロジェクト内のリソースとしてパッケージ化する必要があります。 エージェントが正しい App Service ディレクトリにあることを確認するには、 Development Tools>Advanced Tools>Debug Console に移動し、サイト ディレクトリの内容を確認します。

  3. 設定を保存し、アプリを再起動します。 これらの手順は、Windows で実行されているアプリ サービスにのみ適用されます。

AI-Agent.xml とエージェント jar ファイルは同じフォルダーに存在する必要があります。 多くの場合、これらはプロジェクトの /resources フォルダーにまとめて配置されます。

W3C 分散トレースを有効にする

次のスニペットを AI-Agent.xmlに追加します。

<Instrumentation>
   <BuiltIn enabled="true">
      <HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
   </BuiltIn>
</Instrumentation>

下位互換性モードは既定で有効になっています。 enableW3CBackCompat パラメーターは省略可能であり、オフにする場合にのみ使用してください。

理想的には、すべてのサービスが W3C プロトコルをサポートする新しいバージョンの SDK に更新されている場合です。 W3C サポートを使用して、できるだけ早く新しいバージョンの SDK に移行することをお勧めします。

着信と発信 (エージェント) の両方の構成がまったく同じであることを確認します。

データを表示する

Application Insights リソースの [ パフォーマンス] タイルに、集計されたリモート依存関係とメソッドの実行時間が表示されます。

依存関係レポート、例外レポート、メソッド レポートの個々のインスタンスを検索するには、[ 検索] を開きます。

依存関係の問題を診断する方法の詳細について説明します。

質問または問題

次のリソースを使用します。

Java Web アプリでテレメトリをフィルター処理する

フィルターを使用すると、 Java Web アプリから Application Insights に送信されるテレメトリを選択できます。 すぐに利用可能なフィルターがいくつかあります。 独自のカスタム フィルターを記述することもできます。

標準で使用可能なフィルターには、次のものが含まれます。

  • トレースの深刻度レベル。
  • 特定の URL、キーワード、または応答コード。
  • 高速応答。 つまり、アプリが迅速に応答した要求です。
  • 特定のイベント名。

フィルターは、アプリのメトリックを傾斜します。 たとえば、低速な応答を診断するために、高速な応答時間を破棄するようにフィルターを設定するとします。 ただし、Application Insights によって報告される平均応答時間は、実際の速度よりも遅くなる点に注意する必要があります。 また、要求の数は実際の数よりも小さくなります。

これが問題になる場合は、代わりに サンプリング を使用します。

フィルターの設定

ApplicationInsights.xmlで、次の例のようなTelemetryProcessorsセクションを追加します。


    <ApplicationInsights>
      <TelemetryProcessors>

        <BuiltInProcessors>
           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>

           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="100"/>
                  <Add name="NotNeededResponseCodes" value="200-400"/>
           </Processor>

           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="100"/>
                  <Add name="NotNeededNames" value="home,index"/>
                  <Add name="NotNeededUrls" value=".jpg,.css"/>
           </Processor>

           <Processor type="TelemetryEventFilter">
                  <!-- Names of events we don't want to see -->
                  <Add name="NotNeededNames" value="Start,Stop,Pause"/>
           </Processor>

           <!-- Exclude telemetry from availability tests and bots -->
           <Processor type="SyntheticSourceFilter">
                <!-- Optional: specify which synthetic sources,
                     comma-separated
                     - default is all synthetics -->
                <Add name="NotNeededSources" value="Application Insights Availability Monitoring,BingPreview"
           </Processor>

        </BuiltInProcessors>

        <CustomProcessors>
          <Processor type="com.fabrikam.MyFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>

      </TelemetryProcessors>
    </ApplicationInsights>

組み込みプロセッサの完全なセットを調べます

組み込みフィルター

このセクションでは、使用できる組み込みフィルターについて説明します。

メトリック テレメトリ フィルター


           <Processor type="MetricTelemetryFilter">
                  <Add name="NotNeeded" value="metric1,metric2"/>
           </Processor>
  • NotNeeded: カスタム メトリック名のコンマ区切りリスト

ページビューテレメトリフィルター


           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="500"/>
                  <Add name="NotNeededNames" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>
  • DurationThresholdInMS: 期間とは、ページの読み込みにかかった時間を指します。 このパラメーターが設定されている場合、この時間よりも速く読み込まれたページは報告されません。
  • NotNeededNames: ページ名のコンマ区切りリスト。
  • NotNeededUrls: URL フラグメントのコンマ区切りリスト。 たとえば、 "home" は、URL に "home" が含まれるすべてのページを除外します。

要求テレメトリフィルター


           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="500"/>
                  <Add name="NotNeededResponseCodes" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>

合成ソース フィルター

SyntheticSource プロパティの値を持つすべてのテレメトリを除外します。 ボット、スパイダー、可用性テストからの要求が含まれています。

すべての合成要求のテレメトリを除外します。


           <Processor type="SyntheticSourceFilter" />

特定の合成ソースのテレメトリを除外します。


           <Processor type="SyntheticSourceFilter" >
                  <Add name="NotNeeded" value="source1,source2"/>
           </Processor>
  • NotNeeded: 合成ソース名のコンマ区切りリスト

テレメトリ イベント フィルター

TrackEvent()を使用してログに記録されたカスタム イベントをフィルター処理します。


           <Processor type="TelemetryEventFilter" >
                  <Add name="NotNeededNames" value="event1, event2"/>
           </Processor>
  • NotNeededNames: イベント名のコンマ区切りリスト

トレース テレメトリ フィルター

TrackTrace() またはログ 記録フレームワーク コレクターを使用してログ記録されたログ トレースをフィルター処理します。


           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>
  • FromSeverityLevel有効な値は次のとおりです。

    • OFF: すべての トレースを除外します。
    • TRACE: フィルター処理なし。 TRACE レベルと等しい。
    • INFO: TRACE レベルを除外します。
    • 警告: TRACE と INFO を除外します。
    • エラー: 警告、情報、トレースを除外します。
    • CRITICAL: CRITICAL 以外のすべてを除外します。

ユーザー設定フィルタ

次のセクションでは、独自のカスタム フィルターを作成する手順について説明します。

フィルターをコーディングする

コードで、 TelemetryProcessorを実装するクラスを作成します。


    package com.fabrikam.MyFilter;
    import com.microsoft.applicationinsights.extensibility.TelemetryProcessor;
    import com.microsoft.applicationinsights.telemetry.Telemetry;

    public class SuccessFilter implements TelemetryProcessor {

        /* Any parameters that are required to support the filter.*/
        private final String successful;

        /* Initializers for the parameters, named "setParameterName" */
        public void setNotNeeded(String successful)
        {
            this.successful = successful;
        }

        /* This method is called for each item of telemetry to be sent.
           Return false to discard it.
           Return true to allow other processors to inspect it. */
        @Override
        public boolean process(Telemetry telemetry) {
            if (telemetry == null) { return true; }
            if (telemetry instanceof RequestTelemetry)
            {
                RequestTelemetry requestTelemetry = (RequestTelemetry)    telemetry;
                return request.getSuccess() == successful;
            }
            return true;
        }
    }

構成ファイルでフィルターを呼び出す

次に、ApplicationInsights.xmlで次の 手順を実行します



    <ApplicationInsights>
      <TelemetryProcessors>
        <CustomProcessors>
          <Processor type="com.fabrikam.SuccessFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>
      </TelemetryProcessors>
    </ApplicationInsights>

フィルターを呼び出す (Java Spring)

Spring フレームワークに基づくアプリケーションの場合、カスタム テレメトリ プロセッサをメイン アプリケーション クラスに Bean として登録する必要があります。 その後、アプリケーションの起動時に自動配線されます。

@Bean
public TelemetryProcessor successFilter() {
      return new SuccessFilter();
}

application.propertiesで独自のフィルター パラメーターを作成します。 次に、Spring Boot の外部化された構成フレームワークを使用して、これらのパラメーターをカスタム フィルターに渡します。

トラブルシューティング

このセクションでは、トラブルシューティングのヒントを提供します。

フィルターが機能しない

有効なパラメーター値が指定されていることを確認します。 たとえば、期間は整数にする必要があります。 無効な値を指定すると、フィルターは無視されます。 カスタム フィルターがコンストラクターまたは set メソッドから例外をスローした場合、その例外は無視されます。

collectd: Application Insights の Linux パフォーマンス指標 (非推奨)

Application Insights で Linux システムのパフォーマンス メトリクスを調べるには、collectd とその Application Insights プラグインをインストールします。 このオープンソース ソリューションは、さまざまなシステムとネットワークの統計情報を収集します。

通常、collectdしている場合は、を使用します。 アプリのパフォーマンスの向上や問題の診断に役立つ、より多くのデータが提供されます。

インストルメンテーション キーを取得する

Azure portal で、データを表示する Application Insights リソースを開きます。 または、 新しいリソースを作成することもできます。

リソースを識別する インストルメンテーション キーのコピーを取得します。

インストルメンテーション キーが強調表示されている Azure portal の Application Insights リソースの概要ウィンドウを示すスクリーンショット。

collectd とプラグインをインストールする

Linux サーバー コンピューターで次の手順を実行します。

  1. collectd バージョン 5.4.0 以降をインストールしてください。
  2. Application Insights で収集されたライター プラグインをダウンロードします。 バージョン番号をメモします。
  3. プラグイン jar を /usr/share/collectd/javaにコピーします。
  4. /etc/collectd/collectd.confの編集:
    • Java プラグインが有効になっていることを確認します。

    • 次の jar を含むように、 java.class.path の JVMArg を更新します。 ダウンロードしたバージョン番号と一致するようにバージョン番号を更新します。

      • /usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
    • リソースのインストルメンテーション キーを使用して、次のスニペットを追加します。

      
           LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
           <Plugin ApplicationInsightsWriter>
              InstrumentationKey "Your key"
           </Plugin>
      

      サンプル構成ファイルの一部を次に示します。

      
          ...
          # collectd plugins
          LoadPlugin cpu
          LoadPlugin disk
          LoadPlugin load
          ...
      
          # Enable Java Plugin
          LoadPlugin "java"
      
          # Configure Java Plugin
          <Plugin "java">
            JVMArg "-verbose:jni"
            JVMArg "-Djava.class.path=/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar:/usr/share/collectd/java/collectd-api.jar"
      
            # Enabling Application Insights plugin
            LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
      
            # Configuring Application Insights plugin
            <Plugin ApplicationInsightsWriter>
              InstrumentationKey "12345678-1234-1234-1234-123456781234"
            </Plugin>
      
            # Other plugin configurations ...
            ...
          </Plugin>
          ...
      

収集された他の プラグインを構成します。このプラグインは、さまざまなソースからさまざまなデータを収集できます。

マニュアルに従って collectd を再起動 します

Application Insights でデータを表示する

Application Insights リソースで、[ メトリック] を開き、グラフを追加しますカスタム カテゴリから表示するメトリックを選択します。

既定では、メトリックは、メトリックが収集されたすべてのホスト マシンにわたって集計されます。 ホストごとのメトリックを表示するには、[グラフの 詳細 ] ウィンドウで [ グループ化] をオンにし、 CollectD-Host でグループ化することを選択します。

特定の統計情報のアップロードを除外する

既定では、Application Insights プラグインは、有効なすべての collectd read プラグインによって収集されたすべてのデータを送信します。

特定のプラグインまたはデータ ソースからデータを除外するには:

  • 構成ファイルを編集します。

  • <Plugin ApplicationInsightsWriter>で、次の表のようなディレクティブ行を追加します。

    ディレクティブ 影響
    Exclude disk disk プラグインによって収集されたすべてのデータを除外します。
    Exclude disk:read,write read プラグインから write および disk という名前のソースを除外します。

ディレクティブを改行で区切ります。

問題ですか?

このセクションでは、トラブルシューティングのヒントを提供します。

ポータルにデータが表示されない

次のオプションを試してください。

  • [ 検索 ] を開き、生のイベントが到着したかどうかを確認します。 メトリックス エクスプローラーに表示されるまでに時間がかかる場合があります。
  • 送信データのファイアウォール例外を設定する必要がある場合があります。
  • Application Insights プラグインでトレースを有効にします。 <Plugin ApplicationInsightsWriter>内に次の行を追加します。
    • SDKLogger true
  • ターミナルを開き、詳細モードで collectd を開始して、報告されている問題を確認します。
    • sudo collectd -f

既知の問題

Application Insights 書き込みプラグインは、特定の読み取りプラグインと互換性がありません。一部のプラグインは NaNを送信することがありますが、Application Insights プラグインでは浮動小数点数が必要です。

  • 現象: collectd ログには、「AI: ...SyntaxError: 予期しないトークン N」というエラーが含まれています。
  • 回避策: 問題の書き込みプラグインによって収集されたデータを除外します。

Micrometer アプリケーション監視では、JVM ベースのアプリケーション コードのメトリックを測定し、お気に入りの監視システムにデータをエクスポートできます。 このセクションでは、Spring Boot アプリケーションと非 Spring Boot アプリケーションの両方に対して Application Insights で Micrometer を使用する方法について説明します。

Spring Boot 1.5x を使用する

pom.xml または build.gradle ファイルに次の依存関係を追加します。

次の手順に従います。

  1. Spring Boot アプリケーションの pom.xml ファイルを更新し、その中に次の依存関係を追加します。

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-spring-boot-starter</artifactId>
        <version>2.5.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-spring-legacy</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-azure-monitor</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    
  2. 次のプロパティを使用して 、Application.properties または YML ファイルを Application Insights インストルメンテーション キーで更新します。

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. アプリケーションをビルドして実行します。

前の手順では、事前に集計されたメトリックを Azure Monitor に自動収集して稼働させる必要があります。

Spring 2.x を使用する

pom.xml または build.gradle ファイルに次の依存関係を追加します。

次の手順に従います。

  1. Spring Boot アプリケーションの pom.xml ファイルを更新し、それに次の依存関係を追加します。

    <dependency> 
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-spring-boot-metrics-starter</artifactId>
          <version>2.0.7</version>
    </dependency>
    
  2. 次のプロパティを使用して 、Application.properties または YML ファイルを Application Insights インストルメンテーション キーで更新します。

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. アプリケーションをビルドして実行します。

上記の手順では、事前に集計されたメトリックを Azure Monitor に自動収集して実行する必要があります。 Application Insights Spring Boot スターターを微調整する方法の詳細については、 GitHub の readme を参照してください。

既定のメトリック:

  • Tomcat、JVM、Logback メトリック、Log4J メトリック、アップタイム メトリック、プロセッサ メトリック、FileDescriptorMetrics のメトリックを自動的に構成します。
  • たとえば、Netflix Hystrix がクラス パスに存在する場合、それらのメトリックも取得されます。
  • それぞれの Bean を追加することで、次のメトリックを使用できます。
    • CacheMetrics (CaffeineCacheEhCache2GuavaCacheHazelcastCache、および JCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • OkHttp3 メトリック
    • Kafka メトリック

メトリックの自動収集をオフにする:

  • JVM メトリック:
    • management.metrics.binders.jvm.enabled=false
  • Logback メトリクス:
    • management.metrics.binders.logback.enabled=false
  • アップタイム メトリック:
    • management.metrics.binders.uptime.enabled=false
  • プロセッサ メトリック:
    • management.metrics.binders.processor.enabled=false
  • FileDescriptorMetrics:
    • management.metrics.binders.files.enabled=false
  • Hystrix Metrics ライブラリが classpath 上にある場合:
    • management.metrics.binders.hystrix.enabled=false
  • classpath上のライブラリの場合の AspectJ メトリック:
    • spring.aop.enabled=false

Spring Boot アプリケーションの application.properties ファイルまたは application.yml ファイルで、上記のプロパティを指定します。

Spring Boot 以外の Web アプリケーションで Micrometer を使用する

pom.xml または build.gradle ファイルに次の依存関係を追加します。

次の手順に従います。

  1. pom.xml または build.gradle ファイルに次の依存関係を追加します。

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-azure-monitor</artifactId>
            <version>1.1.0</version>
        </dependency>
    
        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>applicationinsights-web-auto</artifactId>
            <version>2.5.0</version>
        </dependency>
    
  2. まだ行っていない場合は、 ApplicationInsights.xml ファイルを resources フォルダーに追加します。 詳細については、「 ApplicationInsights.xml ファイルの追加」を参照してください。

  3. サンプルサーブレットクラス(タイマーメトリックを出力):

        @WebServlet("/hello")
        public class TimedDemo extends HttpServlet {
    
          private static final long serialVersionUID = -4751096228274971485L;
    
          @Override
          @Timed(value = "hello.world")
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
    
            response.getWriter().println("Hello World!");
            MeterRegistry registry = (MeterRegistry) getServletContext().getAttribute("AzureMonitorMeterRegistry");
    
        //create new Timer metric
            Timer sampleTimer = registry.timer("timer");
            Stream<Integer> infiniteStream = Stream.iterate(0, i -> i+1);
            infiniteStream.limit(10).forEach(integer -> {
              try {
                Thread.sleep(1000);
                sampleTimer.record(integer, TimeUnit.MILLISECONDS);
              } catch (Exception e) {}
               });
          }
          @Override
          public void init() throws ServletException {
            System.out.println("Servlet " + this.getServletName() + " has started");
          }
          @Override
          public void destroy() {
            System.out.println("Servlet " + this.getServletName() + " has stopped");
          }
    
        }
    
    
  4. サンプル構成クラス:

         @WebListener
         public class MeterRegistryConfiguration implements ServletContextListener {
    
           @Override
           public void contextInitialized(ServletContextEvent servletContextEvent) {
    
         // Create AzureMonitorMeterRegistry
           private final AzureMonitorConfig config = new AzureMonitorConfig() {
             @Override
             public String get(String key) {
                 return null;
             }
            @Override
               public Duration step() {
                 return Duration.ofSeconds(60);}
    
             @Override
             public boolean enabled() {
                 return false;
             }
         };
    
      MeterRegistry azureMeterRegistry = AzureMonitorMeterRegistry.builder(config);
    
             //set the config to be used elsewhere
             servletContextEvent.getServletContext().setAttribute("AzureMonitorMeterRegistry", azureMeterRegistry);
    
           }
    
           @Override
           public void contextDestroyed(ServletContextEvent servletContextEvent) {
    
           }
         }
    

メトリックの詳細については、 Micrometer のドキュメントを参照してください。

さまざまな種類のメトリックを作成する方法に関するその他のサンプル コードは、 公式の Micrometer GitHub リポジトリにあります。

より多くのメトリックコレクションをバインドする

次のセクションでは、より多くのメトリックを収集する方法について説明します。

SpringBoot/Spring

それぞれのメトリック カテゴリの Bean を作成します。 たとえば、Guava Cache メトリックが必要であるとします。

    @Bean
    GuavaCacheMetrics guavaCacheMetrics() {
        Return new GuavaCacheMetrics();
    }

既定では、いくつかのメトリックが有効になっていませんが、上記の方法でバインドできます。 完全な一覧については、 Micrometer GitHub リポジトリを参照してください。

Spring 以外のアプリ

構成ファイルに次のバインド コードを追加します。

    New GuavaCacheMetrics().bind(registry);

カスタム イベントとメトリックのコア API

アプリケーションに数行のコードを挿入して、ユーザーが何をしているのかを調べるか、問題の診断に役立ちます。 デバイス アプリ、デスクトップ アプリ、Web クライアント、Web サーバーからテレメトリを送信できます。 Application Insights コア テレメトリ API を使用して、カスタム イベントとメトリック、および独自のバージョンの標準テレメトリを送信します。 この API は、標準の Application Insights データ コレクターが使用するのと同じ API です。

API の概要

コア API は、 GetMetric (.NET のみ) などのいくつかのバリエーションとは別に、すべてのプラットフォームで統一されています。

メソッド 使用対象
TrackPageView ページ、画面、ペイン、またはフォーム。
TrackEvent ユーザー アクションとその他のイベント。 ユーザーの動作を追跡したり、パフォーマンスを監視したりするために使用されます。
TrackMetric 特定のイベントに関連しないキューの長さなどのパフォーマンス測定。
TrackException 診断のための例外をログに記録する。 他のイベントに関連して発生した場所をトレースし、スタック トレースを調べます。
TrackRequest パフォーマンス分析のためのサーバー要求の頻度と期間をログに記録します。
TrackTrace リソース診断ログ メッセージ。 サードパーティのログをキャプチャすることもできます。
TrackDependency アプリが依存する外部コンポーネントへの呼び出しの期間と頻度をログに記録します。

これらのテレメトリ呼び出しのほとんどに プロパティとメトリックをアタッチ できます。

[前提条件]

Application Insights SDK に関する参照がまだない場合:

  • Application Insights SDK をプロジェクトに追加します。

  • デバイスまたは Web サーバーのコードには、次のものが含まれます。

    import com.microsoft.applicationinsights.TelemetryClient;
    

TelemetryClient インスタンスを取得する

TelemetryClientのインスタンスを取得します。

private TelemetryClient telemetry = new TelemetryClient();

TelemetryClient はスレッド セーフです。

Azure Functions v2 以降または Azure WebJobs v3 以降を使用する場合は、「 Azure Functions の監視」を参照してください。

アプリの他のモジュールに対して、 TelemetryClient のインスタンスをさらに作成したい場合があります。 たとえば、ミドルウェア クラスに 1 つの TelemetryClient インスタンスがあり、ビジネス ロジック イベントを報告できます。 UserIdDeviceIdなどのプロパティを設定して、マシンを識別できます。 この情報は、インスタンスが送信するすべてのイベントに添付されます。

telemetry.getContext().getUser().setId("...");
telemetry.getContext().getDevice().setId("...");

TrackEvent

Application Insights では、 カスタム イベント、メトリックス エクスプローラー で集計されたカウントとして、 および診断検索 で個別の出現回数として表示できるデータ ポイントです。 (MVC やその他のフレームワークの "イベント" には関連しません)。

コード TrackEvent 呼び出しを挿入して、さまざまなイベントをカウントします。 たとえば、ユーザーが特定の機能を選択する頻度を追跡できます。 または、特定の目標を達成する頻度や、特定の種類の間違いを犯す頻度を知りたい場合があります。

たとえば、ゲーム アプリでは、ユーザーがゲームに勝利するたびにイベントを送信します。

telemetry.trackEvent("WinGame");

Log Analytics のカスタム イベント

テレメトリは、customEventsまたは使用状況エクスペリエンス テーブルにあります。 イベントは、 trackEvent(..) または Click Analytics 自動収集プラグインから発生する可能性があります。

サンプリングが処理中の場合、itemCount プロパティには 1 より大きい値が表示されます。 たとえば、 itemCount==10 は、 trackEvent()への呼び出しが 10 回の場合、サンプリング プロセスはそのうちの 1 つだけを送信することを意味します。 カスタム イベントの正しい数を取得するには、 customEvents | summarize sum(itemCount)などのコードを使用します。

itemCount の最小値は 1 です。レコード自体はエントリを表します。

TrackMetric

Application Insights では、特定のイベントにアタッチされていないメトリックをグラフ化できます。 たとえば、キューの長さを一定の間隔で監視できます。 メトリックでは、個々の測定値はバリエーションや傾向よりも関心が低く、統計グラフが役立ちます。

Application Insights にメトリックを送信するには、 TrackMetric(..) API を使用できます。 メトリックを送信するには、次の 2 つの方法があります。

  • 単一の値。 アプリケーションで測定を実行するたびに、対応する値を Application Insights に送信します。

    たとえば、コンテナー内の項目の数を示すメトリックがあるとします。 特定の期間中、最初に 3 つの項目をコンテナーに配置してから、2 つの項目を削除します。 したがって、 TrackMetric を 2 回呼び出します。 まず、 3 値を渡し、値を -2渡します。 Application Insights には、両方の値が格納されます。

  • 集計。 メトリックを使用する場合、1 回の測定に対する関心はほとんどありません。 代わりに、特定の期間中に発生した内容の概要が重要です。 このような概要は 、集計と呼ばれます。

    前の例では、その期間の集計メトリックの合計が 1 され、メトリック値の数が 2されています。 集計方法を使用する場合は、期間ごとに 1 回だけ TrackMetric を呼び出し、集計値を送信します。 この方法をお勧めします。Application Insights に送信するデータ ポイントの数を減らしてコストとパフォーマンスのオーバーヘッドを大幅に削減しながら、すべての関連情報を収集できるためです。

単一値の例

1 つのメトリック値を送信するには:

telemetry.trackMetric("queueLength", 42.0);

Log Analytics のカスタム メトリック

テレメトリは、customMetrics テーブルで使用できます。 各行は、アプリ内の trackMetric(..) の呼び出しを表します。

  • valueSum: 測定値の合計。 平均値を取得するには、 valueCountで除算します。
  • valueCount: この trackMetric(..) 呼び出しに集計された測定値の数。

valueCount の最小値は 1 です。レコード自体はエントリを表します。

ページ ビュー

デバイスまたは Web ページ アプリでは、各画面またはページが読み込まれると、ページ ビューテレメトリが既定で送信されます。 ただし、既定の設定を変更して、ページ ビューを追跡する時間を増やしたり、異なる時間に変更したりできます。 たとえば、タブまたはペインを表示するアプリでは、ユーザーが新しいウィンドウを開くたびにページを追跡できます。

ユーザーとセッションのデータは、ページ ビューと共にプロパティとして送信されるため、ページ ビューテレメトリがある場合は、ユーザーグラフとセッション グラフが有効になります。

カスタム ページ ビュー

telemetry.trackPageView("GameReviewPage");

Log Analytics のページ テレメトリ

Log Analytics では、2 つのテーブルにブラウザー操作のデータが表示されます。

  • pageViews: URL とページ タイトルに関するデータが含まれます。
  • browserTimings: 受信データの処理にかかった時間など、クライアントのパフォーマンスに関するデータが含まれます。

ブラウザーがさまざまなページを処理するのにかかる時間を確認するには:

browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name

さまざまなブラウザーの人気を発見するには:

pageViews
| summarize count() by client_Browser

ページ ビューを AJAX 呼び出しに関連付けるには、依存関係と結合します。

pageViews
| join (dependencies) on operation_Id

TrackRequest

サーバー SDK では TrackRequest を使用して HTTP 要求をログに記録します。

Web サービス モジュールが実行されていないコンテキストで要求をシミュレートする場合は、自分で呼び出すこともできます。

要求テレメトリを送信する推奨される方法は、要求が操作コンテキストとして機能する場所です。

操作コンテキスト

テレメトリ項目を操作コンテキストに関連付けることで、テレメトリ項目を相互に関連付けることができます。 標準の要求追跡モジュールは、HTTP 要求の処理中に送信される例外やその他のイベントに対してこれを行います。 SearchAnalytics では、操作 ID を使用して、要求に関連付けられているすべてのイベントを簡単に見つけることができます。

操作のスコープ内で報告されたテレメトリ項目は、その操作の子要素になります。 操作コンテキストは入れ子にすることができます。

検索では、操作コンテキストを使用して[関連アイテム]リストを作成します。

[関連アイテム] リストを示すスクリーンショット。

Log Analytics の要求

Application Insights Analytics では、要求が requests テーブルに表示されます。

サンプリングが処理中の場合、itemCount プロパティには 1 より大きい値が表示されます。 たとえば、 itemCount==10 は、 trackRequest()への呼び出しが 10 回の場合、サンプリング プロセスはそのうちの 1 つだけを送信することを意味します。 要求の正しい数と要求名でセグメント化された平均期間を取得するには、次のようなコードを使用します。

requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name

TrackException

Application Insights に例外を送信する:

レポートにはスタック トレースが含まれます。

try {
    ...
} catch (Exception ex) {
    telemetry.trackException(ex);
}

例外は自動的にキャッチされるため、 TrackException を明示的に呼び出す必要はありません。

Log Analytics の例外

Application Insights Analytics では、例外が exceptions テーブルに表示されます。

サンプリングが処理中の場合、itemCount プロパティには 1 より大きい値が表示されます。 たとえば、 itemCount==10 は、 trackException()への呼び出しが 10 回の場合、サンプリング プロセスはそのうちの 1 つだけを送信することを意味します。 例外の種類別にセグメント化された例外の正しい数を取得するには、次のようなコードを使用します。

exceptions
| summarize sum(itemCount) by type

重要なスタック情報のほとんどは既に個別の変数に抽出されていますが、 details 構造を引き離してさらに多くを得ることができます。 この構造体は動的であるため、結果を想定した型にキャストする必要があります。 例えば次が挙げられます。

exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)

例外を関連する要求に関連付けるには、結合を使用します。

exceptions
| join (requests) on operation_Id

TrackTrace

TrackTraceを使用して、"パンくずトレイル" を Application Insights に送信し、問題を診断します。 診断データのチャンクを送信し、 診断検索で検査できます。

Java では、 Application Insights Java エージェント が自動収集し、ポータルにログを送信します。

telemetry.trackTrace(message, SeverityLevel.Warning, properties);

メソッドの入力や退出などの診断イベントをログに記録します。

パラメーター Description
message 診断データ。 名前よりもはるかに長い場合があります。
properties 文字列を文字列にマップします。 ポータルで 例外をフィルター処理 するために、さらに多くのデータが使用されます。 既定値は空です。
severityLevel サポートされている値: SeverityLevel.ts

メッセージの内容は検索できますが、プロパティ値とは異なり、フィルター処理することはできません。

messageのサイズ制限は、プロパティの制限よりもはるかに大きくなります。 TrackTraceの利点は、比較的長いデータをメッセージに格納できることです。 たとえば、POST データをエンコードできます。

メッセージに重大度レベルを追加することもできます。 また、他のテレメトリと同様に、プロパティ値を追加して、さまざまなトレース セットのフィルター処理や検索に役立ちます。 例えば次が挙げられます。

Map<String, Integer> properties = new HashMap<>();
properties.put("Database", db.ID);
telemetry.trackTrace("Slow Database response", SeverityLevel.Warning, properties);

検索では、特定のデータベースに関連する特定の重大度レベルのすべてのメッセージを簡単に除外できます。

Log Analytics のトレース

Application Insights Analytics では、TrackTraceの呼び出しが traces テーブルに表示されます。

サンプリングが処理中の場合、itemCount プロパティには 1 より大きい値が表示されます。 たとえば、 itemCount==10 は、 trackTrace()への呼び出しが 10 回の場合、サンプリング プロセスはそのうちの 1 つだけを送信することを意味します。 トレース呼び出しの正しい数を取得するには、 traces | summarize sum(itemCount)などのコードを使用します。

TrackDependency

TrackDependency呼び出しを使用して、外部コードへの呼び出しの応答時間と成功率を追跡します。 結果は、ポータルの依存関係グラフに表示されます。 次のコード スニペットは、依存関係の呼び出しが行われる場所を問わず追加する必要があります。

boolean success = false;
Instant startTime = Instant.now();
try {
    success = dependency.call();
}
finally {
    Instant endTime = Instant.now();
    Duration delta = Duration.between(startTime, endTime);
    RemoteDependencyTelemetry dependencyTelemetry = new RemoteDependencyTelemetry("My Dependency", "myCall", delta, success);
    dependencyTelemetry.setTimeStamp(startTime);
    telemetry.trackDependency(dependencyTelemetry);
}

Java では、 Application Insights Java エージェントを使用して、多くの依存関係呼び出しを自動的に追跡できます。

自動追跡でキャッチされない呼び出しを追跡する場合は、この呼び出しを使用します。

Log Analytics の依存関係

Application Insights Analytics では、trackDependency呼び出しが dependencies テーブルに表示されます。

サンプリングが処理中の場合、itemCount プロパティには 1 より大きい値が表示されます。 たとえば、 itemCount==10 は、 trackDependency()への呼び出しが 10 回の場合、サンプリング プロセスはそのうちの 1 つだけを送信することを意味します。 ターゲット コンポーネントによってセグメント化された依存関係の正しい数を取得するには、次のようなコードを使用します。

dependencies
| summarize sum(itemCount) by target

依存関係を関連する要求に関連付けるには、結合を使用します。

dependencies
| join (requests) on operation_Id

データの消去

通常、SDK は一定の間隔 (通常は 30 秒)、またはバッファーがいっぱいになると (通常は 500 項目) データを送信します。 場合によっては、バッファーをフラッシュしたいことがあります。 たとえば、シャットダウンするアプリケーションで SDK を使用している場合です。

telemetry.flush();
//Allow some time for flushing before shutting down
Thread.sleep(5000);

Java SDK は、アプリケーションのシャットダウン時に自動的にフラッシュされます。

認証済みユーザー

Web アプリでは、ユーザーは既定 で Cookie によって識別されます 。 ユーザーが別のコンピューターまたはブラウザーからアプリにアクセスした場合、または Cookie を削除した場合、1 人のユーザーが複数回カウントされる可能性があります。

ユーザーがアプリにサインインした場合は、ブラウザー コードで認証されたユーザー ID を設定することで、より正確な数を取得できます。 ユーザーの実際のサインイン名を使用する必要はありません。 必要なのは、そのユーザーに固有の ID のみです。 スペースや ,;=|文字を含めることはできません。

ユーザー ID もセッション Cookie で設定され、サーバーに送信されます。 サーバー SDK がインストールされている場合、認証されたユーザー ID は、クライアントとサーバーの両方のテレメトリのコンテキスト プロパティの一部として送信されます。 その後、フィルター処理して検索できます。

アプリでユーザーをアカウントにグループ化する場合は、アカウントの識別子を渡すこともできます。 同じ文字制限が適用されます。

メトリックス エクスプローラーでは、ユーザー、認証済み、ユーザー アカウントをカウントするグラフ作成できます。

特定のユーザー名とアカウントを持つクライアント データ ポイントを 検索 することもできます。

プロパティを使用してデータをフィルター処理、検索、セグメント化する

プロパティと測定値は、イベント、メトリック、ページ ビュー、例外、およびその他のテレメトリ データにアタッチできます。

プロパティ は、使用状況レポートでテレメトリをフィルター処理するために使用できる文字列値です。 たとえば、アプリで複数のゲームが提供されている場合は、各イベントにゲームの名前を添付して、どのゲームがより人気のあるかを確認できます。

文字列の長さには 8,192 という制限があります。 大量のデータを送信する場合は、 TrackTraceのメッセージ パラメーターを使用します。

メトリック は、グラフィカルに表示できる数値です。 たとえば、ゲーマーが達成するスコアが徐々に増加しているかどうかを確認できます。 グラフは、イベントと共に送信されるプロパティでセグメント化できるため、ゲームごとに個別のグラフまたは積み上げグラフを取得できます。

正しく表示するには、メトリック値が 0 以上である必要があります。

使用できる プロパティ、プロパティ値、メトリックの数にはいくつかの制限 があります。

Map<String, String> properties = new HashMap<String, String>();
properties.put("game", currentGame.getName());
properties.put("difficulty", currentGame.getDifficulty());

Map<String, Double> metrics = new HashMap<String, Double>();
metrics.put("Score", currentGame.getScore());
metrics.put("Opponents", currentGame.getOpponentCount());

telemetry.trackEvent("WinGame", properties, metrics);

Important

個人を特定できる情報をプロパティに記録しないようにしてください。

Warnung

同じテレメトリ項目インスタンス (この例ではevent ) を再利用して、 Track*() を複数回呼び出さないでください。 この方法では、誤った構成でテレメトリが送信される可能性があります。

Log Analytics のカスタム測定値とプロパティ

Log Analytics では、カスタム メトリックとプロパティが各テレメトリ レコードのcustomMeasurements属性とcustomDimensions属性に表示されます。

たとえば、要求テレメトリに "game" という名前のプロパティを追加した場合、このクエリでは、"game" のさまざまな値の出現回数がカウントされ、カスタム メトリック "score" の平均が表示されます。

requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)

次の点に注意してください。

  • customDimensionsまたはcustomMeasurements JSON から値を抽出する場合は、動的な型を持つため、tostringまたはtodoubleキャストする必要があります。
  • サンプリングの可能性を考慮するには、sum(itemCount)しないcount()使用します。

タイミングイベント

アクションの実行にかかる時間をグラフに表示したい場合があります。 たとえば、ユーザーがゲーム内の選択肢を検討するのにかかる時間を知りたい場合があります。 この情報を取得するには、測定パラメーターを使用します。

long startTime = System.currentTimeMillis();

// Perform timed action

long endTime = System.currentTimeMillis();
Map<String, Double> metrics = new HashMap<>();
metrics.put("ProcessingTime", (double)endTime-startTime);

// Setup some properties
Map<String, String> properties = new HashMap<>();
properties.put("signalSource", currentSignalSource.getName());

// Send the event
telemetry.trackEvent("SignalProcessed", properties, metrics);

カスタム テレメトリの既定のプロパティ

書き込む一部のカスタム イベントの既定のプロパティ値を設定する場合は、 TelemetryClient インスタンスで設定します。 これらは、そのクライアントから送信されるすべてのテレメトリ項目にアタッチされます。

import com.microsoft.applicationinsights.TelemetryClient;
import com.microsoft.applicationinsights.TelemetryContext;
...

TelemetryClient gameTelemetry = new TelemetryClient();
TelemetryContext context = gameTelemetry.getContext();
context.getProperties().put("Game", currentGame.Name);

gameTelemetry.TrackEvent("WinGame");

個々のテレメトリ呼び出しは、プロパティ ディクショナリの既定値をオーバーライドできます。

遠隔測定を無効にする

テレメトリの収集と送信を 動的に停止して開始 するには:

telemetry.getConfiguration().setTrackingDisabled(true);

動的接続文字列

開発、テスト、運用環境からのテレメトリを混在させないように、環境に応じて 個別の Application Insights リソースを作成 し、接続文字列を変更できます。

構成ファイルから接続文字列を取得する代わりに、コードの初期化メソッドで設定できます。

// Initialize once, e.g., at startup
TelemetryClient telemetry = new TelemetryClient();

// Prefer env var; falls back to hard-coded for illustration
String cs = System.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING");
if (cs != null && !cs.isEmpty()) {
    telemetry.getContext().setConnectionString(cs);
}

TelemetryContext

TelemetryClient には、すべてのテレメトリ データと共に送信される値を含む Context プロパティがあります。 これらは通常、標準のテレメトリ モジュールによって設定されますが、自分で設定することもできます。 例えば次が挙げられます。

telemetry.Context.Operation.Name = "MyOperationName";

これらの値のいずれかを自分で設定する場合は、値と標準値が混同されないように、 ApplicationInsights.config から関連する行を削除することを検討してください。

  • コンポーネント: アプリとそのバージョン。
  • デバイス: アプリが実行されているデバイスに関するデータ。 Web アプリでは、テレメトリが送信されるサーバーまたはクライアント デバイスです。
  • InstrumentationKey: テレメトリが表示される Azure の Application Insights リソース。
  • 場所: デバイスの地理的な場所。
  • 操作: Web アプリでは、現在の HTTP 要求。 他の種類のアプリでは、この値を設定してイベントをグループ化できます。
    • ID: 診断検索でイベントを検査するときに関連項目を見つけられるように、さまざまなイベントを関連付ける生成された値。
    • 名前: 識別子。通常は HTTP 要求の URL です。
    • SyntheticSource: null または空でない場合は、要求のソースがロボットまたは Web テストとして識別されたことを示す文字列。 既定では、メトリックス エクスプローラーの計算から除外されます。
  • セッション: ユーザーのセッション。 ID は生成された値に設定されます。これは、ユーザーがしばらくアクティブになっていないときに変更されます。
  • ユーザー: ユーザー情報。

Limits

アプリケーションごと (インストルメンテーション キーごと) のメトリックとイベントの数には制限があります。 制限は、選択する料金プランによって異なります。

Resource 既定の制限 上限 注記
1 日あたりの合計データ量 100 GB サポートにお問い合わせください。 上限を設定してデータを減らすことができます。 さらにデータが必要な場合は、ポータルで上限を最大 1,000 GB まで引き上げることができます。 1,000 GB を超える容量については、AIDataCap@microsoft.com までメールでご連絡ください。
スロットリング 32,000 イベント/秒 サポートにお問い合わせください。 制限は 1 分間にわたって測定されます。
データ保持ログ 30 日 - 730 日 730 日 このリソースはログ用です。
データ保持メトリック 90 日間 90 日間 このリソースはメトリックス エクスプローラー用です。
可用性の複数手順のテストの詳細な結果の保持 90 日間 90 日間 このリソースは、各手順の詳細な結果を提供します。
テレメトリ項目の最大サイズ 64 KB 64 KB
バッチあたりの最大テレメトリ項目数 64,000 64,000
プロパティとメトリック名の長さ 150 150 型スキーマに関するページを参照してください。
プロパティ値の文字列の長さ 8,192 8,192 型スキーマに関するページを参照してください。
トレースおよび例外のメッセージ長 32,768 32,768 型スキーマに関するページを参照してください。
Application Insights リソースあたりの可用性テスト 100 100
リソース グループあたりの可用性テスト数 800 800 Azure Resource Manager を参照してください
可用性テストのテストあたりの最大リダイレクト数 10 10
可用性テストの最小テスト頻度 300 秒 5分未満のテスト周波数、またはカスタム周波数には、カスタム TrackAvailability の実装が必要です。
.NET Profilerスナップショット デバッガーのデータ保持 2 週間 サポートにお問い合せください。 保持の最大限度は 6 か月です。
.NET Profiler の 1 日あたりの送信データ 制限なし 制限なし。
スナップショット デバッガーの 1 日あたりの送信データ 監視対象アプリごとに 1 日あたり 30 のスナップショット 制限なし。 アプリケーションあたりに収集されるスナップショットの数は、構成することで変更できます。

価格とクォータの詳細については、「Application Insights の課金」を参照してください。

データ レート制限に達しないようにするには、サンプリングを使用 します

データの保持期間を確認するには、「 データの保持とプライバシー」を参照してください。

次のステップ