1. Skywalking概述
Skywalking与2016年11月2日由国人吴晟在Github上传v1.0版本,用于提供分布式链路追踪功能,从5.x开始,成为一个功能较为完善的APM(Application Performance Management)系统,2019年4月17日从Apache孵化器毕业,正式成为Apache顶级项目。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。官方对自己介绍是专为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)架构而设计。
2. Skywalking主要功能
- 服务,服务实例,端点指标分析
- 根本原因分析
- 服务拓扑图分析
- 服务,服务实例和端点依赖性分析
- 慢服务检测
- 性能优化
- 分布式跟踪和上下文传播
- 数据库访问指标、检测慢速数据库访问语句(包括SQL)
- 告警
3. Skywalking主要特性
- 多种监控手段,语言探针和service mesh
- 多语言自动探针,Java,.NET Core和Node.JS
- 多种后端存储支持
- 轻量高效
- 模块化,UI、存储、集群管理多种机制可选
- 支持告警
- 优秀的可视化方案
4. Skywalking架构简介
先看一下官方提供的架构图,如图:
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
结果如图:
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/ ),如图:
因为我们是要在CentOS上运行,所以这里选择Linux二进制版,就是已经编译好的版本,无需我们自己编译,下载至我们的CentOS后,解压可以看到目录结构,如图:
- agent:探针相关,后面会做更加详细的介绍。
- bin:这里放的是oapService和webappService的启动脚本,当然也有执行两个脚本的合并脚本
startup.sh
。 - config:这里主要存放的是collector的配置信息,我们需要修改这里的application.yml中的有关ElasticSearch的配置,如下图:
修改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
,如:
打开浏览器访问http://192.168.44.128:8080/,可以看到webapp-ui的仪表盘,如图:
Skywalking部署到这里就结束了,下面我们开始介绍Spring Cloud如何与Skywalking整合使用。
5.2 Spring Cloud整合Skywalking实战
先简单介绍一下案例内容,我们将创建4个工程,分别为Zuul-Service、Eureka-Service、Consumer-Service和Provider-Service,请求通过Zuul-Service访问至Consumer-Service再访问至Provider-Service完成一次链路调用。
整体架构图如图:
这里我们需要使用到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
如图:
还可以使用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/,如:
- all_heatmap:所有服务响应时间的热点图
- all_p99:所有服务响应时间的 p99 值
点击上边栏的拓扑图,可以看到当前我们工程的一个依赖拓扑关系,如:
点击上边栏的追踪,可以看到左边是当前所有的访问请求,随便点击一个,可以在右边看到一个详细的链路追踪过程,如:
点击链路,可以看到一些标记信息,包含端点、跨度类型、成功还是失败,以及一些Exception信息,如图:
点击仪表盘页面的Service,可以看到一些服务相关的信息,如平均响应时间、平均吞吐量、平均时延统计,如图:
- service_instance_sla:服务实例的成功率
- service_instance_resp_time:服务实例的平均响应时间
- service_instance_cpm:服务实例每分钟调用次数
点击仪表盘页面的Endpoint,可以看到一些端点相关的信息,如图:
- endpoint_cpm:端点每分钟调用次数
- endpoint_avg:端点平均响应时间
- endpoint_sla:端点成功率
- endpoint_p99:端点响应时间的 p99 值
点击仪表盘页面的Instance,可以看到一些JVM相关的信息,如图:
至此,Spring Cloud与Skywalking的介绍就结束了,感兴趣的朋友可以前往Github的官方网站进行查询。
6. 小结
这里总结一下整个案例的启动顺序:
- 启动ElasticSearch
- 启动collector
- 启动web-ui(或者使用整合脚本启动)
- 启动Agent(Eureka、provider、consumer、zuul)
- 应用调用
- 访问web-ui查看统计信息
相关推荐
"Spring Cloud 微服务权限系统搭建教程 脚手架" Spring Cloud 是一个基于 Java 的微服务架构开发框架,旨在简化分布式系统的开发和部署。FEBS Cloud 是基于 Spring Cloud Hoxton.RELEASE、Spring Cloud OAuth2、...
skywalking,可以用于若依springcloud微服务架构的链路跟踪,提供了一个可视化的监控平台。解压缩后,直接点击bin/startup.bat就可以了。如果端口冲突,修改webapp文件夹下的webapp.yml的server:port: 8080 将8080改...
SkyWalking是一个开源的应用性能监控(APM)系统,特别适合于微服务、云原生和容器化的环境。它提供了分布式跟踪、服务网格度量分析、应用性能和健康状况监控等功能。SkyWalking通过收集服务间的调用链数据,帮助...
在分布式系统中,监控和追踪服务调用链路至关重要,Spring Cloud 和 Apache SkyWalking 提供了一种高效的方法来实现这一目标。本文将详细介绍如何在Spring Cloud环境下集成SkyWalking进行链路跟踪。 ### 一、环境...
跟着课件学习的,启动服务可能需要关联启动:nacos sentinel seata skywalking其中某些中间件 配合博客https://blog.csdn.net/qq_42017523/article/details/121908588 集成的比较乱,有什么问题可以私信我,学完了,...
Apache SkyWalking 是一个开源的应用性能监控(APM)系统,尤其专注于微服务、云原生架构的监控。在“apache-skywalking-apm-es7-8.7.0”这个版本中,它支持Elasticsearch 7.x版本,是针对SpringCloud应用进行链路...
Spring Cloud Alibaba是Spring Cloud下的一个子项目,Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案,它包含开发分布式应用程序所需的所有组件,使用Spring Cloud Alibaba,您只需要添加一些注解和...
Spring Cloud Alibaba则是阿里巴巴为Spring Cloud生态贡献的一系列高质量的微服务解决方案,旨在帮助开发者更便捷地构建和管理分布式系统。 首先,我们来探讨一下微服务。微服务是一种将单一应用程序分解为一组小型...
【微服务链路追踪】windows下springCloud整合skywalking实现链路追踪,数据持久化到es安装包下载,版本apache-skywalking-apm-es7-7.0.0.tar.gz
│ 开篇词 Spring Cloud Alibaba 未来的微服务生态标准.mp4 │ 02 经验教训:微服务设计时的五条宝贵经验.mp4 │ 03 顶层设计:微服务生态与 Spring Cloud Alibaba.mp4 │ 06 负载均衡:Ribbon 如何保证...
微服务链路追踪是微服务治理方案中的一项必修课,SpringCloud的组件其实使用很简单,但是在生产环境中真正令人头疼的问题往往是软件维护,接口在微服务间的调用究竟哪个环节出现了问题,哪个环节耗时较长。...
Spring Cloud是微服务架构的工具集,而SkyWalking则是一个可观测性平台,主要用于分布式系统的性能监控和追踪。 【描述】"springcloud+skywalkingdemo.zip" 的描述虽然简洁,但暗示了这是一个用于学习或演示目的的...
基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速...
《Spring Cloud微服务实战》这本书深入浅出地介绍了Spring Cloud这一主流的微服务框架,它在Java开发领域中被广泛应用于构建分布式系统。Spring Cloud基于Spring Boot,为开发者提供了快速构建分布式系统中的一些...
Apache SkyWalking 是一个开源的应用性能监控(APM)系统,专为微服务、云原生和容器化环境设计。在本场景中,我们关注的是SkyWalking的Java Agent和APM核心组件。 首先,让我们深入了解SkyWalking Java Agent。`...
基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速...
- 核心框架:Spring Boot + Spring Cloud Alibaba - ORM 框架:tk.mybatis 简化 MyBatis 开发 - 数据库连接池:Alibaba Druid - 数据库缓存:Redis Sentinel - 消息中间件:RocketMQ - 接口文档引擎:Swagger2 ...
在本项目中,“springcloud+skywalkingdemo”是一个利用Spring Cloud最新版本构建的微服务示例,结合了SkyWalking作为应用性能监控(APM)工具。这个项目旨在演示如何在微服务架构中集成各种核心组件,如服务发现、...
SkyWalking适用于分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器 (Kubernetes) 的架构而设计。 SkyWalking在8.8.0版本以后将agent进行了单独拆分,因此若要使用8.8.0版本以后的,需要下载apm和...
│ 71.1-AlibabaCloud微服务整合SkyWalkingAgent实战.mp4 │ 71.2-微服务打包SkyWalkingAgent镜像部署发布实战.mp4 │ 71.3-微服务访问-SkyWalkingUI数据查看和避坑.mp4 │ 71.4-DevOps链路优化-镜像构建推送加速...