
skywalking简介

官网的简介如上(让人遗憾的是中国人开发的软件居然没有中文文档),实现的功能挺多,间接说明了在链路追踪功能的基础上可以做很多事情。这次体验主要是验证链路追踪的功能。
skywalking快速部署

服务接入skywalking
1 服务启动指定skywalking的javaagent,这里通过java探针实现了非侵入性
我们以spring boot项目为例,打包成jar,启动命令如下:
java \
-javaagent:xxx/apache-skywalking-apm-bin/agent/skywalking-agent.jar \
-Dskywalking_config=./agent.config \
-jar ./target/sky-demo-1.0-SNAPSHOT.jar
其中agent.config配置文件如下:
# 设置为应用名称agent.service_name=skydemo# 设置为OAP地址collector.backend_service=yourhost:11800
引用agent注意的问题:
- agent目录下包含了plugin等相关插件,实际运行用到了这些插件,不能单独只指定skywalking-agent.jar
- skywalking-agent.jar的版本必须与skywalking服务端保持一致,避免不必要的兼容性问题
2 测试服务间的调用关系
在springboot服务中通过okhttp调用另外的服务,测试验证服务间的调用关系
3 测试服务调用存储系统
这里测试验证以调用redis和mysql为例


4 系统中打印traceid
log.info("{}", TraceContext.traceId());
5 golang语言接入

如上所示,我们实现了一个包含spring boot,golang服务,redis、mysql的调用关系,skywalking做了调用关系拓扑图的展示,这对于业务梳理调用关系和系统瓶颈大有帮助。
skywalking体验总结
(1)部署方便。从demo角度看几乎零门槛,线上的话主要考虑存储方面的部署和维护,比如es。
(2)无侵入性接入。由于本人并不擅长java技术栈,部署和验证过程费了一些周折,如果是搞java的同学接入的话基本是分分钟的事情。
(3)扩展性好。目前skywalking已经支持多种插件的探针实现,参考:https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/Supported-list.md。我们甚至可以根据自己的情况添加相应的插件,而这对于业务侧是无感知的。这种插件的方式具有极强的扩展性,同时可以集各路开发的力量完善整个社区。
(4)功能强大。实际上通过搜集链路信息本身就可以实现很多强大的功能,举个例子我们可以根据SQL语句去分析慢查询,可以对接口的质量进行告警,可以通过拓扑关系判断链路的瓶颈等。
现有系统接入skywalking的可行性
我们现有的技术栈是Java+ServiceMesh(golang),并且现在已经有一套链路追踪系统。首先业务侧的java服务可以无侵入性地指定javaagent进行skywalking的接入,但是service mesh也必须进行改造,升级为支持skywalking的实现(蚂蚁金服的mosn即实现了skywalking的上报),但这里带来了兼容性问题,即mesh还需要兼容老的未升级的链路协议的支持,实现上比较复杂性。
另外一个问题是java服务接入也不是完全无侵入,因为现有系统日志中打印了traceId,而接入skywalking则相应的日志中的traceid要做修改。虽然改动不大,但系统的改造和过渡期会带来各种问题。
总结
通过本次测试体验,本人非常看好skywalking,如果是java技术栈,如果没有历史遗留问题,强烈建议将skywalking引入到业务系统中。




