1. Skywalking概述
Skywalking与2016年11月2日由国人吴晟在Github上传v1.0版本,用于提供分布式链路追踪性能,从5.x开始,成为一个性能较为欠缺的APM(Application Performance Management)零碎,2019年4月17日从Apache孵化器毕业,正式成为Apache顶级我的项目。提供分布式追踪、服务网格遥测剖析、度量聚合和可视化一体化解决方案。官网对本人介绍是专为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)架构而设计。(理解源码可+求求: 1791743380)
2. Skywalking次要性能
- 服务,服务实例,端点指标剖析
- 根本原因剖析
- 服务拓扑图剖析
- 服务,服务实例和端点依赖性剖析
- 慢服务检测
- 性能优化
- 分布式跟踪和上下文流传
- 数据库拜访指标、检测慢速数据库拜访语句(包含SQL)
- 告警
3. Skywalking次要个性
- 多种监控伎俩,语言探针和service mesh
- 多语言主动探针,Java,.NET Core和Node.JS
- 多种后端存储反对
- 轻量高效
- 模块化,UI、存储、集群治理多种机制可选
- 反对告警
- 优良的可视化计划
4. Skywalking架构简介
先看一下官网提供的架构图,如图:
[
](https://simple-spring-cloud-b...
Skywalking总体由四个局部agent
、collector
、webapp-ui
、storage
组成。图10-11从上到下是应用层接入,能够应用无入侵性的agent
探针接入,通过HTTP或者gRPC讲数据发送至Skywalking剖析平台collector
,collector
对承受到的数据进行聚合剖析,最初存储至storage
中,这里反对多种存储形式,比拟罕用的有H2和ElasticSearch,最初能够由webapp-ui
对所有的数据进行展现。
5. Spring Cloud与Skywalking实战
5.1 Skywalking部署构建
在介绍实战之前,咱们先简略介绍一下Skywalking部署构建计划。
这里存储形式笔者抉择应用ElasticSearch,具体版本是6.5.0,ElasticSearch的构建形式抉择应用Docker,间接应用Linux搭建有点简单,不适宜初学者,应用Docker构建简略不便。
笔者构建的一些前置条件:
java:1.8
CentOS:7.6
如果以后CentOS上没有Docker环境,能够应用上面的语句疾速构建:
yum install docker
当构建胜利后,能够应用上面的语句查看以后Docker的版本:
docker -v
笔者这里的输入是:
Docker version 1.13.1, build 7f2769b/1.13.1
装置好Docker当前,最好配置一下国内的镜像站,否则在网络不好的状况下可能呈现Docker下载失败等状况,能够应用上面的语句来批改镜像地址:
vi /etc/docker/daemon.json
笔者这里应用的是阿里云的镜像减速,如下:
{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]}
各位读者能够本人去阿里云上开明本人的镜像减速,具体不多做介绍。
应用Docker构建ElasticSearch6.5.0,首先,须要下载ElasticSearch6.5.0的镜像,输出以下命令:
docker pull elasticsearch:6.5.0
期待程序下载实现,实现后就能够启动镜像了,命令如下:
docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.5.0
ElasticSearch的默认启动内存是1g,如果以后服务器的内存不足1g,能够应用参数-e ES_JAVA_OPTS="-Xms256m -Xmx256m"
限度ElasticSearch的启动内存大小,残缺的语句如下:
docker run -d --restart=always -e ES_JAVA_OPTS="-Xms256m -Xmx256m" --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.5.0
启动胜利当前能够应用如下语句看一下是否启动胜利:
docker ps
后果如图:
[
](https://simple-spring-cloud-b...
ElasticSearch6.5.0单节点版曾经构建实现,为了不便后续操作,须要批改一个ElasticSearch的命名,输出命令docker exec -it es /bin/bash
进入容器文件目录,输出vi config/elasticsearch.yml
进入ElasticSearch配置文件,批改cluster.name
的值,笔者这里批改为CollectorDBCluster
,批改实现后,保留以后批改,输出exit
退出容器文件目录,输出docker restart es
重启以后容器,在浏览器输出http://192.168.44.128:9200/,看到如下信息能够证实ElasticSearch6.5.0单节点版曾经在失常的运行了。
{ "name" : "V-N2_ZQ", "cluster_name" : "CollectorDBCluster", "cluster_uuid" : "r9bFZ90WRyqSpMz80u61Yg", "version" : { "number" : "6.5.0", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "816e6f6", "build_date" : "2018-11-09T18:58:36.352602Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search"}
Skywalking构建,进入Skywalking官网,进入下载页面(http://skywalking.apache.org/downloads/ ),如图:
[
](https://simple-spring-cloud-b...
因为咱们是要在CentOS上运行,所以这里抉择Linux二进制版,就是曾经编译好的版本,无需咱们本人编译,下载至咱们的CentOS后,解压能够看到目录构造,如图:
[
](https://simple-spring-cloud-b...
- agent:探针相干,前面会做更加具体的介绍。
- bin:这里放的是oapService和webappService的启动脚本,当然也有执行两个脚本的合并脚本
startup.sh
。 - config:这里次要寄存的是collector的配置信息,咱们须要批改这里的application.yml中的无关ElasticSearch的配置,如下图:
[
](https://simple-spring-cloud-b...
批改storage.elasticsearch.nameSpace
为咱们后面构建ElasticSearch设置的cluster.name
,笔者这里的值为CollectorDBCluster
,同时批改storage.elasticsearch.clusterNodes
为咱们以后构建的ElasticSearch的地址。
- logs:寄存collector和webapp-ui生成的日志。
- webapp:这里寄存的是Skywalking展现UI的jar和配置文件。
Skywalking中默认应用的端口有8080、11800、12800,请保障这些端口未被占用,如需批改,能够批改config
目录中的application.yml
和webapp
目录中的webapp.yml
。
接下来启动collector和webapp-ui,进入bin目录中,执行命令./startup.sh
,如:
[
](https://simple-spring-cloud-b...
关上浏览器拜访http://192.168.44.128:8080/,能够看到webapp-ui的仪表盘,如图:
[
](https://simple-spring-cloud-b...
Skywalking部署到这里就完结了,上面咱们开始介绍Spring Cloud如何与Skywalking整合应用。
5.2 Spring Cloud整合Skywalking实战
先简略介绍一下案例内容,咱们将创立4个工程,别离为Zuul-Service、Eureka-Service、Consumer-Service和Provider-Service,申请通过Zuul-Service拜访至Consumer-Service再拜访至Provider-Service实现一次链路调用。
整体架构图如图:
[
](https://springcloud-oss.oss-c...
具体实现代码列出,各位读者能够参考GitHub仓库(https://github.com/meteor1993/SpringCloudLearning/tree/master/chapter15),上面咱们介绍Spring Cloud是如何与Skywalking整合的。
这里咱们须要应用到Skywalking的探针agent,咱们在工程chapter15的跟目录中新建一个文件夹,命名为skywalking
,讲方才解压的Skywalking中的agent整个文件夹copy到skywalking
,这里咱们启动时只须要配置javaagen命令加载agent探针即可,在idea中应用须要批改启动配置,点击右上角的Edit Configurations...
,在关上的窗口中抉择Environment->VM Options
,配置如下脚本:
-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar-Dskywalking.agent.service_name=zuul-service-Dskywalking.collector.backend_service=192.168.44.128:11800
如图:
[
](https://springcloud-oss.oss-c...
还能够应用java -jar的形式来加载agent探针,咱们将整个maven我的项目打包,运行mvn install的命令,应用java -jar的形式来启动,启动命令中减少启动参数,如下:
-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=consumer-service -Dskywalking.collector.backend_service=192.168.44.128:11800 -jar zuul-0.0.1-SNAPSHOT.jar
依次启动四个工程后,应用浏览器拜访:http://localhost:8080/client/hello?name=spring,多刷新几次后,咱们再应用浏览器拜访http://192.168.44.128:8080/,如:
[
](https://simple-spring-cloud-b...
- all_heatmap:所有服务响应工夫的热点图
- all_p99:所有服务响应工夫的 p99 值
点击上边栏的拓扑图,能够看到以后咱们工程的一个依赖拓扑关系,如:
[
](https://simple-spring-cloud-b...
点击上边栏的追踪,能够看到右边是以后所有的拜访申请,轻易点击一个,能够在左边看到一个具体的链路追踪过程,如:
[
](https://simple-spring-cloud-b...
点击链路,能够看到一些标记信息,蕴含端点、跨度类型、胜利还是失败,以及一些Exception信息,如图:
[
](https://simple-spring-cloud-b...
点击仪表盘页面的Service,能够看到一些服务相干的信息,如均匀响应工夫、均匀吞吐量、均匀时延统计,如图:
[
](https://simple-spring-cloud-b...
- service_instance_sla:服务实例的成功率
- service_instance_resp_time:服务实例的均匀响应工夫
- service_instance_cpm:服务实例每分钟调用次数
点击仪表盘页面的Endpoint,能够看到一些端点相干的信息,如图:
[
](https://simple-spring-cloud-b...
- endpoint_cpm:端点每分钟调用次数
- endpoint_avg:端点均匀响应工夫
- endpoint_sla:端点成功率
- endpoint_p99:端点响应工夫的 p99 值
点击仪表盘页面的Instance,能够看到一些JVM相干的信息,如图:
[
](https://simple-spring-cloud-b...
至此,Spring Cloud与Skywalking的介绍就完结了,感兴趣的敌人能够返回Github的官方网站进行查问。
6. 小结
这里总结一下整个案例的启动程序:
- 启动ElasticSearch
- 启动collector
- 启动web-ui(或者应用整合脚本启动)
- 启动Agent(Eureka、provider、consumer、zuul)
- 利用调用
- 拜访web-ui查看统计信息
以上启动程序供各位读者参考,请各位读者最好依照以上程序启动,因为不同的组件之前其实是有相互依赖关系的,如果随便更改启动程序可能会造成某些未知问题。