全部產品
Search
文件中心

Application Real-Time Monitoring Service:通過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. 登入ARMS控制台,在左側導覽列單擊接入中心

  2. 服務端應用地區單擊SkyWalking卡片。

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

    說明

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

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

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

    image.png

背景資訊

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

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