指導教學: 使用 Instana 追蹤 SDK 來檢測自訂排程器

排程器是定期執行工作的工具。 最常用的 Java 排程器是 quartz, Instana 支援現成可用的。

不過,如果您有不受支援的自訂內部排程器,您可以使用 Java 追蹤 SDK 來新增排程器的追蹤。

本指導教學顯示如何執行此動作。

程式碼範例

custom-scheduler-example 指導教學的程式碼範例位於 github.com。 它會實作簡式排程器,每 4 秒在 http://localhost:8080/ 上呼叫一次 Hello World 服務,並將回應列印至主控台。

未受 Instana 監視的來源

如果您執行範例,則會看到 HTTP 呼叫來自 未受監視的來源

未受監視的來源

為何未監視來源?

程式碼範例使用 Apache HTTP 用戶端 進行送出呼叫。 Instana 代理程式支援 Apache HTTP 用戶端。 為何我們在 Instana 中看不到要求的來源?

原因是 Instana 只有在現有追蹤環境定義中發生送出呼叫時,才會指示這些呼叫。 在此範例中,送出呼叫由未檢測的自訂排程器觸發。 因此,未檢測呼叫,因為找不到現有的追蹤環境定義。

啟用「自訂排程器」的追蹤

為了啟用自訂排程器的追蹤,您必須先新增 Java 追蹤 SDK 作為相依關係。 對於 Maven ,它看起來如下:

<dependency>
  <groupId>com.instana</groupId>
  <artifactId>instana-java-sdk</artifactId>
  <version>1.2.0</version>
</dependency>

若要在每次呼叫 HttpClientJob 時建立新的追蹤環境定義,請將 @Span 註釋新增至工作的 run() 方法:

@Span(type = Span.Type.ENTRY, value = "my-custom-scheduler")
public void run() {
  // ...
}

每當呼叫 run() 方法時,此註釋會告知 Java 代理程式產生 ENTRY 文字段。

第三,將下列新增至 Instana 代理程式 configuration.yaml 檔案,以告知它應該掃描套件 com.instana.sample.* 中的 Java 類別是否有 @Span 註釋:

com.instana.plugin.javatrace:
  instrumentation:
    sdk:
      packages:
        - 'com.instana.sample'

現在,每一個 HelloWorldJob.run() 呼叫都會建立一個追蹤環境定義,送出的 HTTP 要求會在這個追蹤環境定義內執行。 您在 Instana 中看到如下:

完整追蹤

現在會追蹤 HTTP GET 要求的來源,包括從 Apache HTTP 用戶端自動檢測收集的所有 meta 資料:

送出的呼叫

排程器工作本身會視覺化為具有未受監視來源的空呼叫:

送出的呼叫

新增標籤

如上所示,排程器工作視覺化為不含任何註釋的空呼叫。 您可以呼叫 SDK 的 SpanSupport.annotate() 方法來新增自訂 meta 資料。 只要在 HttpClientJob.run() 方法開頭呼叫 SpanSupport.annotate() :

Override
@Span(type = Span.Type.ENTRY, value = SPAN_NAME)
public void run() {
  SpanSupport.annotate(Span.Type.ENTRY, SPAN_NAME, "tags.batch.job", "hello world job");
  // ...

在為工作的 ENTRY 跨距設定 tags.batch.job (如 OpenTracing的語意慣例中所指定) 時, Instana 現在會將跨距視為類型 BATCH ,並知道沒有遺漏來源。

含註釋的跨距

您也可以在「無界限分析」視圖中搜尋自訂標籤:

搜尋自訂標籤

將跨距標示為錯誤

在某個時間點,您可能想要將批次工作標示為錯誤。 新增 error 標籤 (如 OpenTracing的語意慣例中所指定) 即可輕鬆完成此作業。

SpanSupport.annotate(Span.Type.ENTRY, SPAN_NAME, "tags.error", "true");

新增此項會使您的呼叫在 Instana 中視覺化為錯誤。

錯誤跨距

摘要及 Outlook

在本指導教學中,我們為自訂排程器建立了新的追蹤環境定義,因此能夠將批次工作辨識為 Instana 中送出 HTTP 呼叫的來源。

如需 SDK 的完整參照,請檢視 SDK 的 JavaDoc。 例如, @SpanParam@SpanReturn 註釋可讓您很容易擷取參數或回覆值作為遠距的其他資訊,這可能比在某些實務範例中明確呼叫 SpanSupport.annotate() 更方便。