前提條件
警告 日誌、外掛程式和設定檔都在Agent檔案夾中,請不要改變檔案夾結構。
擷取存取點資訊
新版控制台
登入可觀測鏈路 OpenTelemetry 版控制台,在左側導覽列單擊接入中心。
在開源架構地區單擊SkyWalking卡片。
在彈出的SkyWalking面板中選擇資料需要上報的地區。
選擇串連方式,然後複製存取點資訊。
若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網方式,否則選擇公網方式。

舊版控制台
登入可觀測鏈路 OpenTelemetry 版控制台。
在左側導覽列單擊叢集配置,然後在右側頁面單擊存取點資訊頁簽。
在頁面頂部選擇需要接入的地區,然後在叢集資訊地區開啟顯示Token開關。
在用戶端採集工具地區單擊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)。本文介紹自動埋點方法。
用SkyWalking為Java應用自動埋點
下載SkyWalking Java Agent。
修改 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_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>
重新啟動應用。
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檔案夾下。
Bootstrap類外掛程式
由於意外風險,所有Bootstrap外掛程式都是可選的。Bootstrap外掛程式在bootstrap-plugins檔案夾中。若需要使用這些外掛程式,可以將目標外掛程式的jar檔案放入/plugins檔案夾下。
支援外掛程式列表
關於下面的外掛程式,官方認為可能存在效能影響或者使用限制,所以只在第三方倉庫發布。更多資訊請參見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內容。如果有資料上報,則顯示如下圖所示。
如果未產生資料上報,則可能原因是:開啟採樣、設定過濾或未觸發產生鏈路追蹤的請求。