SpringCloud第十五篇:微服务利剑之APM平台(一)Skywalking

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架构简介

先看一下官方提供的架构图,如图:

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完成一次链路调用。

整体架构图如图:

具体实现代码列出,各位读者可以参考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

如图:

还可以使用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查看统计信息

以上启动顺序供各位读者参考,请各位读者最好按照以上顺序启动,因为不同的组件之前其实是有相互依赖关系的,如果随意更改启动顺序可能会造成某些未知问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容