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 入口網站

  2. 在 Azure 入口網站中,建立 Application Insights 資源。 將應用程式類型設定為 Java Web 應用程式。

  3. 尋找新資源的檢測金鑰。 您很快需要將此金鑰貼到程式碼專案中。

    Azure 入口網站中 Application Insights 資源的 [概觀] 窗格螢幕擷取畫面,其中已醒目提示檢測金鑰。

將 Java 適用的 Application Insights SDK 加入至專案

選擇您的專案類型。

如果您的專案已設為使用 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-core 元件之間的 -web-auto 關聯性為何?

    • applicationinsights-web-auto 可讓您在執行時間自動註冊 Application Insights servlet 篩選,以追蹤 HTTP servlet 要求計數和回應時間的計量。
    • applicationinsights-web 也會提供您追蹤 HTTP servlet 要求計數和回應時間的計量。 但需要手動註冊應用程式中的 Application Insights servlet 篩選器。
    • applicationinsights-core 例如,如果您的應用程式不是以 servlet 為基礎,則提供裸機 API。
  • 如果將 SDK 升級為最新版本?

    • 從 2020 年 11 月起,為了監視 JAVA 應用程式,我們建議使用 Application Insights JAVA 3.x。 關於如何開始使用的詳細資訊,請參閱 Application Insights Java 3.x

新增 ApplicationInsights.xml 檔案

在專案中的資源資料夾中加入 ApplicationInsights.xml,或確定已將其加入專案的部署類別路徑。 將下列 XML 複製到其中。

以您從 Azure 入口網站取得的金鑰取代該檢測金鑰。

<?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 入口網站中的 Application Insights 資源。

[概觀] 窗格上會顯示 HTTP 要求資料。 如果不存在,請稍候幾秒鐘,然後選取 [ 重新整理]。

顯示概觀範例資料的螢幕擷取畫面。

深入瞭解 計量

按一下任何圖表以查看詳細彙總度量。

顯示具有圖表之 Application Insights 失敗窗格的螢幕擷取畫面。

執行個體資料

點選特定要求類型以查看個別執行個體。

顯示鑽研特定範例檢視的螢幕擷取畫面。

Log Analytics:功能強大的查詢語言

當您累積更多資料時,您可以執行查詢來匯總資料並尋找個別實例。 Log Analytics 是一種功能強大的工具,可用來瞭解效能和使用方式,以及用於診斷用途。

顯示 Azure 入口網站 中 Log Analytics 範例的螢幕擷取畫面。

在伺服器上安裝您的 App

現在,將您的應用程式發佈至伺服器,讓使用者使用它,並監看入口網站中顯示的遙測。

  • 請確定您的防火牆允許應用程式將遙測傳送至這些連接埠:

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • 如果連出流量必須透過防火牆路由傳送,請定義系統屬性 http.proxyHosthttp.proxyPort

  • 在 Windows 伺服器上,安裝:

Azure App 服務、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 入口網站中 Application Insights 資源的 [計量] 窗格,其中已選取進程私人位元組。

自訂效能計數器集合

若要停止收集效能計數器的標準集合,請將下列程式碼加入 ApplicationInsights.xml 檔案的根節點下:

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

收集更多效能計數器

您可以指定要收集的更多效能計數器。

JAVA 虛擬機器公開的 JMX 計數器 ()
    <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:perf 計數器資料的格式 Attribute.Data 為 。
    • tabular:perf 計數器資料的格式為數據表資料列。
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:如果類別包含單一實例,效能計數器類別實例的名稱或空字串 (「」) 。 如果 categoryNameProcess ,而您想要收集的效能計數器是來自應用程式執行所在的目前 JVM 進程,請指定 "__SELF__"

Unix 效能計數器

使用 Application Insights 外掛程式收集的安裝 ,以取得各種不同的系統和網路資料。

取得使用者與工作階段資料

現在您要從網頁伺服器傳送遙測。 若要取得應用程式的完整 360 度檢視,您可以新增更多監視:

傳送您自己的遙測

現在您已安裝 SDK,您可以使用 API 來傳送您自己的遙測:

可用性 Web 測試

Application Insights 可讓您定期測試網站,以檢查網站運作中且正常回應。

深入瞭解如何 設定可用性 Web 測試

疑難排解

請參閱專用的疑難排解文章

測試應用程式主機與擷取服務之間的連線能力

Application Insights SDK 與代理程式會傳送遙測,以便在 REST 呼叫擷取端點時進行擷取。 您可以使用來自 PowerShell 或 curl 命令的原始 REST 用戶端,測試從 Web 伺服器或應用程式主機電腦到擷取服務端點的連線。 請參閱針對 Azure 監視器Application Insights 中的遺漏應用程式遙測進行疑難排解

在 Application Insights 中探索 Java 追蹤記錄

如果您使用 Logback 或 Log4J (v1.2 或 v2.0) 進行追蹤,您可以將追蹤記錄自動傳送到 Application Insights,您可以在其中探索及搜尋記錄。

秘訣

您只需要為應用程式設定 Application Insights 檢測金鑰一次。 如果您使用 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>

替代方案

您可以遵循這些指示,而不是使用 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 進行建置,請將下列其中一行新增至 dependenciesbuild.gradle 檔案中的群組。 然後重新整理專案相依性,以下載程式庫。

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 新增至專案。

記錄器 下載 程式庫
Logback Logback 附加器 Jar applicationinsights-logging-logback
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 入口網站 中 Application Insights 資源的 [搜尋] 窗格。

監視 Java Web 應用程式中的相依性、已擷取的例外狀況和方法執行時間

如果您已 使用 Application Insights SDK 檢測 JAVA Web 應用程式,您可以使用 JAVA 代理程式來取得更深入的深入解析,而不需要變更任何程式碼:

  • 相依性:應用程式對其他元件進行呼叫的相關資料,包括:

    • 傳出 HTTP 呼叫:會擷取透過 Apache HttpClientOkHttpjava.net.HttpURLConnection 進行的呼叫。
    • Redis 呼叫:會擷取透過 Jedis 用戶端進行的呼叫。
    • JDBC 查詢:針對 MySQL 和 PostgreSQL,如果呼叫花費超過 10 秒,代理程式會報告查詢計劃。
  • 應用程式記錄:擷取應用程式記錄,並將其與 HTTP 要求和其他遙測相互關聯:

    • Log4j 1.2
    • Log4j2
    • Logback
  • 更好的作業命名:用於入口網站中要求的匯總。

    • Spring:以 為基礎 @RequestMapping
    • JAX-RS:以 為基礎 @Path

若要使用 Java 代理程式,您要在伺服器上安裝它。 您必須使用 Application Insights Java SDK 檢測您的 Web 應用程式。

安裝 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 服務,請遵循下列步驟:

  1. 選取[設定>應用程式設定]。

  2. [應用程式設定] 底下,新增索引鍵值組:

    • 索引鍵JAVA_OPTS
    • -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    代理程式必須封裝為專案中的資源,使其最後會出現在 D:/home/site/wwwroot/ 目錄中。 若要確認代理程式位於正確的App Service目錄中,請移至[開發工具進階工具>> 偵錯主控台],並檢查月臺目錄的內容。

  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 具有值的所有遙測。 包含來自 Bot、管理員和可用性測試的要求。

篩選出所有綜合要求的遙測:


           <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。
    • 錯誤:篩選掉 WARN、INFO 和 TRACE。
    • 重大:篩選掉所有重大專案。

自訂篩選器

下列各節將說明建立您自己的自訂篩選的步驟。

撰寫篩選器的程式碼

在您的程式碼中,建立類別來實作 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 系統效能計量,請與其 Application Insights 外掛程式一起 安裝 。 這個開放原始碼解決方案會收集各種系統和網路統計資料。

一般而言,如果您已經使用 Application Insights 檢測 JAVA Web 服務,您將使用 collectd 。 它提供您更多資料,以協助您增強應用程式的效能或診斷問題。

取得檢測金鑰

Azure 入口網站中,開啟您想要顯示資料的Application Insights資源。 或者,您可以 建立新的資源

取得可識別資源的 檢測金鑰複本。

此螢幕擷取畫面顯示Azure 入口網站中 Application Insights 資源的概觀窗格,其中已醒目提示檢測金鑰。

安裝 collectd 和外掛程式

在您的 Linux 伺服器機器上:

  1. 安裝 collectd 5.4.0 版或更新版本。
  2. 下載 Application Insights 收集的寫入器外掛程式。 記下版本號碼。
  3. 將外掛程式 jar /usr/share/collectd/java 複製到 。
  4. 編輯 /etc/collectd/collectd.conf
    • 確定已啟用 JAVA 外掛程式

    • 更新 的 JVMArg java.class.path 以包含下列 jar。 更新版本號碼以符合您所下載的版本:

      • /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 從外掛程式中排除名為 readwritedisk 的來源。

以新行分隔個別指示詞。

有問題嗎?

本節提供疑難排解秘訣。

我在入口網站中看不到任何資料

請嘗試這些選項:

  • 開啟搜尋以查看原始事件是否已抵達。 有時需要較長的時間才會在計量瀏覽器中顯示。
  • 您可能需要 為傳出資料設定防火牆例外狀況。
  • 在 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.xmlbuild.gradle 檔案:

  • Application Insights spring-boot-starter 2.5.0 或更新版本。
  • Micrometer Azure Registry 1.1.0 或更新版本。
  • Micrometer Spring Legacy 1.1.0 或更新版本。 它會回復 Spring 架構中的自動設定程式碼。
  • ApplicationInsights 資源

請遵循下列步驟:

  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 Insights 檢測金鑰更新 application.properties 或 YML 檔案:

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

  3. 建置您的應用程式並加以執行。

上述步驟應該會啟動並執行預先匯總的計量自動收集至 Azure 監視器。

使用 Spring 2.x

將下列相依性新增至 您的pom.xmlbuild.gradle 檔案:

  • Application Insights Spring-boot-starter 2.1.2 或更新版本
  • Azure-spring-boot-metrics-starters 2.0.7 或更新版本
  • Application Insights 資源

請遵循下列步驟:

  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 Insights 檢測金鑰更新 application.properties 或 YML 檔案:

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

  3. 建置您的應用程式並加以執行。

上述步驟應該會讓您使用預先匯總的計量自動下載至 Azure 監視器來執行。 如需如何微調 Application Insights Spring Boot 入門版的詳細資訊,請參閱 GitHub 上的讀我檔案

預設計量:

  • 自動設定 Tomcat、JVM、Logback 計量、Log4J 計量、執行時間計量、處理器計量和 FileDescriptorMetrics 的計量。
  • 例如,如果類別路徑上存在 Netflix Hystrix,我們也會取得這些計量。
  • 您可以藉由新增個別的咖啡來取得下列計量:
    • CacheMetricsCaffeineCache (、 EhCache2GuavaCacheHazelcastCacheJCache)
    • 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
  • 如果 上的程式庫, classpath 則為 Hystrix 計量:
    • management.metrics.binders.hystrix.enabled=false
  • 如果 上的程式庫, classpath 則 AspectJ 計量:
    • spring.aop.enabled=false

注意

在 Spring Boot 應用程式的 application.propertiesapplication.yml 檔案中指定上述屬性。

搭配非 Spring Boot web 應用程式使用 Micrometer

將下列相依性新增至 您的pom.xmlbuild.gradle 檔案:

請遵循下列步驟:

  1. pom.xmlbuild.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. 如果您尚未這麼做,請在 resources 資料夾中新增 ApplicationInsights.xml 檔案。 如需詳細資訊,請參閱 新增ApplicationInsights.xml檔案

  3. 範例 Servlet 類別 (會發出計時器度量):

        @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 快取計量:

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

預設不會啟用數個計量,但可以上述方式系結。 如需完整清單,請參閱 Micrometer GitHub 存放庫

非 Spring 應用程式

將下列繫結程式碼新增至組態檔:

    New GuavaCacheMetrics().bind(registry);

後續步驟