借助ARMS提供的SDK,您可以在業務代碼中動態獲取TraceId及相關調用鏈屬性。
ARMS已支持通過OpenTelemetry Java SDK埋點監控您的應用,建議您優先選擇使用OpenTelemetry Java SDK進行埋點。更多信息,請參見通過OpenTelemetry Java SDK為調用鏈增加自定義埋點。
前提條件
已在ARMS控制臺上創建應用監控,并已在Java程序中掛載和啟動應用監控的探針。具體操作,請參見手動安裝探針。
程序中已引入arms-sdk-1.7.3.jar依賴。
<dependency> <groupId>com.alibaba.arms.apm</groupId> <artifactId>arms-sdk</artifactId> <version>1.7.3</version> </dependency>
說明如果無法獲取pom.xml中的依賴,請直接下載arms-sdk-1.7.3.jar。
獲取TraceId與RpcId
您可通過以下代碼獲取TraceId與RpcId。
Span span = Tracer.builder().getSpan(); //此處未創建新的Span。
String traceId = span.getTraceId();
String rpcId = span.getRpcId();
透傳業務自定義標簽baggage
若您要透傳業務自定義標簽,則需要在代碼中寫入添加和獲取自定義標簽,具體操作步驟如下:
在業務代碼中添加自定義標簽baggage。
Map<String, String> baggage = new HashMap<String, String>(); baggage.put("key-01", "value-01"); baggage.put("key-02", "value-02"); baggage.put("key-03", "value-03"); Span span = Tracer.builder().getSpan(); span.withBaggage(baggage);
在業務代碼中獲取自定義標簽baggage。
Span span = Tracer.builder().getSpan(); Map<String, String> baggage = span.baggageItems();
在4.x及更高版本的探針中,Baggage僅具備透傳能力,內容不會自動加入到每個Span的Tags中。如有需要,請手動為Span設置自定義標簽tag。
為Span設置自定義標簽tag
為Span設置自定義標簽只會在當前Span中有效,并不會透傳。您需要在代碼中寫入添加和獲取自定義的標簽,具體操作步驟如下:
在業務代碼中為Span添加自定義標簽tag,可以添加多個標簽。
Span span = Tracer.builder().getSpan(); // Add a tag to the Span. span.setTag("tag-key1", "tag-value1"); span.setTag("tag-key2", "tag-value2");
在業務代碼中獲取Span自定義標簽tag。
Span span = Tracer.builder().getSpan(); // Inspect the Span's tags. Map<String, String> tags = span.tags();
根據自定義標簽baggage和tag查詢調用鏈
通過Span設置的自定義標簽baggage和tag可以用來按標簽維度查詢調用鏈。
baggage上的標簽具有透傳到下游效果,一般用于業務染色,標簽項不建議設置過多。
tag上的標簽只在本Span作用域內有效,可以設置多個業務項。
登錄ARMS控制臺,在左側導航欄選擇 。
在調用鏈路查詢頁面頂部選擇目標地域,然后選擇參數類型,在參數值中填入自定義標簽,單擊添加到查詢條件。
在調用鏈列表中單擊目標鏈路的TraceID。
在調用鏈路詳情頁面,鼠標移動至服務名稱,會顯示當前Span對應的Tags信息。
對于4.x及更高版本的探針,如果希望將Baggage的內容寫入到您的Span上,可以參考上文透傳業務自定義標簽baggage中的方式獲取到所有的baggage,并通過為Span設置自定義標簽tag寫入到Span中。