1、Skywalking介绍
官网:博客 | Apache SkyWalking
Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
2、Skywalking架构图
整个架构,分成上、下、左、右四部分
①、上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking ②、Agent 收集 SkyWalking Tracing 数据,传递给服务器。
下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
③、右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
④、左部分 SkyWalking UI :负责提供控台,查看链路等等。
基于各种语言的Agent探针来收集服务数据,然后展示采集的数据;
多种监控手段,可以通过语言探针和service mesh获得监控的数据;
支持多种语言自动探针,包括java,.NET Core和Node.JS;
轻量高效,无需大数据平台和大量的服务器资源;
模块化,UI、存储、集群管理都有多种机制可选;
支持告警;
优秀的可视化解决方案;
3、下载,各种语言的Agent都有、
下载Skywalking服务
下载监控JavaAgent.
这里下载Java语言的最新版本的.
①、源码下载阅读
Github地址
4、微服务开发中解决一下问题
①、如何串联整个调用链路,快速定位问题?单纯看日志?
②、如何澄清各个微服务之间的依赖关系?
③、如何进行各个微服务接口的性能分析?
④、如何追踪各个业务流程的调用处理顺序?
1、启动脚本
如果出现启动问题,看日志具体解决.
2、配置文件
Skywalking基于JAVA SpringBoot框架开发,默认端口是8080,可以在启动时候自己指定修改.
默认使用的存储数据库是H2,可以修改为MySQL和ES,在配置文件中灵活配置.
3、启动skywalking
在IDEA中添加一下地址信息
-javaagent:D:\skywalking\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-service -Dskywalking.collector.backend_service=127.0.0.1:11800
配置项说明:
-javaagent:用于指定探针路径(就是agent下skywalking-agent.jar包存放的绝对路径)
-Dskywalking.agent.service_name:用于重写agent/config/agent.config 配置文件中的服务名
-Dskywalking.collector.backend_service:用于重写agent/config/agent.config配置文件中的服务地址
对于Tomcat的部署项目在catalina.sh中添加即可,spring boot项目中在nohub启动脚本中添加。
agent位置.
agent不要单独copy到一个目录,否则加载不到config配置类就包如下错了
Failed to read the config file, skywalking is going to run in default config.
正确加载应该是这样.
1、查看拓扑图
2、监控项
3、事件ID
4、追踪
5、性能剖析
6、告警
使用经验:一般搭建集群使用域名单独部署、agent脚本等代码统一管理、使用ES集群存储数据,也有包装了业界的给一个appid,统一管理链路追踪,对业务的侵入性较低,可以配置一些告警,辅助业务定位疑难问题使用,对于多环境比如sit\alpha\prod等注意区分即可,还有使用公有云的自研包装的APM探针工具采集信息的,基本都是一样的原理,熟悉skywalking后看一下文档就立马上手了,也有一些监控组件有功能重合,skywalking更擅长链路追踪,便于定位问题。
1、Java探针技术类型
(1)在主程序之前运行的Agent.
(2)在主程序之后运行的Agent.
在实际使用过程中,javaagent是java命令的一个参数。通过java 命令启动我们的应用程序的时候,可通过参数 -javaagent 指定一个 jar 包(也就是我们的代理agent),能够实现在我们应用程序的主程序运行之前来执行我们指定jar 包中的特定方法,在该方法中我们能够实现动态增强Class等相关功能,并且该 jar包有2个要求:
<1> 这个 jar 包的 META-INF/MANIFEST.MF 文件必须指定 Premain-Class 项,该选项指定的是一个类的全路径.
<2> Premain-Class 指定的那个类必须实现 premain() 方法。META-INF/MANIFEST.MF文件内容如下
2、Skywalking的探针文件如下
Manifest-Version: 1.0
Created-By: Apache Maven 3.6.1
Built-By: wusheng
Build-Jdk: 11.0.13
Specification-Title: apm-agent
Specification-Version: 8.10
Specification-Vendor: The Apache Software Foundation
Implementation-Title: apm-agent
Implementation-Version: 8.10.0
Implementation-Vendor-Id: org.apache.skywalking
Implementation-Vendor: The Apache Software Foundation
Implementation-URL: http://maven.apache.org
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: org.apache.skywalking.apm.agent.SkyWalkingAgent
拉下来源码看一下,IDEA导入一下即可.
入口类:执行premain方法
加载配置文件读取启动类的-javaagent参数.