Skywalking是一个基于JAVA SpringBoot框架开发的监控工具,可以用于查看监控指标和定位问题。使用经验包括搭建集群、统一管理代码、使用ES集群存储数据等。入口类为执行premain方法,加载配置文件并读取启动类的-javaagent参数。
一、Skywalking概述
1、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语言的最新版本的.
①、源码下载阅读
4、微服务开发中解决一下问题
①、如何串联整个调用链路,快速定位问题?单纯看日志?
②、如何澄清各个微服务之间的依赖关系?
③、如何进行各个微服务接口的性能分析?
④、如何追踪各个业务流程的调用处理顺序?
二、Skywalking启动
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包存放的绝对路径)
在agent/config/agent.config配置文件中,-Dskywalking.agent.service_name被用于覆盖服务名。
作为IT工程师,我建议您使用以下方式更专业地表达该文本: 建议使用-Dskywalking.collector.backend_service参数,以便能够对agent/config/agent.config配置文件中的服务地址进行重写。
对于Tomcat的部署项目在catalina.sh中添加即可,spring boot项目中在nohub启动脚本中添加。
agent位置.
agent不要单独copy到一个目录,否则加载不到config配置类就包如下错了
The system encountered an error while attempting to read the configuration file. As a result, the skywalking module will be running on the default configuration.
正确加载应该是这样.
三、监控指标查看
1、查看拓扑图
2、监控项
3、事件ID
4、追踪
5、性能剖析
6、告警
以下是使用更专业的语言重新表达该段文字: 在搭建集群时,一般使用域名进行单独部署,并统一管理代理脚本和其他代码。数据存储方面,常采用ES集群。同时,还提供了业界认可的appid方式来统一管理链路追踪,以便对业务进行辅助定位和问题排查。这种方案对业务的侵入性较低,还可以配置一些告警功能。在不同环境(如sit、alpha、prod等)中,需要注意区分配置。此外,还可以使用公有云提供的自研APM探针工具来收集信息,其基本原理与其它工具相似。对于熟悉skywalking的人来说,只需阅读文档即可上手。在一些监控组件中,功能可能有重叠,而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参数.
Skywalking是一个功能强大的监控工具,可以帮助开发人员监控和定位问题。它基于JAVA SpringBoot框架开发,可以通过下载服务和监控JavaAgent来使用。通过配置文件可以对服务名和服务地址进行修改,在集群部署中可以使用域名单独部署。它还支持使用ES集群存储数据,并可以配置告警来辅助业务定位问题。它的入口类为执行premain方法,通过加载配置文件读取启动类的-javaagent参数。