通過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檔案夾中,請不要改變檔案夾結構。
背景資訊
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應用自動埋點
-
修改 SkyWalking Java Agent 設定檔,設定接入資訊和應用資訊。
collector.backend_service=<endpoint> // 替換為其他條件擷取的存取點資訊。 agent.authentication=<token> // 替換為前提條件擷取的鑒權Token。 agent.service_name=<Service Name> // 替換為您實際的應用程式名稱。 -
根據應用的運行環境,選擇相應的方法來指定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_OPTSWindows 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.jarJetty
在
{JETTY_HOME}/start.ini設定檔中添加以下內容:--exec -javaagent:<skywalking-agent-path> -
重新啟動應用。
Java Agent可配置屬性
SkyWalking Java Agent支援豐富的使用者可配置屬性。完整的屬性配置詳情,請參見樣本Demo的config/agent.config檔案。
屬性列表(部分)
以下屬性以apache-skywalking-java-agent-8.16.0為準。
配置方式
系統屬性
使用-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檔案夾下。
optional-plugins/
apm-customize-enhance-plugin-8.16.0.jar
apm-ehcache-2.x-plugin-8.16.0.jar
apm-fastjson-1.x-plugin-8.16.0.jar
apm-gson-2.x-plugin-8.16.0.jar
apm-guava-cache-plugin-8.16.0.jar
apm-jackson-2.x-plugin-8.16.0.jar
apm-kotlin-coroutine-plugin-8.16.0.jar
apm-mybatis-3.x-plugin-8.16.0.jar
apm-quartz-scheduler-2.x-plugin-8.16.0.jar
apm-resttemplate-6.x-plugin-8.16.0.jar
apm-sentinel-1.x-plugin-8.16.0.jar
apm-shenyu-2.4.x-plugin-8.16.0.jar
apm-spring-annotation-plugin-8.16.0.jar
apm-spring-cloud-gateway-2.0.x-plugin-8.16.0.jar
apm-spring-cloud-gateway-2.1.x-plugin-8.16.0.jar
apm-spring-cloud-gateway-3.x-plugin-8.16.0.jar
apm-spring-tx-plugin-8.16.0.jar
apm-spring-webflux-5.x-plugin-8.16.0.jar
apm-springmvc-annotation-6.x-plugin-8.16.0.jar
apm-trace-ignore-plugin-8.16.0.jar
apm-zookeeper-3.4.x-plugin-8.16.0.jar
trace-sampler-cpu-policy-plugin-8.16.0.jar
Bootstrap類外掛程式
由於意外風險,所有Bootstrap外掛程式都是可選的。Bootstrap外掛程式在bootstrap-plugins檔案夾中。若需要使用這些外掛程式,可以將目標外掛程式的jar檔案放入/plugins檔案夾下。
bootstrap-plugins/
apm-jdk-forkjoinpool-plugin-8.16.0.jar
apm-jdk-http-plugin-8.16.0.jar
apm-jdk-threading-plugin-8.16.0.jar
apm-jdk-threadpool-plugin-8.16.0.jar
支援外掛程式列表
關於下面的外掛程式,官方認為可能存在效能影響或者使用限制,所以只在第三方倉庫發布。更多資訊請參見SkyAPM Java外掛程式擴充倉庫。
外掛程式開發
您可以參考官方文檔自訂開發一個SkyWalking Java Agent Plugin。
Managed Service for OpenTelemetry支援Trace上報,您可以參考官方文檔開發一個自訂的Trace Plugin。
常見問題
問:SkyWalking正常串連服務端後,無法建立應用?
答:可能是由於鏈路追蹤的資料未上報。您需要檢查是否有鏈路追蹤的資料上報,可以查看{skywalking agent path}/logs/skywalking-api.log內容。如果有資料上報,則顯示如下所示。SkyWalking Agent 的 DEBUG 日誌輸出,其中關鍵資訊為 TraceSegmentServiceClient : 1 trace segments have been sent to collector.,表明鏈路追蹤資料已成功上報到 collector。
DEBUG 2020-03-09 17:18:16:356 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
DEBUG 2020-03-09 17:18:19:357 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
DEBUG 2020-03-09 17:18:21:301 DataCarrier.DEFAULT.Consumer.0.Thread TraceSegmentServiceClient : 1 trace segments have been sent to collector.
DEBUG 2020-03-09 17:18:22:353 SkywalkingAgent-2-GRPCChannelManager-0 GRPCChannelManager : Selected collector grpc service running, reconnect:false.
DEBUG 2020-03-09 17:18:22:357 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
DEBUG 2020-03-09 17:18:25:356 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
如果未產生資料上報,則可能原因是:開啟採樣、設定過濾或未觸發產生鏈路追蹤的請求。

