OpenTracing

Instana 提供如何擷取追蹤資料的彈性。 不論其來源為何,每個追蹤都受到同等對待。 如果您需要對確切追蹤的內容有更大的控制和彈性,則 OpenTracing(追蹤應用程式的供應商中立 API) 是您的選項。

Instana 支援下列語言的 OpenTracing ,如 OpenTracing 規格 中所定義:

技術 詳細資料
Crystal 鏈結
Go 鏈結
Java 鏈結
Node.js 鏈結
PHP 鏈結
Python 鏈結
Ruby 鏈結

附註: 在大部分情況下, OpenTracing 和其他追蹤策略彼此獨立。 雖然您可以同時且獨立地使用每一個,但策略本身無法結合以提供個別追蹤資料。 在此情況下,例外為 Python 和 GoLang,其中 OpenTracing 會加倍為 Instana AutoTrace SDK。

範例-追蹤 Node.js 應用程式

下列範例顯示如何針對 Node.js 應用程式使用 Instana OpenTracing :

const instana = require('@instana/collector');

// Always initialize the sensor as the first module inside the application.
instana({
  tracing: {
    enabled: true
  }
});

const opentracing = require('opentracing');

// optionally use the opentracing provided singleton tracer wrapper
opentracing.initGlobalTracer(instana.opentracing.createTracer());

// retrieve the tracer instance from the opentracing tracer wrapper
const tracer = opentracing.globalTracer();

// start a new trace with an operation name
const span = tracer.startSpan('auth');

// mark operation as failed
span.setTag(opentracing.Tags.ERROR, true);

// finish the span and schedule it for transmission to instana
span.finish();

OpenTracing 最佳作法

當使用 OpenTracing 時,請參閱下列 OpenTracing 最佳作法,以充分利用 Instana 儀表板。

如需與追蹤策略無關的重要步驟,請參閱我們的自訂追蹤 最佳作法文件

用於改善處理的標籤

Instana 對所有送入的資料執行進階處理和分析,以針對您的應用程式和基礎架構提供最佳監視、學習及警示。 這包括 OpenTracing 跨距。

為了獲得此分析和處理的最大好處,將適當的 OpenTracing 標籤新增至您的文字段,可讓 Instana 對送入的文字段進行最佳分析及採取最佳行動。

例如,下列 Python OpenTracing 程式碼提供很少資訊:

import opentracing

with opentracing.tracer.start_active_span('vanilla') as pscope:
  # ...
  # do something that takes 50ms
  # ...
  pscope.span.log_kv({"foo": "bar"})  

從這個程式碼中,我們只知道它是一個名為 vanilla 的跨距,它花費了 50 毫秒。 我們不知道它的跨距類型,例如 HTTP、RPC 或傳訊跨距。 我們不知道在該期間發生了什麼,例如與基礎架構中的任何其他元件進行通訊。

相反地,如果您提供適當的環境定義 OpenTracing 標籤, Instana 可以更妥善地分析及擷取該跨距中要處理的資訊。

import opentracing
import opentracing.ext.tags as ext

with opentracing.tracer.start_active_span('webserver') as pscope:
    pscope.span.set_tag(ext.SPAN_KIND, "entry")
    pscope.span.set_tag(ext.PEER_HOSTNAME, "localhost")
    pscope.span.set_tag(ext.HTTP_URL, "/python/simple/two")
    pscope.span.set_tag(ext.HTTP_METHOD, "POST")
    pscope.span.log_kv({"foo": "bar"})

    # ...
    # work that took 50ms
    # ...

    pscope.span.set_tag(ext.HTTP_STATUS_CODE, 204)

這個註釋良好的跨距會進一步告訴 Instana 在此跨距的環境定義中所發生的情況。 從所提供的標籤中,我們知道這是對 /python/simple/two 的送入 Web 伺服器要求,而產生的 HTTP 狀態碼是 204

上述註釋良好的跨距可讓 Instana 擷取服務、監視連線 (及其性能) ,並整體在儀表板中提供更豐富的體驗。

請參閱 OpenTracing 規格 ,其中定義所有受支援 OpenTracing 標籤的授權性清單。

peer.service 是選用項目

如果您不知道遠端已檢測,請設定 peer.service 標籤。 一般而言,只要 Instana 監視遠端,就不需要它,在這種情況下,它會自動設定服務名稱。 如果在用戶端呼叫中設定 peer.service ,且伺服器已檢測且具有自訂服務名稱,則未定義結果。

其他資訊

如需相關說明、快速入門手冊及其他資訊,請參閱 OpenTracing 入口網站