在本文中,您將瞭解如何使用 Application Insights Java 2.x。 本文章說明如何:
- 開始使用,並瞭解如何檢測要求、追蹤相依性、收集效能計數器、診斷效能問題和例外狀況,以及撰寫程式碼來追蹤使用者對應用程式的動作。
- 將追蹤記錄傳送至 Application Insights,並使用 Application Insights 入口網站進行探索。
- 監控 Java Web 應用程式中的相依性、擷取的異常狀況和方法執行時間。
- 篩選 Java Web 應用程式中的遙測。
- 使用
collectd探索 Application Insights 中的 Linux 系統效能指標。 - 測量以 Java 虛擬機器 (JVM) 為基礎的應用程式程式碼的度量。 使用 Micrometer 應用程式監控將資料匯出至您最愛的監控系統。
開始使用 Java Web 專案中的 Application Insights
在本節中,您會使用 Application Insights SDK 來檢測要求、追蹤相依性、收集效能計數器、診斷效能問題和例外狀況,以及撰寫程式碼來追蹤使用者使用應用程式的動作。
Application Insights 是適用於 Web 開發人員的可延伸分析服務,可協助您了解即時應用程式的效能和使用方式。 Application Insights 支援在 Linux、Unix 或 Windows 上執行的 Java 應用程式。
先決條件
您需要:
- 具有有效訂閱的 Azure 帳戶。 您可以免費建立帳戶。
- 一個正常運行的 Java 應用程序。
取得 Application Insights 檢測金鑰
登入 Azure 入口網站。
在 Azure 入口網站中,建立 Application Insights 資源。 將應用程式類型設定為 Java Web 應用程式。
尋找新資源的檢測金鑰。 您需要盡快將此金鑰貼到程式碼專案中。
將適用於 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-auto、-web和-core元件之間的關係是什麼?-
applicationinsights-web-auto透過在執行階段自動註冊 Application Insights servlet 篩選,為您提供追蹤 HTTP Servlet 要求計數和回應時間的計量。 -
applicationinsights-web也提供追蹤 HTTP Servlet 要求計數及回應時間的度量值。 但是,需要在您的應用程式中手動註冊 Application Insights Servlet 篩選。 -
applicationinsights-core為您提供基礎 API,例如,您的應用程式若不是基於 servlet 的。
-
我應該如何將 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 要求資料會顯示在概觀窗格上。 如果不存在,請等待幾秒鐘,然後選取 [重新整理]。
進一步了解 指標。
按一下任何圖表,即可查看更詳細的彙總指標。
執行個體資料
按一下特定請求類型,查看個別執行個體。
Log Analytics:強大的查詢語言
當您累積更多資料時,您可以執行查詢來彙總資料並尋找個別實例。 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 分散式追蹤。
Application Insights 中的遙測相互關聯中會更詳盡地說明進入的 SDK 設定。
傳出的 SDK 配置定義在 AI-Agent.xml 檔案中。
效能計數器
選取 [ 調查> ] 以查看一系列效能計數器。
自訂效能計數器集合
若要停用標準效能計數器集的收集,請在 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:效能計數器類別實例的名稱或空字串 (“”),如果類別包含單一實例。 如果是categoryName,且您要收集的效能計數器來自執行應用程式的現行 JVM 處理程序,請Process指定"__SELF__"。
Unix 效能計數器
使用 Application Insights 外掛程式安裝 collectd ,以取得各種系統和網路資料。
取得使用者和會話資料
現在,您正在從您的網頁伺服器發送遙測資料。 若要取得應用程式的完整 360 度檢視,您可以新增更多監控:
- 將遙測新增至您的網頁 ,以監視頁面檢視和使用者計量。
- 設定 Web 測試 以確保您的應用程式保持即時且回應迅速。
傳送您自己的遙測
現在您已安裝 SDK,您可以使用 API 來傳送您自己的遙測:
可用性網路測試
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>
Alternatives
您可以按照這些指示進行操作,而不是使用 Java 代理程式。
安裝 Java SDK
如果您尚未安裝適用於 Java 的 Application Insights SDK,請遵循指示來安裝。
將記錄程式庫新增至您的專案
為您的項目選擇合適的方式。
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.+'
使用 JAR 連結
請遵循指導方針手動安裝 Application Insights Java SDK 並下載 jar。 在Maven Central頁面上,選取 jar 下載區段中適當附加程式的連結。 將下載的附加函 jar 新增至專案。
| Logger | 下載 | 圖書館 |
|---|---|---|
| Logback | Logback 附加程式 Jar | applicationinsights-logging-logback |
| Log4J v2.0 | Log4J v2 附加元件 Jar | ApplicationInsights-日誌記錄-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 Appender 可以由任何已設定的記錄器參考,而不必一定是由根記錄器參考,如前述程式碼範例所示。
在 Application Insights 入口中探索您的追蹤資料
現在您已將專案設定為將追蹤傳送至 Application Insights,您可以在 [ 搜尋] 窗格的 Application Insights 入口網站中檢視和搜尋這些追蹤。
透過記錄器提交的例外狀況會在入口網站上顯示為 例外狀況 遙測。
監控 Java Web 應用程式中的相依性、捕獲的異常和方法執行時間
如果您已 使用 Application Insights SDK 檢測 Java Web 應用程式,您可以使用 Java 代理程式來取得更深入的深入解析,而不需要變更任何程式碼:
相依性:應用程式對其他元件進行呼叫的相關資料,包括:
-
傳出 HTTP 呼叫:擷取透過
Apache HttpClient、OkHttp和java.net.HttpURLConnection進行的呼叫。 - Redis 呼叫:透過 Jedis 用戶端進行的呼叫會遭到擷取。
- JDBC 查詢:對於 MySQL 和 PostgreSQL,如果呼叫時間超過 10 秒,代理程式會報告查詢計劃。
-
傳出 HTTP 呼叫:擷取透過
應用程式記錄:擷取應用程式記錄並將其與 HTTP 要求和其他遙測產生關聯:
- Log4j 1.2
- Log4j2
- Logback
更好的作業命名:用於彙總入口網站中的請求。
-
Spring:基於
@RequestMapping。 -
JAX-RS:基於
@Path.
-
Spring:基於
若要使用 Java 代理程式,請將其安裝在伺服器上。 您的 Web 應用程式必須使用 Application Insights Java SDK 進行檢測。
安裝適用於 Java 的 Application Insights 代理程式
在執行 Java 伺服器的機器上, 下載 2.x 代理程式。 請確定您使用的 2.x Java 代理程式版本符合您使用的 2.x Application Insights Java SDK 版本。
編輯應用程式伺服器啟動 Script,並新增下列 JVM 引數:
-javaagent:<full path to the agent JAR file>例如,在 Linux 機器上的 Tomcat 中:
export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"重新啟動應用程式伺服器。
設定代理程式
建立名為 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,請遵循下列步驟:
選取 設定>應用程式設定。
在 [應用程式設定] 底下,新增索引鍵值組:
-
金鑰:
JAVA_OPTS -
值:
-javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar
代理程式必須封裝為專案中的資源,以便最終位於 D:/home/site/wwwroot/ 目錄中。 若要確認您的代理程式位於正確的 App Service 目錄中,請移至 [開發工具>] 進階工具>偵錯主控台 ,並檢查網站目錄的內容。
-
金鑰:
儲存設定並重新啟動您的應用程式。 這些步驟僅適用於在 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 網頁應用程式中的遙測
篩選條件可讓您選取 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中包含「首頁」的所有頁面。
要求遙測篩選器
<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 級別。
- WARN:過濾掉 TRACE 和 INFO。
- ERROR:過濾掉 WARN、INFO 和 TRACE。
- 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 入口網站中,開啟您想要顯示資料的 Application Insights 資源。 或者,您可以 建立新的資源。
取得用於識別資源的 檢測金鑰 的副本。
安裝 collectd 及外掛程式
在您的 Linux 伺服器機器上:
- 安裝 collectd 5.4.0 版或更新版本。
- 下載 Application Insights collectd 寫入器外掛程式。 記下版本號碼。
- 將外掛程式 jar 複製到
/usr/share/collectd/java. - 編輯
/etc/collectd/collectd.conf:請確定已啟用 Java 外掛程式 。
更新
java.class.path的 JVMArg,以包含下列 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 插件,可以從不同來源收集各種數據。
collectd根據其手冊將其重新啟動。
檢視 Application Insights 中的資料
在您的 Application Insights 資源中,開啟 [計量] 並新增圖表。 從「 自訂」 類別中選取您要查看的量度。
依預設,度量會在收集度量的所有主機上彙總。 若要檢視每個主機的指標,請在 Chart details (圖表詳細資訊 ) 窗格中,開啟 Group ( 分組),然後選擇依 CollectD-Host 分組。
排除上傳特定統計資料
根據預設,Application Insights 外掛程式會傳送所有已啟用 collectd read 外掛程式所收集的所有資料。
若要從特定外掛程式或資料來源中排除資料:
編輯組態檔。
在
<Plugin ApplicationInsightsWriter>中,新增如下表所示的指令行:指令 影響 Exclude disk排除外掛程式收集的所有 disk資料。Exclude disk:read,write從 disk外掛程式中排除名為read和write的來源。
使用換行符分隔指令。
問題?
本節提供疑難排解提示。
我在入口網站中看不到資料
請嘗試這些選項:
- 開啟 搜尋 以查看原始事件是否已到達。 有時,它們需要更長的時間才能顯示在度量探索器中。
- 您可能需要 為傳出資料設定防火牆例外狀況。
- 在 Application Insights 外掛程式中啟用追蹤。 在
<Plugin ApplicationInsightsWriter>內新增此行:SDKLogger true
- 開啟終端機並以詳細模式啟動
collectd,以查看它所報告的任何問題:sudo collectd -f
已知問題
Application Insights 寫入外掛程式與特定讀取外掛程式不相容。某些外掛程式有時會傳送 NaN,但 Application Insights 外掛程式需要浮點數。
-
症狀:
collectd記錄顯示出錯誤,包括「AI:...SyntaxError:非預期的符號 N。」 - 因應措施:排除由問題外掛程式所收集的資料。
搭配 Application Insights Java SDK 使用 Micrometer (不建議)
微尺應用程式監控測量 JVM 型應用程式程式碼的指標,並可讓您將資料匯出至您最愛的監控系統。 本節教導您如何將 Micrometer 與 Application Insights 搭配使用 Spring Boot 和非 Spring Boot 應用程式。
使用 Spring Boot 1.5x
將下列依附元件新增至 pom.xml 或 build.gradle 檔案:
- Application Insights spring-boot-starter 2.5.0 或更新版本。
- Micrometer Azure Registry 1.1.0 或更高版本。
- Micrometer Spring Legacy 1.1.0 或更高版本。 它向後移植 Spring 框架中的自動配置程式碼。
- ApplicationInsights 資源。
執行下列步驟:
更新 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>使用下列屬性,使用 Application Insights 儀表鍵更新 application.properties 或 YML 檔案:
azure.application-insights.instrumentation-key=<your-instrumentation-key-here>建置您的應用程式並執行它。
上述步驟應該可讓您啟動並執行預先彙總的計量,這些計量會自動收集至 Azure 監視器。
使用 Spring 2.x
將下列依附元件新增至 pom.xml 或 build.gradle 檔案:
- Application Insights Spring-boot-starter 2.1.2 或更新版本
- Azure-spring-boot-metrics-starters 2.0.7 或更新版本
- Application Insights 資源
執行下列步驟:
更新 Spring Boot 應用程式的 pom.xml 文件,並在其中新增以下依賴項:
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-spring-boot-metrics-starter</artifactId> <version>2.0.7</version> </dependency>使用下列屬性,使用 Application Insights 檢測索引鍵更新 application.properties 或 YML 檔案:
azure.application-insights.instrumentation-key=<your-instrumentation-key-here>建置您的應用程式並執行它。
按照上述步驟,您應該可以使用預先彙總的計量,並自動收集至 Azure 監視器進行監控。 如需如何微調 Application Insights Spring Boot 入門器的詳細資訊,請參閱 GitHub 上的自述文件。
預設指標:
- 自動設定 Tomcat 指標、JVM 指標、Logback 指標、Log4J 指標、正常運行時間指標、處理器指標和文件描述符指標。
- 例如,如果 Netflix Hystrix 出現在類別路徑上,我們也會獲得這些指標。
- 新增個別 Bean,即可使用下列度量:
-
CacheMetrics(CaffeineCache、EhCache2、GuavaCache、HazelcastCache和JCache) DataBaseTableMetricsHibernateMetricsJettyMetrics-
OkHttp3計量指標 -
Kafka計量指標
-
關閉自動指標收集:
- JVM 指標:
management.metrics.binders.jvm.enabled=false
- 日誌返回指標:
management.metrics.binders.logback.enabled=false
- 正常運行時間指標:
management.metrics.binders.uptime.enabled=false
- 處理器指標:
management.metrics.binders.processor.enabled=false
- 檔案描述符度量
management.metrics.binders.files.enabled=false
- Hystrix 指標函式庫上的
classpath:management.metrics.binders.hystrix.enabled=false
- AspectJ 指標 if 程式庫 on
classpath:spring.aop.enabled=false
備註
在 Spring Boot 應用程式的 application.properties 或 application.yml 檔案中指定上述屬性。
將 Micrometer 與非 Spring Boot Web 應用程式搭配使用
將下列依附元件新增至 pom.xml 或 build.gradle 檔案:
- Application Insights Web Auto 2.5.0 或更新版本
- Micrometer Azure 註冊表 1.1.0 或更新版本
- Application Insights 資源
執行下列步驟:
在 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>如果您尚未這樣做,請在資源資料夾中新增 ApplicationInsights.xml 檔案。 如需詳細資訊,請參閱 新增 ApplicationInsights.xml 檔案。
範例 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"); } }範例組態類別:
@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 新增至您的專案。
在您的裝置或網頁伺服器程式碼中,包括:
import com.microsoft.applicationinsights.TelemetryClient;
取得 TelemetryClient 執行個體
取得 TelemetryClient 的實例。
private TelemetryClient telemetry = new TelemetryClient();
TelemetryClient 是線程安全的。
備註
如果您使用 Azure Functions v2+ 或 Azure WebJobs v3+,請參閱 監視 Azure Functions。
您可能想要為應用程式的其他模組建立更多實例 TelemetryClient 。 例如,您的中介軟體類別中可能有一個 TelemetryClient 實例來報告商業邏輯事件。 您可以設定屬性,例如UserId和DeviceId,來識別本機。 此資訊會附加至執行個體傳送的所有事件。
telemetry.getContext().getUser().setId("...");
telemetry.getContext().getDevice().setId("...");
追蹤事件
在 Application Insights 中, 自訂事件 是資料點,您可以在 計量總管 中顯示為彙總計數,並在 診斷搜尋 中顯示為個別出現專案。 (它與 MVC 或其他框架「事件」無關。
在程式碼中插入 TrackEvent 呼叫以計算各種事件。 例如,您可能想要追蹤使用者選擇特定功能的頻率。 或者您可能想知道他們實現某些目標或犯特定類型錯誤的頻率。
舉例來說,在遊戲應用程式中,每當使用者贏得遊戲時,就會傳送事件:
telemetry.trackEvent("WinGame");
Log Analytics 中的自訂事件
遙測可在 customEvents上,位於 [Application Insights 記錄] 索引標籤 或 使用體驗 中找到。 事件可能來自 trackEvent(..) 或 Click Analytics 自動收集外掛程式。
如果 取樣 正在運作中,則 itemCount 屬性顯示的值會大於 1。 例如, itemCount==10 表示在對 trackEvent()的 的 10 個呼叫中,取樣過程僅傳輸其中一個。 若要取得自訂事件的正確計數,請使用程式碼,例如 customEvents | summarize sum(itemCount)。
備註
itemCount 的最小值為 1;記錄本身代表一個項目。
TrackMetric
Application Insights 可以繪製未附加至特定事件的計量圖表。 例如,您可以定期監視佇列長度。 使用指標時,個別測量值的興趣不如變化和趨勢,因此統計圖表很有用。
若要將計量傳送至 Application Insights,您可以使用 TrackMetric(..) API。 傳送指標有兩種方式:
單一值。 每次在應用程式中執行測量時,都會將對應的值傳送至 Application Insights。
例如,假設您有一個指標來描述容器中的項目數量。 在特定時段內,您先將三件物品放入容器中,然後移除兩件物品。 因此,你會呼叫
TrackMetric兩次。 首先,您將傳遞值3,然後傳遞值-2。 Application Insights 會為您儲存這兩個值。彙總。 當您使用指標時,每個測量值都很少引起人們的興趣。 相反,對特定時間段內發生的事情的總結很重要。 這樣的摘要稱為 聚合。
在上述範例中,該時段的彙總計量總和為
1,且計量值的計數為2。 當您使用彙總方法時,每個時段只會叫用TrackMetric一次,並傳送彙總值。 我們建議使用此方法,因為它可以將較少的資料點傳送至 Application Insights,同時仍會收集所有相關資訊,大幅降低成本和效能額外負荷。
單一值範例
若要傳送單一指標值:
telemetry.trackMetric("queueLength", 42.0);
Log Analytics 中的自訂計量
遙測可在 customMetrics 的資料表中找到。 每一列代表應用程式中的呼叫 trackMetric(..) 。
-
valueSum:測量值的總和。 要獲得平均值,請除以valueCount。 -
valueCount:彙總到此trackMetric(..)呼叫中的測量數。
備註
valueCount 的最小值為 1;記錄本身代表一個項目。
頁面檢視
在裝置或網頁應用程式中,預設會在載入每個畫面或頁面時傳送頁面檢視遙測。 但您可以變更預設值,以追蹤更多或不同時間的頁面檢視。 例如,在顯示索引標籤或窗格的應用程式中,您可能想要在使用者開啟新窗格時追蹤頁面。
使用者和會話資料會以屬性的形式與頁面檢視一起傳送,因此當有頁面檢視遙測時,使用者和會話圖表會即時運作。
自訂頁面檢視
telemetry.trackPageView("GameReviewPage");
Log Analytics 中的頁面遙測
在 Log Analytics 中,有兩個資料表會顯示瀏覽器作業的資料:
-
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
追蹤請求
伺服器 SDK 用 TrackRequest 來記錄 HTTP 要求。
如果您想要在未執行 Web 服務模組的內容中模擬請求,您也可以自行呼叫它。
推薦的傳送要求遙測的方式是,將要求作為操作上下文。
作業內容
您可以透過將遙測項目與操作上下文相關聯來將它們相互關聯。 標準要求追蹤模組會針對處理 HTTP 要求時傳送的例外狀況和其他事件執行此動作。 在 Search and Analytics 中,您可以使用其作業識別碼,輕鬆尋找與要求相關聯的任何事件。
在作業範圍內報告的遙測項目將成為該作業的子項。 作業上下文可以嵌套。
在 「搜尋」中,作業前後關聯可用來建立 「相關項目」 清單。
Log Analytics 中的請求
在 Application Insights Analytics 中,要求會顯示在資料表 requests 中。
如果 取樣 正在運作中,則 itemCount 屬性顯示的值會大於 1。 例如, itemCount==10 表示在對 trackRequest()的 的 10 個呼叫中,取樣過程僅傳輸其中一個。 若要取得依請求名稱區隔的正確請求計數和平均持續時間,請使用如下程式碼:
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 個呼叫中,取樣過程僅傳輸其中一個。 若要取得依例外狀況類型分割的正確例外狀況計數,請使用程式碼,例如:
exceptions
| summarize sum(itemCount) by type
大多數重要的堆疊資訊已經提取到單獨的變數中,但您可以拆解 details 結構以獲得更多變數。 因為此結構是動態的,所以您應該將結果轉換成您預期的類型。 例如:
exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)
若要將例外狀況與其相關要求相關聯起,請使用聯結:
exceptions
| join (requests) on operation_Id
追蹤追溯
使用 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 分析中,對 TrackTrace 的呼叫會顯示在 traces 資料表中。
如果 取樣 正在運作中,則 itemCount 屬性顯示的值會大於 1。 例如, itemCount==10 表示在對 trackTrace()的 的 10 個呼叫中,取樣過程僅傳輸其中一個。 若要取得正確的追蹤呼叫計數,可以使用諸如 traces | summarize sum(itemCount).
Track相依性
使用呼叫 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 分析中,trackDependency 呼叫會顯示在 dependencies 資料表中。
如果 取樣 正在運作中,則屬性 itemCount 會顯示大於 1 的值。 例如, itemCount==10 表示在對 trackDependency()的 的 10 個呼叫中,取樣過程僅傳輸其中一個。 若要取得依目標元件分割的正確相依性計數,請使用如下程式碼:
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,可能會被多次計算。
如果使用者登入您的應用程式,您可以在瀏覽器程式碼中設定經過驗證的使用者 ID,以取得更準確的計數。 不需要使用使用者的實際登入名稱。 它只需要是該使用者唯一的 ID。 它不得包含空格或任何字元 ,;=|。
使用者 ID 也會在會話 Cookie 中被設定,並傳送至伺服器。 如果已安裝伺服器 SDK,則會將已鑑別的使用者 ID 作為用戶端及伺服器遙測環境定義內容的一部分傳送。 然後,您可以對其進行過濾和搜索。
如果您的應用程式將使用者分組到帳戶中,您也可以傳遞帳戶的識別碼。 同樣的字元限制也適用。
在 Metrics Explorer 中,您可以建立計算 使用者、已驗證和 使用者帳戶的圖表。
您也可以 搜尋 具有特定使用者名稱和帳戶的客戶資料點。
使用屬性篩選、搜尋及區隔資料
您可以將屬性和測量附加至事件、計量、頁面檢視、例外狀況和其他遙測資料。
屬性 是字串值,可用來篩選使用量報告中的遙測。 舉例來說,如果您的應用程式提供數個遊戲,您可以將遊戲名稱附加至每個事件,以便查看哪些遊戲更受歡迎。
琴弦長度有 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);
這很重要
請確定您不會在屬性中記錄個人識別資訊。
警告
請勿重複使用相同的遙測專案實例 (event 在此範例中) 來呼叫 Track*() 多次。 此做法可能會導致遙測資料以不正確的設定被傳送。
Log Analytics 中的自訂度量和屬性
在 Log Analytics 中,自訂計量和屬性會顯示在每個遙測記錄的 customMeasurements 和 customDimensions 屬性中。
例如,如果您將名為 “game” 的屬性新增至要求遙測,則此查詢會計算 “game” 不同值的出現次數,並顯示自訂計量 “score” 的平均值:
requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)
請注意:
- 當您從 或
customDimensionscustomMeasurementsJSON 擷取值時,它具有動態類型,因此您必須轉換它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);
}
遙測上下文
TelemetryClient 具有 Context 屬性,其中包含與所有遙測資料一起傳送的值。 它們通常由標準遙測模組設定,但您也可以自行設定。 例如:
telemetry.Context.Operation.Name = "MyOperationName";
如果您自行設定其中任何一個值,請考慮從 ApplicationInsights.config 中刪除相關行,以免您的值和標準值混淆。
- 元件:應用程式及其版本。
- 裝置:應用程式執行之裝置的相關資料。 在 Web 應用程式中,它是傳送遙測的伺服器或用戶端裝置。
- InstrumentationKey:Azure 中出現遙測的 Application Insights 資源。
- 位置:裝置的地理位置。
-
操作:在 Web 應用程式中,目前的 HTTP 請求。 在其他應用程式類型中,您可以設定此值,將事件分組在一起。
- 識別碼:生成一個用於關聯不同事件的值,以便在診斷搜尋中查看任何事件時,可以找到相關項目。
- 名稱:識別碼,通常是 HTTP 請求的 URL。
- SyntheticSource:如果不是空值或空白,則表示請求來源已識別為機器人或 Web 測試的字串。 預設情況下,它會從度量探索器的計算中排除。
- 會話:使用者的會話。 ID 會設定為產生的值,當使用者有一段時間沒有作用中時,該值會變更。
- 使用者:使用者資訊。
Limits
每個應用程式 (亦即每個檢測金鑰) 都有一些計量和事件的數目限制。 限制取決於您選擇的定價方案。
| Resource | 預設限制 | 上限 | 註釋 |
|---|---|---|---|
| 每日資料總量 | 100 GB | 請連絡支援人員。 | 您可以設定上限以減少資料。 如果您需要更多資料,可以從入口網站將限制增加到最多 1,000 GB。 若容量大於 1000 GB,請傳送電子郵件給 AIDataCap@microsoft.com。 |
| Throttling | 32,000 個事件/秒 | 請連絡支援人員。 | 此限制會測量超過一分鐘。 |
| 數據保留日誌 | 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 和 快照偵錯器 數據保留 | 兩週 | 請連絡支援人員。 資料保留上限為六個月。 | |
| 每天傳送的 .NET Profiler 數據 | 沒有限制 | 沒有限制。 | |
| 每天傳送的快照偵錯工具資料 | 每個受監視應用程式每天 30 個快照 | 沒有限制。 | 可透過設定修改每個應用程式所收集的快照集數目。 |
如需有關定價和配額的詳細資訊,請參閱 Application Insights 帳單。
若要避免達到資料速率限制,請使用 取樣。
若要判斷資料的保留時間,請參閱 資料保留和隱私權。
後續步驟
- 將 監控新增至您的網頁 ,以監控頁面載入時間、AJAX 呼叫和瀏覽器例外狀況。
- 撰寫 自訂遙測 來追蹤瀏覽器或伺服器中的使用情況。
- 使用 Log Analytics 針對應用程式的遙測數據進行強大的查詢。
- 使用 診斷搜尋。
- 請考慮將 取樣 作為不會扭曲指標的篩選替代方案。
- 若要進一步瞭解 Micrometer,請參閱 Micrometer 文件。
- 若要瞭解 Azure 上的 Spring,請參閱 Azure 上的 Spring 檔。
- 如需詳細資訊,請參閱 適用於 Java 開發人員的 Azure。