全部產品
Search
文件中心

Managed Service for OpenTelemetry:通過SkyWalking上報Java應用資料

更新時間:Aug 07, 2024

通過SkyWalking為應用埋點並上報鏈路資料至Managed Service for OpenTelemetry後,Managed Service for OpenTelemetry即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控資料。本文介紹如何使用SkyWalking Java Agent進行自動埋點,以及SkyWalking Java Agent可配置屬性的相關資訊。

前提條件

  • 開啟SkyWalking下載頁面,下載SkyWalking 6.X.X或以上版本(建議下載最新穩定版本),並將解壓後的Agent檔案夾放至Java進程有存取權限的目錄。

  • 外掛程式均放置在/plugins目錄中。在啟動階段將新的外掛程式放進該目錄,即可令外掛程式生效。將外掛程式從該目錄刪除,即可令其失效。另外,記錄檔預設輸出到/logs目錄中。

警告

日誌、外掛程式和設定檔都在Agent檔案夾中,請不要改變檔案夾結構。

擷取存取點資訊

新版控制台

  1. 登入可觀測鏈路 OpenTelemetry 版控制台,在左側導覽列單擊接入中心

  2. 開源架構地區單擊SkyWalking卡片。

  3. 在彈出的SkyWalking面板中選擇資料需要上報的地區。

    說明

    初次接入的地區將會自動進行資源初始化。

  4. 選擇串連方式,然後複製存取點資訊。

    若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網方式,否則選擇公網方式。

    image.png

舊版控制台

  1. 登入可觀測鏈路 OpenTelemetry 版控制台

  2. 在左側導覽列單擊叢集配置,然後在右側頁面單擊存取點資訊頁簽。

  3. 在頁面頂部選擇需要接入的地區,然後在叢集資訊地區開啟顯示Token開關。

  4. 用戶端採集工具地區單擊SkyWalking

    相關資訊列中,擷取存取點資訊。

    SkyWalking存取點資訊

    說明

    如果應用部署於阿里雲生產環境,則選擇阿里雲VPC網路存取點,否則選擇公網存取點。

背景資訊

SkyWalking是一款廣受歡迎的國產APM(Application Performance Monitoring,應用效能監控)產品,主要針對微服務、Cloud Native和容器化(Docker、Kubernetes、Mesos)架構的應用。SkyWalking的核心是一個分布式追蹤系統。

要通過SkyWalking將Java應用資料上報至Managed Service for OpenTelemetry控制台,首先需要完成埋點工作。SkyWalking既支援自動探針(Dubbo、gRPC、JDBC、OkHttp、Spring、Tomcat、Struts、Jedis等),也支援手動埋點(OpenTracing)。本文介紹自動埋點方法。

樣本Demo

範例程式碼倉庫地址:SkyWalking Demo

用SkyWalking為Java應用自動埋點

  1. 開啟config/agent.config,配置存取點和令牌。

    說明

    請將<endpoint><auth-token>分別替換成控制台叢集配置 > 存取點資訊頁面上SkyWalking用戶端在相應地區的存取點和鑒權令牌。關於擷取方法,請參見前提條件。

    collector.backend_service=<endpoint>
    agent.authentication=<auth-token>
  2. 採用以下方法之一配置應用程式名稱(Service Name)。

    重要

    請將<ServiceName>替換為您的應用程式名稱。如果同時採用以下兩種方法,則僅第二種方法(在啟動命令列中添加參數)生效。

    • 開啟config/agent.config,配置應用程式名稱。

      agent.service_name=<ServiceName>
    • 在應用程式的啟動命令列中添加-Dskywalking.agent.service_name參數。

      java -javaagent:<skywalking-agent-path> -Dskywalking.agent.service_name=<ServiceName> -jar yourApp.jar
  3. 根據應用的運行環境,選擇相應的方法來指定SkyWalking Agent的路徑。

    說明

    請將以下範例程式碼中的<skywalking-agent-path>替換為Agent檔案夾中的skywalking-agent.jar的絕對路徑。

    • Linux Tomcat 7 / Tomcat 8

      tomcat/bin/catalina.sh第一行添加以下內容:

      CATALINA_OPTS="$CATALINA_OPTS -javaagent:<skywalking-agent-path>"; export CATALINA_OPTS
    • Windows Tomcat 7 / Tomcat 8

      tomcat/bin/catalina.bat第一行添加以下內容:

      set "CATALINA_OPTS=-javaagent:<skywalking-agent-path>"
    • JAR File或Spring Boot

      在應用程式的啟動命令列中添加-javaagent參數。

      重要

      -javaagent參數一定要在-jar參數之前。

      java -javaagent:<skywalking-agent-path> -jar yourApp.jar
    • Jetty

      {JETTY_HOME}/start.ini設定檔中添加以下內容:

      --exec    # 去掉前面的井號取消注釋。
      -javaagent:<skywalking-agent-path>
  4. 重新啟動應用。

Java Agent可配置屬性

SkyWalking Java Agent支援豐富的使用者可配置屬性。完整的屬性配置詳情,請參見樣本Demo的config/agent.config檔案。

屬性列表(部分)

以下屬性以apache-skywalking-java-agent-8.16.0為準。

展開查看屬性列表

屬性名稱

描述

預設值

agent.namespace

命名空間,用於隔離跨進程傳播的header。如果進行了配置,header將為HeaderName:Namespace。

未設定

agent.service_name

在SkyWalking UI中展示的服務名。5.x版本對應Application,6.x版本對應Service。 建議:為每個服務設定唯一的名字,服務下的多個執行個體使用相同的服務名。

Your_ApplicationName

agent.sample_n_per_3_secs

負數或0表示不採樣,預設不採樣。SAMPLE_N_PER_3_SECS表示每3秒採樣N條。

未設定

agent.authentication

鑒權是否開啟取決於後端的配置,可查看服務端存取點的鑒權Token。對於大多數的情境,需要後端對鑒權進行擴充。目前僅實現了基本的鑒權功能。

未設定

agent.span_limit_per_segment

單個segment中span的最大數量。通過這個配置項,SkyWalking可評估應用程式記憶體使用量量。

未設定

agent.ignore_suffix

如果這個集合中包含了第一個span的操作名,這個segment將會被忽略掉。

未設定

agent.is_open_debugging_class

如果為true,SkyWalking會將所有經Instrument轉換過的類檔案儲存到/debugging檔案夾下。SkyWalking團隊會要求提供這些類檔案以解決相容性問題。

未設定

agent.cause_exception_depth

在記錄異常資訊的時候,探針需要記錄的堆棧深度。

5

agent.force_reconnection_period

gRPC的強制重連周期,基於grpc_channel_check_interval。

1

agent.operation_name_threshold

設定作業名不建議超過的最大長度(190)。

150

agent.keep_tracing

如果該值為true,即使後台不可用,也要保持跟蹤。

false

osinfo.ipv4_list_size

限制IPv4列表的長度。

10

collector.grpc_channel_check_interval

檢查gRPC的Channel狀態的時間間隔。

30

collector.backend_service

接收SkyWalking Trace資料的後端地址。

127.0.0.1:11800

collector.heartbeat_period

探針心跳報告時間。單位:秒。

30

collector.grpc_upstream_timeout

gRPC用戶端向上遊發送資料時逾時多長時間。單位:秒。

30

collector.get_profile_task_interval

嗅探器擷取設定檔工作清單間隔。

20

logging.level

記錄層級。預設為debug。

DEBUG

logging.file_name

記錄檔名。

skywalking-api.log

logging.output

日誌輸出方式,預設是檔案,使用控制台預設為標準輸出(命令列直接輸出)。

FILE

logging.dir

日誌目錄。預設為空白串,表示使用"system.out"輸出日誌。

""

logging.pattern

日誌格式。所有的轉換說明符:

  • %level:日誌等級。

  • %timestamp:現在的時間,格式: yyyy-MM-dd HH:mm:ss:SSS

  • %thread:當前線程的名稱。

  • %msg:使用者記錄的某些消。

  • %class:TargetClass的SimpleName。

  • %throwable:使用者拋出的異常。

  • %agent_name:agent.service_name。

%level %timestamp %thread %class : %msg %throwable

logging.max_file_size

記錄檔的最大大小。當記錄檔大小超過該值,歸檔當前的記錄檔,並將日誌寫入到新檔案中。

300 * 1024 * 1024

logging.max_history_files

最大歷史記錄檔數量。預設情況下,負數或0表示關閉。

-1

配置方式

系統屬性

使用-Dskywalking. + agent.config設定檔的key。例如:

# 通過系統屬性配置agent.service_name
java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=<your_service_name> -jar your-project.jar

代理選項

在JVM參數中的代理路徑之後添加屬性即可。

# 模板
-javaagent:/path/to/skywalking-agent.jar=[key1]=[value1],[key2]=[value2]

# 舉例
java -javaagent:/path/to/skywalking-agent.jar=agent.service_name=<your-service-name>,agent.authentication=<your-token> -jar your-project.jar

系統內容變數

將屬性配置成系統內容變數,skywalking-agent會自動擷取。可以在config/agent.config檔案中查詢具體屬性對應的系統內容變數,例如agent.service_name的系統內容變數為SW_AGENT_NAME。

agent.service_name=${SW_AGENT_NAME:default_name}

# 配置環境變數
export SW_AGENT_NAME=<your_service_name>

優先順序

以上配置方式的優先順序從高到低依次為代理選項、系統屬性、系統內容變數、設定檔。

Java Agent外掛程式

SkyWalking Java Agent支援多種中介軟體、架構和庫。支援的所有外掛程式可在樣本Demo的/plugins檔案夾下查看。

啟用外掛程式

所有在/plugins檔案夾下的外掛程式都是已被啟用的外掛程式。若從/plugins中移除某個外掛程式的jar包,則表示外掛程式不可用。

官方已支援外掛程式

官方支援的外掛程式都已在/plugins檔案夾下。

可選外掛程式

Java Agent的外掛程式支援可插拔。在Agent或第三方倉庫的optional-plugins檔案夾下提供了可選的外掛程式。 想要使用可選外掛程式,可以將對應外掛程式移動到/plugins檔案夾下。image.png

Bootstrap類外掛程式

由於意外風險,所有Bootstrap外掛程式都是可選的。Bootstrap外掛程式在bootstrap-plugins檔案夾中。若需要使用這些外掛程式,可以將目標外掛程式的jar檔案放入/plugins檔案夾下。image.png

支援外掛程式列表

關於下面的外掛程式,官方認為可能存在效能影響或者使用限制,所以只在第三方倉庫發布。更多資訊請參見SkyAPM Java外掛程式擴充倉庫

展開查看外掛程式列表

架構

外掛程式版本

HTTP Server

Tomcat 7

Tomcat 8

Tomcat 9

Spring Boot Web 4.x

Spring MVC 3.x, 4.x 5.x with servlet 3.x

Nutz Web Framework 1.x

Struts2 MVC 2.3.x -> 2.5.x

Resin 3

Resin 4

Jetty Server 9

Spring Webflux 5.x

Undertow 2.0.0.Final -> 2.0.13.Final

RESTEasy 3.1.0.Final -> 3.7.0.Final

Play Framework 2.6.x -> 2.8.x

Light4J Microservices Framework 1.6.x -> 2.x

Netty SocketIO 1.x

HTTP Client

Feign 9.x

Netflix Spring Cloud Feign 1.1.x, 1.2.x, 1.3.x

Okhttp 3.x

Apache httpcomponent HttpClient 4.2, 4.3

Spring RestTemplete 4.x

Jetty Client 9

Apache httpcomponent AsyncClient 4.x

HTTP Gateway

Spring Cloud Gateway 2.1.x.RELEASE

JDBC

Mysql Driver 5.x, 6.x, 8.x

Oracle Driver

H2 Driver 1.3.x -> 1.4.x

Sharding-JDBC 1.5.x

ShardingSphere 3.0.0

ShardingSphere 3.0.0, 4.0.0-RC1

PostgreSQL Driver 8.x, 9.x, 42.x

Mariadb Driver 2.x, 1.8

RPC架構

Dubbo 2.5.4 -> 2.6.0

Dubbox 2.8.4

Apache Dubbo 2.7.0

Motan 0.2.x -> 1.1.0

gRPC 1.x

Apache ServiceComb Java Chassis 0.1 -> 0.5,1.0.x

SOFARPC 5.4.0

Armeria 0.63.0 -> 0.98.0

Apache Avro 1.7.0 - 1.8.x

Finagle 6.25.0 -> 20.1.0

MQ

RocketMQ 4.x

Kafka 0.11.0.0 -> 1.0

ActiveMQ 5.x

RabbitMQ 5.x

Pulsar 2.2.x -> 2.4.x

NoSQL

Redis

Jedis 2.x

Redisson Easy Java Redis client 3.5.2+

Lettuce 5.x

MongoDB

MongoDB Java Driver 2.13-2.14,3.3+

Memcached Client

Spymemcached 2.x

Xmemcached 2.x

Elasticsearch

transport-client 5.2.x-5.6.x

transport-client 6.7.1-6.8.4

rest-high-level-client 6.7.1-6.8.4

SolrJ 7.0.0-7.7.1

SolrJ 7.x

Cassandra 3.x

cassandra-java-driver 3.7.0-3.7.2

服務發現

Netflix Eureka

分布式協調

Zookeeper 3.4.x (3.4.4除外)

Spring生態系統

Spring Bean annotations(@Bean, @Service, @Component, @Repository) 3.x and 4.x

Spring Core Async SuccessCallback/FailureCallback/ListenableFutureCallback 4.x

Hystrix: 分布式系統延時和故障容錯 1.4.20 -> 1.5.12

調度器

Elastic Job 2.x

OpenTracing社區支援

Canal: 阿里巴巴的基於MySQL binlog的增量訂閱與消費組件 1.0.25 -> 1.1.2

JSON

GSON 2.8.x

Vert.x 生態

Vert.x Eventbus 3.2+

Vert.x Web 3.x

線程調度架構

Spring @Async 4.x and 5.x

緩衝

Ehcache 2.x

Kotlin

Coroutine 1.0.1 -> 1.3.x

外掛程式開發

您可以參考官方文檔自訂開發一個SkyWalking Java Agent Plugin。

Managed Service for OpenTelemetry支援Trace上報,您可以參考官方文檔開發一個自訂的Trace Plugin。

常見問題

問:SkyWalking正常串連服務端後,無法建立應用?

答:可能是由於鏈路追蹤的資料未上報。您需要檢查是否有鏈路追蹤的資料上報,可以查看{skywalking agent path}/logs/skywalking-api.log內容。如果有資料上報,則顯示如下圖所示。pg_xtrace_skywalking

如果未產生資料上報,則可能原因是:開啟採樣、設定過濾或未觸發產生鏈路追蹤的請求。