後端相關性

Instana 使用後端相關性來建立使用者活動之間的鏈結,例如網站造訪及後端或伺服器端上建立的工作。 使用後端相關性,您可以看到下列詳細資料:

  • 網站活動所執行的後端工作。
  • 在追蹤視圖中導致後端工作的活動。
  • 在追蹤視圖中追蹤未擷取的後端工作中使用的輔助參數。

透過向 Web 瀏覽器公開 後端追蹤 ID 來建立鏈結。 JavaScript 代理程式會取得後端追蹤 ID ,並將它們包含在傳輸至 Instana 伺服器的 信標 中。

三種類型的信標及三種類型的事件支援後端相關性:

  1. 頁面載入。
  2. 資源或資產擷取。
  3. 透過 XMLHttpRequestfetch API 的 HTTP 要求。

後端相關性會自動發生。 不過,有時由於下列原因而無法自動建立後端相關性:

自動後端相關性處理程序可以配置成在大部分情況下和瀏覽器中運作,請參閱下列各節來配置它。 由於後端相關性 (每種引標類型的運作方式不同) ,本文件中的資訊是結構化的,因此會根據引標類型來說明方法。

重要注意事項

您不需要遵循本文件中的步驟來使用 Instana 的網站監視。 這些步驟說明如何改善或啟用後端相關性,例如針對較舊的 Web 瀏覽器支援後端相關性,或跨原點支援後端相關性。 大部分後端相關性都是自動的。 請參閱下列步驟,以延伸後端相關性涵蓋面。 這些步驟是選用的。 當您識別遺漏後端相關性時,可以依序追蹤它們。

確定已追蹤後端

當追蹤後端活動時, Instana 可以在後端與網站活動之間建立鏈結。 作為相關性的必要條件,您需要啟用後端資料 (也稱為追蹤) 的收集。 若要啟用後端資料,請參閱 安裝 Instana 代理程式 文件,並視使用的語言 啟用追蹤而定。

順利完成時,追蹤處理程序會回應 Server-Timing HTTP 回應標頭。 您可以透過 Web 瀏覽器的開發工具來檢查處理程序執行的動作。 下列擷取畫面顯示 Google Chrome 開發工具的外觀。

說到這裡,表示 Instana 的自動機制可以開始運作。 如果您之前沒有追蹤程序,請檢查 Instana 的經驗。 它可協助您判斷是否要繼續解除鎖定完整且可靠的後端相關性,特別是在較舊的 Web 瀏覽器中。

含有 Server-Timing 回應標頭的 HTTP 回應

瞭解起源的概念

如果您想要繼續進一步瞭解後端相關性處理程序,則必須充分瞭解原點的概念。 Instana 常見問題 (FAQ) 文章 說明您需要瞭解的來源,以瞭解下列步驟:

改善 HTTP 要求的相關性 (XMLHttpRequest/fetch)

具有後端相關性的 HTTP 要求

XMLHttpRequestfetch API 用法的相關性對於所有同源呼叫都能可靠地運作。 由於 同原點原則跨原點,無法自動 HTTP 呼叫後端相關性。

若要在涉及多個原點時解除鎖定後端相關性,請使用 跨原點資源共用 (CORS) 。 CORS 是在同原點原則安全機制內用來開啟小受控制孔的機制。 若要解決相同來源原則強制的限制,請參閱下列說明所需內容的擷取畫面。

說明具有跨原點功能 XMLHttpRequest 或提取後端相關性的圖片。

改善頁面載入的相關性

具有後端相關性的頁面載入

對於 支援 Server-Timing的 Web 瀏覽器,後端追蹤和網站頁面載入 (亦即,擷取起始 HTML 檔案) 會自動與後端產生關聯。 透過手動將起始頁面載入的追蹤 ID 公開至 JavaScript 代理程式,可以對所有 Web 瀏覽器啟用後端相關性。 若要啟用後端相關性,您需要執行下列步驟:

  1. 擷取後端的追蹤 ID
  2. 將追蹤 ID 呈現至 Instana 的 JavaScript Snippet

在後端擷取追蹤 ID

下列子區段說明如何擷取 Instana 支援之各種語言的追蹤 ID。 只有在追蹤後端處理程序時,以及當追蹤存在或由 HTTP 要求建立時,這些方法才會運作。

以 Java 擷取追蹤 ID

在 Java 中,後端追蹤 ID 可作為送入 HTTP 要求的要求屬性。 當後端追蹤存在或已建立時,代理程式會自動新增 X-INSTANA-T 屬性。 若要在 JavaScript 組件內擷取此值,請使用下列指令:

// via plain Java Servlet request object (standard API)
// http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html
servletRequest.getAttribute("X-INSTANA-T")

在 PHP 中擷取後端追蹤 ID

在 PHP 中,當您處理送入的 HTTP 要求時,後端追蹤 ID 會以 $_SERVER 陣列的值來提供。 當後端追蹤已建立或存在時,代理程式會自動將 X-INSTANA-T 值新增至該陣列。 若要擷取此值,請使用下列指令:

// via the  $_SERVER superglobal array (standard API)
// http://php.net/manual/en/reserved.variables.server.php
$_SERVER["X-INSTANA-T"]

在 Node.js 中擷取後端追蹤 ID

在安裝 Node.js 及 Node.js 收集器時,後端追蹤 ID 可作為送入 HTTP 要求上的要求標頭。 當後端追蹤存在或已建立時, Node.js 收集器會自動新增 X-INSTANA-T 標頭。 若要擷取此值,請使用下列指令:

// via plain Node.js HTTP request objects (standard API)
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
req.headers['x-instana-t']

// via express.js request objects
// https://expressjs.com/en/4x/api.html#req.get
req.get('x-instana-t')

在 .NET 中擷取後端追蹤 ID

若為 .NET Web 應用程式,擷取後端追蹤 ID 會遵循與其他語言相同的型樣。 視您使用的架構而定,您需要使用不同的表示式來擷取後端追蹤 ID。 追蹤程式會在要求或回應時將追蹤 ID 新增至應用程式的環境定義,然後您可以如下所示進行擷取:

// For ASP.NET WebForms
HttpContext.Current.Items["X-INSTANA-T"]

// For ASP.NET MVC Applications
Context.ApplicationInstance.Context.Items["X-INSTANA-T"]

在 Ruby 中擷取追蹤 ID

Ruby 語言代理程式在 ::Instana.tracer.context中保留現行追蹤環境定義。

附註: 如果沒有進行中的現行追蹤,則值可以是 nil

::Instana.tracer.context &&  
  ::Instana::Util.id_to_header(::Instana.tracer.context.trace_id)

在 Python

對於 Python 應用程式,現行追蹤 ID 的位置取決於您是使用同步還是非同步架構。

# Synchronous (Django, Flask etc..)
from instana.singletons import tracer

from instana.singletons import async_tracer as tracer

tracer.active_span and tracer.active_span.context.trace_id

在 Go 中擷取追蹤 ID

若為 Go 應用程式,可在現行跨距上使用追蹤 ID:

import instana "github.com/instana/go-sensor"

span := opentracing.StartSpan("MySpanName)
spanContext := span.Context().(instana.SpanContext)
traceId := instana.FormatID(spanContext.TraceID)

將追蹤 ID 新增至 Instana 的 JavaScript Snippet

在伺服器端擷取追蹤 ID 之後,您需要使用 ineum('traceId', {{TRACE_ID}}); API 的一個呼叫來延伸 Instana 的 JavaScript Snippet。 這需要在伺服器端發生,且通常是使用範本引擎 (例如 Java JSP 及 Node.js Express 視圖引擎) 來完成。 下列範例顯示如何使用 Mustache 範本引擎來呼叫 API ,以延伸 Instana 的 JavaScript Snippet。 其他範本引擎可以有不同的語法。

<script>
  (function(i,s,o,g,r,a,m){i['InstanaEumObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://eum.instana.io/eum.min.js','ineum');

  // API calls as generated by the Instana user interface

  ineum('traceId', '{{TRACE_ID}}');
</script>

改善資源或資產擷取的相關性

具有後端相關性的資源或資產擷取

資源或資產 (例如影像、 JavaScript及 CSS 檔案) 的後端相關性會自動用於:

若要在涉及多個原點時解除鎖定後端相關性,請使用 Timing-Allow-Origin 回應標頭。 此標頭指示 timing allow check 向 JavaScript 及 Instana JavaScript 代理程式公開資料。

若要解除鎖定從與 HTML 文件原點不同的原點擷取之資源的後端相關性功能,請參閱下列擷取畫面:

說明具有跨原點功能的資源或資產擷取後端相關性的圖片。