共用方式為


Microsoft Azure 監視器 Application Insights JavaScript SDK 設定

Azure Application Insights JavaScript SDK 提供用於追蹤、監視和偵錯 Web 應用程式的設定。

SDK 組態

除非另有說明,否則這些設定欄位是選擇性欄位,預設為 false。

如需如何新增 SDK 組態的指示,請參閱 新增 SDK 組態

名稱 類型 預設
帳戶ID

如果您的應用程式將使用者分組為帳戶,則為選用帳戶識別碼。 沒有空格、逗號、分號、等號或垂直線
字串 null
addRequestContext

提供在 API 呼叫開始時使用內容擴充相依性記錄的方法。 預設值為未定義。 如果您設定 xhr 相關內容,則必須檢查 xhr 是否存在。 如果您設定 fetch request 相關內容,則必須檢查 fetch responsefetch 是否存在。 否則,您可能無法取得所需的資料。
(requestContext: IRequestionContext) => {[key: string]: any} 未定義
ajaxPerfLookupDelay

預設為 25 毫秒。 要在重新嘗試尋找 Ajax 要求的 window.performance 計時之前等候的時間量,而時間以毫秒為單位,並直接傳遞至 setTimeout()。
NUMERIC 25
應用程式ID

AppId 用於 AJAX 相依性之間的相互關聯,而這些相依性發生在具有伺服器端要求的用戶端。 指標 API 在啟用時無法自動使用,但可以在設定中手動設定。 預設值是 null
字串 null
autoTrackPageVisitTime

如果為 true,則會在頁面檢視上追蹤「前一個」檢測頁面的檢視時間,並將其傳送為遙測,然後為目前頁面檢視啟動新的計時器。 它會作為名為 PageVisitTime 的自訂指標在 milliseconds 中傳送,並使用 Date now() 函式計算(如果可用),若不可用(例如 IE8 或更舊版本)則回退至 (new Date()).getTime()。 預設值為 false。
boolean 假的
convertUndefined

提供將未定義欄位轉換為使用者定義值的選項。
any 未定義
cookieCfg

預設為啟用 Cookie 使用,完整預設值請參閱 ICookieCfgConfig 設定。
ICookieCfgConfig
[選擇性]
(自 2.6.0 起)
未定義
cookieDomain

自訂 Cookie 網域。 如果您想要跨子網域來共用 Application Insights Cookie,則這十分有用。
(自 v2.6.0 起) 如果已定義 cookieCfg.domain,其優先權將高於此值。
cookieCfg.domain 的別名
[選擇性]
null
cookiePath

自訂 Cookie 路徑。 如果您想要在應用程式閘道後方共用 Application Insights Cookie,則這十分有用。
如果已定義 cookieCfg.path,則會優先使用。
cookieCfg.path 的別名
[選擇性]
(自 2.6.0 起)
null
correlationHeaderDomains

啟用特定網域的相互關聯標頭
字串[] 未定義
correlationHeaderExcludedDomains

停用特定網域的相互關聯標頭
字串[] 未定義
correlationHeaderExcludePatterns

使用規則運算式來停用相互關聯標頭
regex[] 未定義
createPerfMgr

會在需要建立 IPerfManager 執行個體且 enablePerfMgr 已啟用時呼叫的回呼函數,它可讓您覆寫 PerfManager() 的預設建立,而不需要在初始化之後進行 setPerfMgr()
(core: IAppInsightsCore, notificationManager: INotificationManager) => IPerfManager 未定義
customHeaders

使用者在使用自訂端點時提供額外標頭的能力。 使用指標傳送者時,不會在瀏覽器關閉時刻新增 customHeaders。 而且,IE9 或更早版本不支援新增自訂標頭。
[{header: string, value: string}] 未定義
diagnosticLogInterval

(內部) 內部記錄佇列的輪詢間隔 (毫秒)
NUMERIC 一萬
disableAjaxTracking(禁用AJAX追蹤)

如果為 true,則不會自動收集 Ajax 呼叫。 預設值為 false。
boolean 假的
disableCookiesUsage

預設為 false。 布林值,指出是否要停用 SDK 使用 Cookie。 如果為 true,SDK 將不會儲存或讀取來自 Cookie 的任何資料。
(自 2.6.0 版起) 如果已定義 cookieCfg.enabled,則會優先使用。 透過 Core.getCookieMgr () setEnabled (true) 初始化之後,就可以重新啟用 Cookie 使用。
cookieCfg.enabled 的別名
[選擇性]
假的
disableCorrelationHeaders

如果為 false,則 SDK 會將兩個標頭 ('Request-Id' 和 'Request-Context') 新增至全部相依性要求,以便將這些與伺服器端的對應要求相互關聯。 預設值為 false。
boolean 假的
disableDataLossAnalysis (停用資料遺失分析)

如果為 false,則會在啟動時檢查內部遙測傳送者緩衝區是否有尚未傳送的項目。
boolean
停用例外追蹤

如果為 true,則不會自動收集例外狀況。 預設值為 false。
boolean 假的
disableFetchTracking

disableFetchTracking 的預設設定為 false,表示其已啟用。 不過,在 2.8.10 之前的版本中,這預設為停用。 設定為 true 時,不會自動收集擷取要求。 在 2.8.0 版中,預設設定從 true 變更為 false
boolean 假的
disableFlushOnBeforeUnload

預設為 false。 如果為 true,則不會在觸發 onBeforeUnload 事件時呼叫 flush 方法
boolean 假的
disableIkeyDeprecationMessage

停用檢測金鑰淘汰錯誤訊息。 如果為 true,則「不會」傳送錯誤訊息。
boolean
disableInstrumentationKeyValidation

如果為 true,則會略過檢測金鑰驗證檢查。 預設值為 false。
boolean 假的
禁用遙測

如果為 true,則不會收集或傳送遙測。 預設值為 false。
boolean 假的
disableXhr

預設不會使用 XMLHttpRequest 或 XDomainRequest (適用於 Internet Explorer < 第 9 版),而是改為嘗試使用 fetch() 或 sendBeacon。 如果沒有其他可用的傳輸,則會使用 XMLHttpRequest
boolean 假的
分布式追踪模式

設定分散式追蹤模式。 如果已設定 AI_AND_W3C 模式或 W3C 模式,則會產生 W3C 追蹤內容標頭 (traceparent/tracestate),並將其包括在全部傳出要求中。 提供 AI_AND_W3C 以與任何舊版 Application Insights 已檢測服務達成回溯相容性。
numeric 或 DistributedTracingModes DistributedTracing Modes.AI_AND_W3C
enableAjaxErrorStatusText

預設為 false。 如果為 true,則會針對失敗的 AJAX 要求,於相依性事件中包括回應錯誤資料文字布林值。
boolean 假的
enableAjaxPerfTracking

預設為 false。 旗標,可啟用查閱和包括所回報 Ajax (XHR 和擷取) 計量中的更多瀏覽器 window.performance 計時。
boolean 假的
啟用自動路線追蹤

自動追蹤單頁應用程式 (SPA) 中的路由變更。 如果為 true,則每個路由變更都會將新的 Pageview 傳送至 Application Insights。 雜湊路由變更 (example.com/foo#bar) 也會記錄為新的頁面檢視。
注意:如果您啟用此字段,請勿啟用 historyReact 路由器 設定的物件,因為您會收到多個頁面檢視事件。
boolean 假的
enableCorsCorrelation

如果為 true,則 SDK 會將兩個標頭 ('Request-Id' 和 'Request-Context') 新增至全部 CORS 要求,以將傳出 AJAX 相依性與伺服器端的對應要求相互關聯。 預設值為 false。
boolean 假的
enableDebug

如果為 true,則不論 SDK 記錄設定為何,都會擲回「內部」偵錯資料作為例外狀況,而「不」是予以記錄。 預設值為 false。
注意: 啟用此設定會導致每當發生內部錯誤時,就會捨棄遙測。 這可以用於快速識別您的 SDK 設定或使用問題。 如果您不想要在偵錯時遺失遙測,則請考慮使用 loggingLevelConsoleloggingLevelTelemetry,而非 enableDebug
boolean 假的
啟用性能管理器

啟用時 (true),會針對已檢測的程式碼建立本地 perfEvents,以發出 perfEvents (透過 doPerf() 協助程式)。 這可以用來根據使用量或選擇性地在您自己的檢測程式碼內識別 SDK 內的效能問題。
boolean 假的
enableRequestHeaderTracking

如果為 true,則會追蹤 AJAX 與 Fetch 要求標頭,預設值為 false。 如果未設定 ignoreHeaders,則不會記錄授權和 X-API-Key 標頭。
boolean 假的
enableResponseHeaderTracking

如果為 true,則會追蹤 AJAX 與 Fetch 要求的回應標頭,預設值為 false。 如果未設定 ignoreHeaders,則不會記錄 WWW-Authenticate 標頭。
boolean 假的
enableSessionStorageBuffer

預設為 true。 如果為 true,則會將具有所有未傳送遙測的緩衝區儲存至工作階段儲存體。 緩衝區會在頁面載入時還原
boolean
enableUnhandledPromiseRejectionTracking

如果為 true,則會以 JavaScript 錯誤的形式自動收集未處理的 Promise 拒絕。 disableExceptionTracking 為 true (不會追蹤例外狀況) 時,將會忽略設定值,而且將不會回報未處理的 Promise 拒絕。
boolean 假的
eventsLimitInMem

SDK 在不使用工作階段儲存體時開始卸除事件之前,可以保留在記憶體中的事件數目 (預設值)。
number 一萬
excludeRequestFromAutoTrackingPatterns

提供從 XMLHttpRequest 或 Fetch 要求自動追蹤中排除特定路由的方法。 如果已定義,則針對要求 URL 與 regex 模式相符的 Ajax/fetch 要求,會關閉自動追蹤。 預設值為未定義。
string[] |RegExp[] 未定義
featureOptIn

設定功能加入詳細資料。

此設定欄位僅適用於 3.0.3 版和更新版本。
IFeatureOptIn 未定義
idLength

識別預設長度,而此長度是用來產生新隨機工作階段和使用者識別碼。 預設值為 22,而先前的預設值為 5 (2.5.8 版或更小版本),如果您需要保留先前的長度上限,則應該將此值設定為 5。
NUMERIC 22
ignoreHeaders

要在記錄資料中忽略的 AJAX 與 Fetch 要求和回應標頭。 若要覆寫或捨棄預設值,請將包含要排除之全部標頭的陣列或空白陣列新增至設定。
字串[] ["Authorization", "X-API-Key", "WWW-Authenticate"]
isBeaconApiDisabled

如果為 false,SDK 將會使用指標 API 傳送全部遙測
boolean
是否啟用瀏覽器連結追蹤

預設值為 false。 如果為 true,SDK 會追蹤所有 瀏覽器連結 要求。
boolean 假的
isRetryDisabled

預設為 false。 如果為 false,則請針對 206 (部分成功)、408 (逾時)、429 (要求太多)、500 (內部伺服器錯誤)、503 (服務無法使用) 和 0 (只有在偵測到時才離線) 進行重試
boolean 假的
isStorageUseDisabled

如果為 true,SDK 將不會儲存或讀取來自本地和工作階段儲存體的任何資料。 預設值為 false。
boolean 假的
loggingLevelConsole

將「內部」 Application Insights 錯誤記錄至主控台。
0:關閉、
1:僅限嚴重錯誤、
2:所有項目 (錯誤與警告)
NUMERIC 0
loggingLevelTelemetry

將「內部」 Application Insights 錯誤傳送為遙測。
0:關閉、
1:僅限嚴重錯誤、
2:所有項目 (錯誤與警告)
NUMERIC 1
maxAjaxCallsPerView

預設為 500 - 控制每個頁面檢視將會監視多少次 Ajax 呼叫。 設定為 -1,以監視頁面上的所有 (無限制) Ajax 呼叫。
NUMERIC 500
maxAjaxPerfLookupAttempts

預設值為 3。 需要尋找 window.performance 時間的最大次數 (如果有)。 並非全部瀏覽器都會在報告 XHR 要求結束之前填入 window.performance。 針對 fetch 要求,會在完成之後新增。
NUMERIC 3
maxBatchInterval

傳送之前批次處理遙測多長的時間 (毫秒)
NUMERIC 15000
maxBatchSizeInBytes

遙測批次的大小上限。 如果批次超過此限制,則會立即傳送該批次,並啟動新的批次
NUMERIC 一萬
namePrefix

選用值,將用作 localStorage 和工作階段 Cookie 名稱的名稱後置詞。
字串 未定義
onunloadDisableBeacon

預設為 false。 當索引標籤關閉時,SDK 會使用 Beacon API 傳送所有剩餘的遙測資料。
boolean 假的
onunloadDisableFetch

如果支援 fetch keepalive,不會在卸載期間將其用於傳送事件,其仍可能會回復為未使用 keepalive 的 fetch()
boolean 假的
overridePageViewDuration

如果為 true,則呼叫 trackPageView 時,會將 trackPageView 的預設行為變更為記錄頁面檢視持續時間間隔的結束。 如果為 false 且未對 trackPageView 提供任何自訂持續時間,則會使用導覽計時 API 來計算頁面檢視效能。 預設值為 false。
boolean 假的
perfEvtsSendAll

啟用 enablePerfMgr 而且 IPerfManager 引發 INotificationManager.perfEvent() 時,此旗標可決定針對所有事件 (true) 還是只針對「父代」事件引發事件 (false 為預設值為<>) (和傳送至所有接聽程式)。
IPerfEvent 是一個事件,其在事件發生時,沒有任何其他 IPerfEvent 仍在運行,且其 屬性不為 Null 或 未定義。 自 2.5.7 版起
boolean 假的
取樣百分比

已傳送的事件百分比。 預設值為 100,表示傳送所有事件。 如果您想要針對大規模應用程式保留資料上限,請設定此項目。
NUMERIC 100
sdkExtension

設定 SDK 延伸模組名稱。 只允許字母字元。 副檔名名稱會新增為 'ai.internal.sdkVersion' 標記的前置詞 (例如 'ext_javascript:2.0.0')。 預設值為 null。
字串 null
sessionCookiePostfix

選用值,將用作工作階段 Cookie 名稱的名稱後置詞。 如果未定義,namePrefix 將用作工作階段 Cookie 名稱的名稱後置詞。
字串 未定義
sessionExpirationMs

如果工作階段已持續執行這段時間 (毫秒),則會記錄工作階段。 預設為 24 小時
NUMERIC 86400000
sessionRenewalMs

如果使用者在這段時間 (毫秒) 內未作用,則會記錄工作階段。 預設值是 30 分鐘
NUMERIC 1800000
throttleMgrCfg

依金鑰設定節流管理員設定。

此設定欄位僅適用於 3.0.3 版和更新版本。
{[key: number]: IThrottleMgrConfig} 未定義
userCookiePostfix

選擇性值,用作使用者 Cookie 名稱的名稱後置詞。 如果未定義,則不會對於使用者 Cookie 名稱新增任何後置詞。
字串 未定義

分散式追蹤

現代雲端和 微服務 架構支援簡單、可獨立部署的服務,可降低成本,同時提高可用性和輸送量。 然而,它使整個系統更難推理和調試。 分散式追蹤透過提供效能分析器來解決這個問題,該分析器的工作方式類似於雲端和微服務架構的呼叫堆疊。

Azure 監視器提供兩種使用分散式追蹤資料的體驗:單一交易/要求的交易 診斷 檢視,以及顯示系統互動方式的 應用程式對應 檢視。

Application Insights 可以個別監視每個元件,並使用分散式遙測相互關聯來偵測哪個元件負責失敗或效能降低。 本文說明 Application Insights 所使用的不同語言和平臺上的資料模型、內容傳播技術、通訊協定,以及相互關聯策略的實作。

透過 Application Insights 使用自動檢測或 SDK 啟用分散式追蹤

適用於 .NET、.NET Core、Java、Node.js和 JavaScript 的 Application Insights 代理程式和 SDK 都原生支援分散式追蹤。

安裝並設定適當的 Application Insights SDK 後,SDK 相依性自動收集器會自動收集熱門架構、程式庫和技術的追蹤資訊。 支援技術的完整清單可在相依性自動化收集文檔中找到。

任何技術也可以透過呼叫 TelemetryClient 上的 TrackDependency 來手動追蹤。

遙測相互關聯的資料模型

Application Insights 會定義分散式遙測相互關聯的資料 模型 。 若要將遙測與邏輯作業產生關聯,每個遙測項目都有一個名為 operation_Id的內容欄位。 分散式追蹤中的每個遙測專案都會共用此識別碼。 因此,即使您遺失某一層的遙測資料,您仍然可以將其他組件報告的遙測資料進行配對。

分散式邏輯作業通常由一組較小的作業組成,這些作業是由其中一個元件所處理的要求。 請求遙測 定義這些作業。 每個要求遙測項目都有自己的 id,可唯一且全域地識別它。 與要求相關聯的所有遙測專案(例如追蹤和例外狀況)都應該將 operation_parentId 設定為要求 id 的值。

相依性遙測 代表每個外部操作,例如對另一個元件的 HTTP 呼叫。 它還定義了全球獨一無二的 id。 由這個相依性呼叫起始的要求遙測會使用 這個 id 作為其 operation_parentId

您可以使用 operation_Idoperation_parentIdrequest.id 來建立分散式邏輯操作的 dependency.id 視圖。 這些欄位也會定義遙測呼叫的因果關係順序。

在微服務環境中,元件的追蹤資料可以儲存於不同的儲存項目。 每個元件都可以在 Application Insights 中擁有自己的連接字串。 若要取得邏輯作業的遙測,Application Insights 會從每個儲存項目查詢資料。

當儲存項目數量較多時,您需要提示下一步要去哪裡尋找。 Application Insights 資料模型會定義兩個欄位來解決此問題: request.sourcedependency.target。 第一個欄位會識別起始相依性要求的元件。 第二個欄位會識別哪個元件傳回相依性呼叫的回應。

如需從多個不同執行個體查詢的相關資訊,請參閱 在 Azure 監視器中跨 Log Analytics 工作區、應用程式和資源查詢資料

Example

讓我們看看下列範例。 名為 Stock Prices 的應用程式會使用稱為 Stock 的外部 API 來顯示股票的目前市場價格。 「股票價格」應用程式有一個名為「股票頁面」的頁面,用戶端 Web 瀏覽器會使用 GET /Home/Stock來開啟該頁面。 應用程式會使用 HTTP 呼叫 GET /api/stock/value來查詢 Stock API。

您可以執行查詢來分析產生的遙測:

(requests | union dependencies | union pageViews)
| where operation_Id == "STYz"
| project timestamp, itemType, name, id, operation_ParentId, operation_Id

在結果中,所有遙測專案都會共用根 operation_Id。 從頁面進行 Ajax 呼叫時,會將新的唯一 ID (qJSXU) 指派給相依性遙測,而 pageView 的 ID 會用作 operation_ParentId。 接著,伺服器要求會使用 Ajax 識別碼作為 operation_ParentId

項目類型 名稱 ID operation_ParentId operation_Id
頁面檢視 庫存頁面 STYz STYz
相依性 GET /首頁/庫存 qJSXU STYz STYz
要求 GET 首頁/庫存 KqKwlrSt9PA= qJSXU STYz
相依性 GET /api/stock/value bBrf2L7mm2g= KqKwlrSt9PA= STYz

呼叫外部服務時 GET /api/stock/value ,您需要知道該伺服器的身分識別,以便適當地設定 dependency.target 欄位。 當外部服務不支援監視時, target 會設定為服務的主機名稱。 例如 stock-prices-api.com。 但是,如果服務透過傳回預先定義的 HTTP 標頭來識別自己, target 則包含允許 Application Insights 透過查詢該服務的遙測來建置分散式追蹤的服務身分識別。

使用 W3C TraceContext 的相互關聯標頭

Application Insights 正在過渡到 W3C Trace-Context 規範:

  • traceparent:攜帶呼叫的全域唯一操作ID和唯一識別碼。
  • tracestate:攜帶系統特定的追蹤內容。

最新版本的 Application Insights SDK 支援 Trace-Context 通訊協定,但您可能需要選擇加入。 (會維護與 Application Insights SDK 所支援的先前相互關聯通訊協定的回溯相容性。

相關性 HTTP 通訊協定 (也稱為 Request-Id) 即將取代。 此通訊協定定義兩個標頭:

  • Request-Id:承載通話的全域唯一識別碼。
  • Correlation-Context:攜帶分散式追蹤屬性的名稱值配對集合。

Application Insights 也會定義相互關聯 HTTP 通訊協定的 延伸模組 。 它會使用 Request-Context 名稱值組來傳遞立即呼叫端或被呼叫者所使用的屬性集合。 Application Insights SDK 會使用此標頭來設定 dependency.targetrequest.source 欄位。

W3C Trace-Context 和 Application Insights 資料模型會依照下列方式對應:

Application Insights W3C TraceContext
IdRequestDependency 父 ID
Operation_Id 追蹤識別碼
Operation_ParentId 此範圍父代範圍的 parent-id。 如果此欄位是根範圍,則必須是空的。

如需詳細資訊,請參閱 Application Insights 遙測資料模型

啟用 W3C 分散式追蹤支援

依預設,此功能會針對 JavaScript 啟用,當主控頁面網域與傳送要求的網域相同時,會自動包含標頭 (例如,主控頁面是, example.com 而 Ajax 要求會傳送至 example.com)。 若要變更分散式追蹤模式,請使用 distributedTracingMode 組態欄位。 預設情況下會提供 AI_AND_W3C,以確保與由 Application Insights 監測的任何舊版服務保持向後相容。

如果 XMLHttpRequest 或 Fetch Ajax 要求傳送至不同的網域主機 (包括子網域),則預設不會包含相互關聯標頭。 若要啟用此功能,請將組態欄位設定enableCorsCorrelationtrue。 如果您設 enableCorsCorrelationtrue,則所有 XMLHttpRequest 和 Fetch Ajax 要求都包含相關性標頭。 因此,如果呼叫的伺服器上的應用程式不支援 traceparent 標頭,則要求可能會失敗,視瀏覽器/版本是否可以根據伺服器接受的標頭來驗證要求。 您可以使用 [correlationHeaderExcludedDomains 組態] 欄位,將伺服器的網域從跨元件相互關聯標題插入中排除。 例如,您可以使用 correlationHeaderExcludedDomains: ['*.auth0.com'] 從發送至 Auth0 身分提供者的請求中排除相關的標頭。

這很重要

若要查看啟用相互關聯所需的所有設定,請參閱 JavaScript相互關聯檔案

篩選和預先處理遙測

您可以撰寫程式碼來篩選、修改或增強遙測,然後再從 SDK 傳送出去。 處理包括從標準遙測模組傳送的資料,例如 HTTP 要求收集和相依性收集。

  • 篩選可以先修改或捨棄遙測,再藉由實作 ITelemetryProcessor 從 SDK 傳送遙測。 例如,您可以排除機器人發出的請求,以減少遙測數據量。 與取樣不同,您可以完全控制傳送或捨棄的內容,但這會影響所有基於彙總日誌的指標。 視您捨棄項目的方式而定,您也可能會失去在相關項目之間瀏覽的能力。

  • 透過實作 ITelemetryInitializer,將屬性新增或修改至從應用程式傳送的任何遙測資料。 例如,您可以新增計算值或版本號碼,以篩選入口網站中的資料。

  • 取樣 可減少遙測量量,而不會影響您的統計資料。 它會將相關的資料點放在一起,以便您在診斷問題時可以在它們之間導航。 在入口網站中將乘以總計數,以補償取樣。

備註

SDK API 可用來傳送自訂事件和指標。

Filtering

此技術可讓您直接控制遙測資料流程中包含或排除的內容。 篩選可用來卸除遙測項目,使其無法傳送至 Application Insights。 您可以搭配取樣或單獨使用篩選。

若要篩選遙測,您可以撰寫遙測處理器,並將其註冊到 TelemetryConfiguration。 所有遙測都會通過您的處理器。 您可以選擇將其從串流中刪除,或將其提供給鏈中的下一個處理器。 包含來自標準模組的遙測,例如 HTTP 請求收集器和相依性收集器,以及您自己追蹤的遙測。 例如,您可以篩選出來自機器人的請求或成功的依賴呼叫的遙測數據。

警告

使用處理器篩選從 SDK 傳送的遙測可能會扭曲您在入口網站中看到的統計資料,並使追蹤相關專案變得困難。

相反,請考慮使用 採樣

JavaScript Web 應用程式

您可以使用 ITelemetryInitializer 來篩選來自 JavaScript Web 應用程式的遙測。

  1. 建立遙測初始化設定回呼函數。 回呼函式會接收 ITelemetryItem 作為參數,這是正在處理的事件。 從這個回呼傳回 false 會導致遙測項目遭到篩掉。

    var filteringFunction = (envelope) => {
      if (envelope.data.someField === 'tobefilteredout') {
        return false;
      }
      return true;
    };
    
  2. 新增您的遙測初始化器回調函數:

    appInsights.addTelemetryInitializer(filteringFunction);
    

ITelemetryProcessor 和 ITelemetryInitializer

遙測處理器和遙測初始化器之間有何差異?

  • 其用途有部分重疊。 兩者都可用來新增或修改遙測的屬性,不過建議您使用初始設定式來達到此目的。
  • 遙測初始化運算式一律會在遙測處理器之前執行。
  • 遙測初始化器可能會多次被呼叫。 依照慣例,他們不會設定任何已設定的屬性。
  • 遙測處理器可讓您完全取代或捨棄遙測項目。
  • 每個遙測項目都會呼叫所有已註冊的遙測初始程式。 針對遙測處理器,SDK 保證呼叫第一個遙測處理器。 是否呼叫其餘處理器是由先前的遙測處理器所決定。
  • 使用遙測初始化器,以更多屬性來擴充遙測,或覆寫現有的屬性。 使用遙測處理器來過濾遙測數據。

新增/修改屬性

使用遙測初始化器來豐富遙測資料或覆寫標準遙測模組設定的屬性。

例如,網頁套件中的 Application Insights 會收集 HTTP 請求的遙測資料。 根據預設,它會將任何回應碼 >=400 的要求標示為失敗。 如果您想要將 400 視為成功,您可以提供一個遙測初始化器來設定成功屬性。

如果您提供遙測初始化器,則每當呼叫任何 Track*() 方法時,都會呼叫它。 此初始化運算式包含 Track() 標準遙測模組所呼叫的方法。 依照慣例,這些模組不會設定初始化運算式已設定的任何屬性。 在呼叫遙測處理器之前會呼叫遙測初始化程式,因此初始化程式所做的任何擴充都對處理器可見。

JavaScript 遙測初始化運算式

如有需要,請插入 JavaScript 遙測初始化運算式。 如需 Application Insights JavaScript SDK 遙測初始化運算式的詳細資訊,請參閱 遙測初始化運算式

JavaScript (Web) SDK 載入器指令碼組態中新增 onInit 回呼函式,以插入遙測初始化運算式:

<script type="text/javascript">
!(function (cfg){function e(){cfg.onInit&&cfg.onInit(n)}var x,w,D,t,E,n,C=window,O=document,b=C.location,q="script",I="ingestionendpoint",L="disableExceptionTracking",j="ai.device.";"instrumentationKey"[x="toLowerCase"](),w="crossOrigin",D="POST",t="appInsightsSDK",E=cfg.name||"appInsights",(cfg.name||C[t])&&(C[t]=E),n=C[E]||function(g){var f=!1,m=!1,h={initialize:!0,queue:[],sv:"8",version:2,config:g};function v(e,t){var n={},i="Browser";function a(e){e=""+e;return 1===e.length?"0"+e:e}return n[j+"id"]=i[x](),n[j+"type"]=i,n["ai.operation.name"]=b&&b.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(h.sv||h.version),{time:(i=new Date).getUTCFullYear()+"-"+a(1+i.getUTCMonth())+"-"+a(i.getUTCDate())+"T"+a(i.getUTCHours())+":"+a(i.getUTCMinutes())+":"+a(i.getUTCSeconds())+"."+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z",iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:undefined,seq:"1",aiDataContract:undefined}}var n,i,t,a,y=-1,T=0,S=["js.monitor.azure.com","js.cdn.applicationinsights.io","js.cdn.monitor.azure.com","js0.cdn.applicationinsights.io","js0.cdn.monitor.azure.com","js2.cdn.applicationinsights.io","js2.cdn.monitor.azure.com","az416426.vo.msecnd.net"],o=g.url||cfg.src,r=function(){return s(o,null)};function s(d,t){if((n=navigator)&&(~(n=(n.userAgent||"").toLowerCase()).indexOf("msie")||~n.indexOf("trident/"))&&~d.indexOf("ai.3")&&(d=d.replace(/(\/)(ai\.3\.)([^\d]*)$/,function(e,t,n){return t+"ai.2"+n})),!1!==cfg.cr)for(var e=0;e<S.length;e++)if(0<d.indexOf(S[e])){y=e;break}var n,i=function(e){var a,t,n,i,o,r,s,c,u,l;h.queue=[],m||(0<=y&&T+1<S.length?(a=(y+T+1)%S.length,p(d.replace(/^(.*\/\/)([\w\.]*)(\/.*)$/,function(e,t,n,i){return t+S[a]+i})),T+=1):(f=m=!0,s=d,!0!==cfg.dle&&(c=(t=function(){var e,t={},n=g.connectionString;if(n)for(var i=n.split(";"),a=0;a<i.length;a++){var o=i[a].split("=");2===o.length&&(t[o[0][x]()]=o[1])}return t[I]||(e=(n=t.endpointsuffix)?t.location:null,t[I]="https://"+(e?e+".":"")+"dc."+(n||"services.visualstudio.com")),t}()).instrumentationkey||g.instrumentationKey||"",t=(t=(t=t[I])&&"/"===t.slice(-1)?t.slice(0,-1):t)?t+"/v2/track":g.endpointUrl,t=g.userOverrideEndpointUrl||t,(n=[]).push((i="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",o=s,u=t,(l=(r=v(c,"Exception")).data).baseType="ExceptionData",l.baseData.exceptions=[{typeName:"SDKLoadFailed",message:i.replace(/\./g,"-"),hasFullStack:!1,stack:i+"\nSnippet failed to load ["+o+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(b&&b.pathname||"_unknown_")+"\nEndpoint: "+u,parsedStack:[]}],r)),n.push((l=s,i=t,(u=(o=v(c,"Message")).data).baseType="MessageData",(r=u.baseData).message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+l+")").replace(/\"/g,"")+'"',r.properties={endpoint:i},o)),s=n,c=t,JSON&&((u=C.fetch)&&!cfg.useXhr?u(c,{method:D,body:JSON.stringify(s),mode:"cors"}):XMLHttpRequest&&((l=new XMLHttpRequest).open(D,c),l.setRequestHeader("Content-type","application/json"),l.send(JSON.stringify(s)))))))},a=function(e,t){m||setTimeout(function(){!t&&h.core||i()},500),f=!1},p=function(e){var n=O.createElement(q),e=(n.src=e,t&&(n.integrity=t),n.setAttribute("data-ai-name",E),cfg[w]);return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||a(0,t)},cfg.ld&&cfg.ld<0?O.getElementsByTagName("head")[0].appendChild(n):setTimeout(function(){O.getElementsByTagName(q)[0].parentNode.appendChild(n)},cfg.ld||0),n};p(d)}cfg.sri&&(n=o.match(/^((http[s]?:\/\/.*\/)\w+(\.\d+){1,5})\.(([\w]+\.){0,2}js)$/))&&6===n.length?(d="".concat(n[1],".integrity.json"),i="@".concat(n[4]),l=window.fetch,t=function(e){if(!e.ext||!e.ext[i]||!e.ext[i].file)throw Error("Error Loading JSON response");var t=e.ext[i].integrity||null;s(o=n[2]+e.ext[i].file,t)},l&&!cfg.useXhr?l(d,{method:"GET",mode:"cors"}).then(function(e){return e.json()["catch"](function(){return{}})}).then(t)["catch"](r):XMLHttpRequest&&((a=new XMLHttpRequest).open("GET",d),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)if(200===a.status)try{t(JSON.parse(a.responseText))}catch(e){r()}else r()},a.send())):o&&r();try{h.cookie=O.cookie}catch(k){}function e(e){for(;e.length;)!function(t){h[t]=function(){var e=arguments;f||h.queue.push(function(){h[t].apply(h,e)})}}(e.pop())}var c,u,l="track",d="TrackPage",p="TrackEvent",l=(e([l+"Event",l+"PageView",l+"Exception",l+"Trace",l+"DependencyData",l+"Metric",l+"PageViewPerformance","start"+d,"stop"+d,"start"+p,"stop"+p,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),h.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(g.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==g[L]&&!0!==l[L]&&(e(["_"+(c="onerror")]),u=C[c],C[c]=function(e,t,n,i,a){var o=u&&u(e,t,n,i,a);return!0!==o&&h["_"+c]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},g.autoExceptionInstrumented=!0),h}(cfg.cfg),(C[E]=n).queue&&0===n.queue.length?(n.queue.push(e),n.trackPageView({})):e();})({
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
onInit: function (sdk) {
    sdk.addTelemetryInitializer(function (envelope) {
    envelope.data = envelope.data || {};
    envelope.data.someField = 'This item passed through my telemetry initializer';
    });
}, // Once the application insights instance has loaded and initialized this method will be called
// sri: false, // Custom optional value to specify whether fetching the snippet from integrity file and do integrity check
cfg: { // Application Insights Configuration
    connectionString: "YOUR_CONNECTION_STRING"
}});
</script>

如需遙測專案上可用的非自訂屬性摘要,請參閱 Application Insights 匯出資料模型

您可以根據需要新增任意數量的初始化設定式。 系統會依其新增順序來進行呼叫。

新增雲端角色名稱和雲端角色執行個體

使用遙測初始化運算式來設定 ai.cloud.roleai.cloud.roleInstance 標籤。 這些標籤會定義您的元件在 Azure 監視器的應用程式地圖中的顯示方式。

appInsights.queue.push(() => {
appInsights.addTelemetryInitializer((envelope) => {
  envelope.tags["ai.cloud.role"] = "your role name";
  envelope.tags["ai.cloud.roleInstance"] = "your role instance";
});
});

從 2.6.0 版開始,Azure Application Insights JavaScript SDK 提供執行個體型 Cookie 管理,可在初始化之後停用和重新啟用。

如果您在使用 disableCookiesUsagecookieCfg.enabled 組態初始化期間停用 Cookie,您可以使用 setEnabled函式重新啟用 Cookie

執行個體型 Cookie 管理會取代先前的 CoreUtils 全域函式:disableCookies()setCookie()getCookie()deleteCookie()

若要利用 2.6.0 版中引進的樹狀震動增強功能,建議您不再使用全域函式。

ICookieMgrConfig 是 2.6.0 中新增的執行個體型 Cookie 管理所用的 Cookie 設定。 提供的選項可讓您啟用或停用 SDK 使用 Cookie。 您也可以設定自訂 Cookie 網域和路徑,以及自訂用來擷取、設定和刪除 Cookie 的函式。

下表定義 ICookieMgrConfig 選項。

名稱 類型 預設 描述
已啟用 boolean SDK 目前的執行個體會使用此布林值來指出是否已啟用 Cookie 的使用。 若為 false,此設定所初始化的 SDK 執行個體將不會儲存或讀取來自 Cookie 的任何資料。
網域 字串 null 自訂 Cookie 網域。 如果您想要跨子網域來共用 Application Insights Cookie,則這十分有用。 如果未提供,則請使用根 cookieDomain 值中的值。
路徑 字串 / 指定用於 Cookie 的路徑,如果未提供,則會使用根 cookiePath 值中的任何值。
ignoreCookies 字串[] 未定義 指定要忽略的 Cookie 名稱,這會導致永遠不會讀取或寫入任何相符的 Cookie 名稱。 不過仍然可以明確清除或刪除這些名稱。 您不需要在 blockedCookies 設定中重複名稱。 (自 2.8.8 版起)
blockedCookies 字串[] 未定義 指定永不寫入的 Cookie 名稱。 這可防止建立或更新任何 Cookie 名稱,但除非也包括在 ignoreCookies 中,否則仍然可以讀取這些名稱。 不過仍然可以明確清除或刪除這些名稱。 如果未提供,則會預設為 ignoreCookies 中的相同清單。 (自 2.8.8 版起)
getCookie (name: string) => string null 可擷取具名 Cookie 值的函式,如果未提供,則會使用內部 Cookie 剖析/快取。
setCookie (name: string, value: string) => void null 函數,可使用指定的值來設定具名 Cookie,但只在新增或更新 Cookie 時才呼叫。
delCookie (name: string, value: string) => void null 函數,可刪除具有所指定值的具名 Cookie,並與 setCookie 分隔,以避免需要剖析值才能判斷要新增還是移除 Cookie。 如果未提供,則會使用內部 Cookie 剖析/快取。

來源對應

來源對應支援可協助您偵錯已縮減的 JavaScript 程式碼,並能夠解除縮製例外狀況遙測的呼叫堆疊。

  • 與 [例外狀況詳細資料] 面板上的全部目前整合相容
  • 支援全部目前和未來的 JavaScript SDK,包括 Node.JS,而不需要 SDK 升級

Application Insights 支援將來源對應上傳至 Azure 儲存體帳戶 Blob 容器。 您可以使用來源對應來解除縮製 [端對端交易詳細資料] 頁面上找到的呼叫堆疊。 您也可使用來源對應來解除縮製 JavaScript SDKNode.js SDK 所傳送的任何例外狀況。

顯示選取選項以藉由與儲存體帳戶連結來解除縮製呼叫堆疊的螢幕擷取畫面。

建立新儲存體帳戶和 Blob 容器

若已有現有的儲存體帳戶或 Blob 容器,您可以跳過此步驟。

  1. 建立新的記憶體帳戶

  2. 在您的記憶體帳戶內建立 Blob 容器。 將 [公用存取層級] 設定為 [私人],以確保無法公開存取您的來源對應。

    顯示將容器存取層級設定為 [私人] 的螢幕快照。

將來源對應推送至 Blob 容器

設定為自動將來源對應上傳至已設定的 Blob 容器,以便將持續部署管線與您的儲存體帳戶整合。

您可以將來源對應上傳至 Azure Blob 儲存體容器,該容器使用與原來進行編譯和部署相同的資料夾結構。 常見的使用案例是在部署資料夾前加上其版本,例如 1.2.3/static/js/main.js。 當您透過名為 sourcemaps 的 Azure Blob 容器解除縮製時,管線會嘗試擷取位於 sourcemaps/1.2.3/static/js/main.js.map 的來源對應。

如果您使用 Azure Pipelines 持續建置和部署應用程式,請將 Azure 檔案複製 工作新增至管線,以便自動上傳來源對應。

顯示將 Azure 檔案複製工作新增至管線以將來源對應上傳至 Azure Blob 儲存體的螢幕擷取畫面。

使用來源對應儲存體帳戶設定您的 Application Insights 資源

您有兩個選項可用來設定具有來源對應儲存體帳戶的 Application Insights 資源。

端對端交易詳細資料索引標籤

從 [端對端交易詳細資料] 索引標籤,選取 [解除縮製]。 如果未設定您的資源,請加以設定。

  1. 在 Azure 入口網站中,檢視已縮製例外狀況的詳細資料。
  2. 選取 [解除縮製]
  3. 如果未設定您的資源,請加以設定。
屬性索引標籤

若要設定或變更連結到 Application Insights 資源的儲存體帳戶或 Blob 容器:

  1. 移至 Application Insights 資源的 [屬性] 索引標籤。

  2. 選取 [變更來源對應 Blob 容器]

  3. 選取不同的 Blob 容器作為來源對應容器。

  4. 選擇套用

    顯示在 [屬性] 窗格上重新設定所選 Azure Blob 容器的螢幕快照。

檢視未解除縮製的呼叫堆疊

若要檢視未解除縮製的呼叫堆疊,請在 Azure 入口網站中選取例外狀況遙測項目、尋找符合呼叫堆疊的來源對應,並且將來源對應拖放到 Azure 入口網站中的呼叫堆疊。 來源對應必須與堆疊框架的來源檔案具有相同的名稱,但副檔名為 map

如果您遇到涉及 JavaScript 應用程式來源對應支持的問題,請參閱 針對 JavaScript 應用程式的來源對應支援進行疑難解答

示範解除縮製功能的動畫。

樹狀震動

樹狀震動會排除最終 JavaScript 套件組合中未使用的程式碼。

若要利用樹狀震動,請只將 SDK 的必要元件匯入您的程式碼。 如此一來,未使用的程式碼就不會包括在最終套件組合中,因此會減少其大小並改善效能。

樹狀震動增強功能和建議

在 2.6.0 版中,我們已淘汰並移除這些靜態協助程式類別的內部使用方式,以改善樹狀震動演算法的支援。 因此 npm 套件能夠安全地卸除未使用的程式碼。

  • CoreUtils
  • EventHelper
  • Util
  • UrlHelper
  • DateTimeUtils
  • ConnectionStringParser

函式現在會從模組匯出為最上層根目錄,以便您更輕鬆地重構程式碼,以進行更好的樹狀震動。

靜態類別已變更為參考新匯出函式的 const 物件,並計劃未來變更以進一步重構參考。

樹狀震動已淘汰的函式和取代項目

本節內容僅適用於您使用已淘汰的函式,且您想要將套件大小最佳化的情況。 我們建議使用取代函式來縮減大小,並支援 Internet Explorer 的所有版本。

Existing 取代
CoreUtils @microsoft/applicationinsights-core-js
CoreUtils._canUseCookies 無。 請勿使用,因為其會導致系統將全部的 CoreUtils 參考包括在您的最終程式碼中。
請重構您的 Cookie 處理,以使用 appInsights.getCookieMgr().setEnabled(true/false) 來設定值,並使用 appInsights.getCookieMgr().isEnabled() 來檢查值。
CoreUtils.isTypeof isTypeof
CoreUtils.isUndefined isUndefined(未定義)
CoreUtils.isNullOrUndefined isNullOrUndefined
CoreUtils.hasOwnProperty hasOwnProperty
CoreUtils.isFunction isFunction
CoreUtils.isObject isObject
CoreUtils.isDate isDate
CoreUtils.isArray isArray
CoreUtils.isError isError
CoreUtils.isString isString
CoreUtils.isNumber isNumber
CoreUtils.isBoolean isBoolean
CoreUtils.toISOString toISOString or getISOString
CoreUtils.arrForEach arrForEach
CoreUtils.arrIndexOf arrIndexOf
CoreUtils.arrMap arrMap
CoreUtils.arrReduce arrReduce
CoreUtils.strTrim strTrim
CoreUtils.objCreate objCreateFn
CoreUtils.objKeys objKeys
CoreUtils.objDefineAccessors objDefineAccessors
CoreUtils.addEventHandler addEventHandler
CoreUtils.dateNow dateNow
CoreUtils.isIE isIE
CoreUtils.disableCookies disableCookies
參考任一項都會導致系統參考 CoreUtils 以取得回溯相容性。
請重構您的 Cookie 處理以使用 appInsights.getCookieMgr().setEnabled(false)
CoreUtils.newGuid newGuid
CoreUtils.perfNow perfNow
CoreUtils.newId newId
CoreUtils.randomValue 隨機值
CoreUtils.random32 random32
CoreUtils.mwcRandomSeed mwcRandomSeed
CoreUtils.mwcRandom32 mwcRandom32
CoreUtils.generateW3CId 生成W3C識別碼
EventHelper @microsoft/applicationinsights-core-js
EventHelper.Attach attachEvent
EventHelper.AttachEvent attachEvent
EventHelper.Detach detachEvent
EventHelper.DetachEvent detachEvent
Util @microsoft/applicationinsights-common-js
Util.NotSpecified strNotSpecified (未指定)
Util.createDomEvent createDomEvent
Util.停用存儲 utlDisableStorage
Util.isInternalApplicationInsightsEndpoint isInternalApplicationInsightsEndpoint
Util.canUseLocalStorage utl可以使用本地儲存
Util.getStorage utlGetLocalStorage
Util.setStorage utlSetLocalStorage
Util.removeStorage utl刪除儲存空間
Util.canUseSessionStorage utlCanUseSessionStorage
Util.getSessionStorageKeys utlGetSessionStorageKeys (取得會話存儲鍵)
Util.getSessionStorage utlGetSessionStorage
Util.setSessionStorage utlSetSessionStorage
Util.removeSessionStorage utlRemoveSessionStorage
Util.disableCookies disableCookies
參考任一項都會導致系統參考 CoreUtils 以取得回溯相容性。
請重構您的 Cookie 處理以使用 appInsights.getCookieMgr().setEnabled(false)
Util.canUseCookies canUseCookies
參考任一項都會導致系統參考 CoreUtils 以取得回溯相容性。
請重構您的 Cookie 處理以使用 appInsights.getCookieMgr().isEnabled()
Util.disallowsSameSiteNone uaDisallowsSameSiteNone
Util.setCookie coreSetCookie
參考此項會導致系統參考 CoreUtils 以取得回溯相容性。
請重構您的 Cookie 處理以使用 appInsights.getCookieMgr().set(name: string, value: string)
Util.stringToBoolOrDefault stringToBoolOrDefault
Util.getCookie coreGetCookie
參考此項會導致系統參考 CoreUtils 以取得回溯相容性。
請重構您的 Cookie 處理以使用 appInsights.getCookieMgr().get(name: string)
Util.刪除Cookie coreDeleteCookie
參考此項會導致系統參考 CoreUtils 以取得回溯相容性。
請重構您的 Cookie 處理以使用 appInsights.getCookieMgr().del(name: string, path?: string)
Util.trim strTrim
Util.newId newId
Util.random32 ---
沒有取代項目,請重構您的程式碼以使用核心 random32(true)
Util.generateW3CId 生成W3C識別碼
Util.isArray isArray
Util.isError isError
Util.isDate isDate
Util.toISOStringForIE8 toISOString
Util.getIEVersion getIEVersion
Util.msToTimeSpan msToTimeSpan
Util.isCrossOriginError isCrossOriginError
Util.dump dumpObj
Util.getExceptionName 取得例外名稱
Util.addEventHandler attachEvent
Util.IsBeaconApiSupported isBeaconApiSupported
Util.getExtension getExtensionByName
UrlHelper @microsoft/applicationinsights-common-js
UrlHelper.parseUrl urlParseUrl
UrlHelper.getAbsoluteUrl urlGetAbsoluteUrl
UrlHelper.getPathName urlGetPathName
UrlHelper.getCompeteUrl urlGetCompleteUrl
UrlHelper.parseHost urlParseHost
UrlHelper.parseFullHost urlParseFullHost
DateTimeUtils @microsoft/applicationinsights-common-js
DateTimeUtils.Now dateTimeUtilsNow
DateTimeUtils.GetDuration dateTimeUtilsDuration
ConnectionStringParser @microsoft/applicationinsights-common-js
ConnectionStringParser.parse parseConnectionString

服務通知

服務通知是 SDK 內建的功能,可提供可採取動作的建議,以協助確保您的遙測不會中斷地流向 Application Insights。 您可以在 Application Insights 中看到通知為例外狀況訊息。 我們會根據您的 SDK 設定來確保通知與您相關,並根據建議的緊迫性來調整詳細程度。 建議您將服務通知保持開啟,但您可以透過 featureOptIn 設定退出。

目前不會傳送任何作用中的通知。

服務通知是由 JavaScript SDK 管理,其會定期輪詢公用 JSON 檔案來控制和更新這些通知。 若要停用 JavaScript SDK 進行的輪詢,請停用 featureOptIn 模式

疑難排解

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

後續步驟