前提条件
警告 日志、插件和配置文件都在Agent文件夹中,请不要改变文件夹结构。
获取接入点信息
新版控制台
登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心。
在开源框架区域单击SkyWalking卡片。
在弹出的SkyWalking面板中选择数据需要上报的地域。
选择连接方式,然后复制接入点信息。
若您的服务部署在阿里云上,且所属地域与选择的接入地域一致,推荐使用阿里云内网方式,否则选择公网方式。

旧版控制台
登录可观测链路 OpenTelemetry 版控制台。
在左侧导航栏单击集群配置,然后在右侧页面单击接入点信息页签。
在页面顶部选择需要接入的地域,然后在集群信息区域打开显示Token开关。
在客户端采集工具区域单击SkyWalking。
在相关信息列中,获取接入点信息。

说明 如果应用部署于阿里云生产环境,则选择阿里云VPC网络接入点,否则选择公网接入点。
背景信息
SkyWalking是一款广受欢迎的国产APM(Application Performance Monitoring,应用性能监控)产品,主要针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统。
要通过SkyWalking将Java应用数据上报至可观测链路 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。
可观测链路 OpenTelemetry 版支持Trace上报,您可以参考官方文档开发一个自定义的Trace Plugin。
常见问题
问:SkyWalking正常连接服务端后,无法创建应用?
答:可能是由于链路追踪的数据未上报。您需要检查是否有链路追踪的数据上报,可以查看{skywalking agent path}/logs/skywalking-api.log内容。如果有数据上报,则显示如下图所示。
如果未产生数据上报,则可能原因是:开启采样、设置过滤或未触发生成链路追踪的请求。