一.背景
之前在公司做日志收集进行技术选型的时候考虑过ELK
,但是由于其有点笨重,而且不支持链路追踪,于是在gitee
上看到一个GVP项目Plumelog,并且在测试服进行了使用。这个项目对代码的入侵较小,但是还是需要配置,最近看到了另外一款 APM系统skywalking
,这款开源软件2015年由个人吴晟(华为开发者,gitee
上的Gitee封面人物
中还有他的一篇专栏)开源 , 2017年加入Apache孵化器,使用java探针字节码增加技术,实现对整个应用的监控,对代码实现了真正的零侵入。Apache
的开源项目,你值得拥有。
二.简介
SkyWalking
:一个开源的观测平台, 用于从服务和云原生基础设施收集, 分析, 聚合以及可视化数据.
SkyWalking
为你提供了一种简便的方式来清晰地观测分布式系统, 甚至可以观测横跨不同云的系统.
SkyWalking
更是一种现代的应用程序性能监控(Application Performance Monitoring)工具, 尤其是专为云原生, 基于容器以及分布式的系统.
在许多不同的场景下, SkyWalking 为观察和监控分布式系统提供了解决方案. 首先是像传统的方式那样, SkyWalking 为服务提供了自动打点代理, 如 Java, C# 和 Node.js. 同时也提供了手动打点 SDK, 像 Go (尚未支持) , C++ (尚未支持). 随着越来越多的编程语言需要获得支持, 运行时操作代码的危险性, 以及云原生基础设施越来越强大, SkyWalking 还可以使用服务网格基础探针来收集数据, 以帮助了解整个分布式系统. 总之, SkyWalking 为 服务(service), 服务实例(service instance), 以及 端点(endpoint) 提供了观测能力.
服务(Service), 实例(Instance) 以及 端点(Endpoint) 等概念在如今随处可见, 所以让我们先了解一下他们在 SkyWalking 中都表示什么意思.
- 服务(Service). 表示对请求提供相同行为的一系列或一组工作负载. 在使用打点代理或 SDK 的时候, 你可以定义服务的名字. 如果不定义的话, SkyWalking 将会使用你在平台上定义的名字, 如 Istio.
- 服务实例(Service Instance). 上述的一组工作负载中的每一个工作负载称为一个实例. 就像 Kubernetes 中的
pods
一样, 服务实例未必就是操作系统上的一个进程. 但当你在使用打点代理的时候, 一个服务实例实际就是操作系统上的一个真实进程. - 端点(Endpoint). 对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名.
使用 SkyWalking 时, 你可以看到服务与端点之间的拓扑结构, 每个服务/服务实例/端点的性能指标, 还可以设置报警规则.
除此之外, 你还可以通过 SkyWalking 原生代理, SDK 以及 Zipkin, Jaeger 和 OpenCensus 来进行分布式追踪.
网上有很多关于Skywalking
和其他APM
系统的对比
比如下面这篇文章:https://juejin.cn/post/6844903560732213261
下面也贴出一个对比表格:(摘自:https://blog.csdn.net/weixin_34393428/article/details/92408030?utm_term=skywalking%E5%AF%B9%E6%AF%94&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-3-92408030&spm=3001.4430)
pinpoint | zipkin | jaeger | skywalking | |
---|---|---|---|---|
OpenTracing兼容 | 否 | 是 | 是 | 是 |
客户端支持语言 | java、php | java,c#,go,php等 | java,c#,go,php等 | Java, .NET Core, NodeJS and PHP |
存储 | hbase | ES,mysql,Cassandra,内存 | ES,kafka,Cassandra,内存 | ES,H2,mysql,TIDB,sharding sphere |
传输协议支持 | thrift | http,MQ | udp/http | gRPC |
ui丰富程度 | 高 | 低 | 中 | 中 |
实现方式-代码侵入性 | 字节码注入,无侵入 | 拦截请求,侵入 | 拦截请求,侵入 | 字节码注入,无侵入 |
扩展性 | 低 | 高 | 高 | 中 |
trace查询 | 不支持 | 支持 | 支持 | 支持 |
告警支持 | 支持 | 不支持 | 不支持 | 支持 |
jvm监控 | 支持 | 不支持 | 不支持 | 支持 |
性能损失 | 高 | 中 | 中 | 低 |
下面是skywalking
的项目地址和文档地址
skywalking
项目地址:码云项目地址:https://gitee.com/OpenSkywalking/sky-walking
Apache 项目地址:http://skywalking.incubator.apache.org/
中文文档地址:https://skyapm.github.io/document-cn-translation-of-skywalking/
三.安装及配置
1. 下载
下载页面:http://skywalking.apache.org/downloads/
先选择APM
包的方式进行安装
点击source
选择想要的版本进行下载,右侧的Distribution
是对每个版本的描述,当然如果这里没有你想要的版本,也可以将页面下拉
点击此处可以看到更多的版本并下载,此处我选择的是6.1.0
版本的。
2. 解压
解压后得到apache-skywalking-apm-bin
目录,目录结构如下
skywalking的agent包结构如下
+-- agent
+-- activations
apm-toolkit-log4j-1.x-activation.jar
apm-toolkit-log4j-2.x-activation.jar
apm-toolkit-logback-1.x-activation.jar
...
+-- config
agent.config
+-- plugins
apm-dubbo-plugin.jar
apm-feign-default-http-9.x.jar
apm-httpClient-4.x-plugin.jar
.....
+-- optional-plugins
apm-gson-2.x-plugin.jar
.....
+-- bootstrap-plugins
jdk-http-plugin.jar
.....
+-- logs
skywalking-agent.jar
3. 运行
在bin
目录下,有很多运行脚本,其中点击startup.bat
(windows)或startuo.sh
(linux)即可启动oapService
和webappService
windows启动后会有两个窗口,放置在那里即可
4. 项目配置agent
在使用java -jar
命令运行你的jar
包时,加入-javaagent:skywalking path\agent\skywalking-agent.jar -Dskywalking.agent.service_name=test -Dskywalking.collector.backend_service=127.0.0.1:11800
(在-jar之前)。此处我就不单独使用jar包演示,而是使用idea来启动项目
-javaagent:skywalking path\agent\skywalking-agent.jar
:指定的是刚刚解压好的skywalking
的文件下的agent
目录下的skywalking-agent.jar
的位置-Dskywalking.agent.service_name=test
:在日志记录时,这个工程的名称Dskywalking.collector.backend_service
:skywalking-collector
(OAP-service)服务的地址,默认是127.0.0.1:11800
,可以在OAP-service
的配置文件中修改
四. 查看日志
配置好以上内容后,启动项目,当看到日志中有以下输出内容代表agent
配置是正确的
访问localhost:8080(UI项目的默认端口是8080,可以在配置文件中修改),默认账号密码admin/admin,可以看到如下界面。展示了你被访问的接口、服务、端点等信息。
还可以看到实时的拓扑图
当然,最重要的是 日志打印以及链路追踪
五. 总结
skywalking
是一款非常成熟的APM
系统,在链路追踪日志记录等方面十分专业,而且速度很快,性能影响不大,UI
页面十分友好,并且对代码实现了真正的完全无侵入,非常推荐去了解和部署