资讯专栏INFORMATION COLUMN

用它!分布式系统APM工具的优雅之选“SkyWalking”

IT那活儿 / 3270人阅读
用它!分布式系统APM工具的优雅之选“SkyWalking”

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


小时候我们都盼望着能够快点长大,长大后,那段懵懵懂懂、无忧无虑的岁月时时让我们怀念。而现在努力奋斗的我们正在让孩子的生活,更加精彩!


6.1儿童节

祝我们的大朋友们

永葆童心,友爱友趣!




开头篇


 

想必从事运维的都听说过微服务架构
微服务架构是个好架构,它把整体的业务拆分成了若干个功能明确、目的统一的小服务,通过很多分散的小服务去整合排列,最终解决更大、更加复杂的业务场景。同时,架构中对拆分后的小服务进行分类和管理,彼此之间使用统一的协议来进行交互。
这个设计从开发的角度,看上去很简明美好。但我们做运维的,看到这样的设计,不免心里要犯怵:
这种微服务架构的特点,决定了它的部署往往是分布式的。在传统环境下,所有业务都在一个服务器上来回折腾,出了问题,只要从一个点看过去,就能够快速定位问题。可微服务架构可不遵循这套逻辑。通过总线交互的,可都是无状态的服务。当前台的业务流会经过很多个微服务的处理和传递时...
分散在各个服务器上的日志怎么处理?
业务挂了,怎么定位问题?
怎么跟踪业务流的处理结果?
不用担心!因为,发现这个麻烦的不只你一个人。
早在2015年,就有一个名叫吴晟的开发者开源了一个名为Skywalking的分布式系统的应用程序性能监控工具,专为微服务云原生基于容器的 (Kubernetes) 架构而设计。而随着这几年的发展,这个工具已经在功能、性能、界面效果上实现了突飞猛进的发展。
抓重点,开源、专为微服务架构设计,功能性能两开花。这不就是微服务架构维护人员梦寐以求的APM神器嘛?!不说了,用它
在接下来的内容中,将手把手的带你完成基于Nacos的Skywalking集群搭建Skywalking工作原理简要解读

 



Nacos集群搭建


 

为什么要先介绍Nacos?
这是因为Skywalking OAP(Observation Application Platform)之间本身不能搭建集群,需要一个集群管理器来组建集群,目前Skywalking 支持Nacos、zookeeper、Kubernetes、Consul、Etcd 等多种集群管理器。
又因为Nacos 擅长于发现、配置和管理微服务,又提供了一组简单易用的特性集,帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。所以,自然成为了搭建Skywalking集群的一个很棒的选择[3](当然,如果你是忠实的zookeeper或者Kubernetes用户,那么继续使用它们也完全不影响感受Skywalking带来的优雅体验)
首先,带来我们的架构图设计,这里采用了搭建生产环境的最低配置。
图一 生产可用Nacos集群部署架构图
可以看到,该部署架构图有如下特征:
  • 使用三个节点来构建Nacos集群。(官方[1]要求使用三个及以上Nacos节点才能建立集群);

  • 使用主从Mysql作为后端存储;

  • 额外依赖为JDK和Nginx,但只需要在Leader节点上配置JDK和Nginx即可。(Nacos软件需要在三个节点均配置

既是针对小白的教程,那么每一步的构建部署都不会随意跳过。保证所有软件及依赖安装,从零开始不跳步骤一步一截图
1. 从官网下载Nacos安装包
在本实验案例中,安装包下载后,上传至ftp后,在对应主机通过ftp下载。
图二 在对应主机通过ftp下载安装包
2. 解压安装包
使用unzip命令解压安装包。
图三 使用unzip命令解压安装包
3. 编辑Nacos集群配置文件
编辑Nacos集群配置文件(Nacos的配置文件都在<安装目录>/Nacos/conf目录下),指定三个节点的IP和端口。
图四 编辑Nacos集群配置文件
4. 创建数据库
使用<安装目录>/Nacos/conf目录下的Nacos-mysql.sql创建数据表。(需要提前手动创建数据库)
图五 创建完成的数据库
5. 修改Nacos Server配置文件
修改Nacos Server配置文件,主要修改的内容是连接数据库的部分。这里使用的Mysql数据库用户名为root,密码为123456
图六 修改Nacos Server配置文件
6. 尝试启动Nacos Server
使用<安装目录>/Nacos/bin目录下的startup.sh来启动Nacos Server。启动后根据提示查看错误日志,发现报错为找不到JDK。
图七 启动Nacos Server
7. 安装JDK
这里安装JDK,使用的是存放在FTP服务器上的安装包,版本为jdk1.8。
图八 下载jdk安装包
8. 配置JDK环境变量
根据之前启动Nacos Server的报错配置JDK环境变量JAVA_HOME。
图九 配置JDK环境变量并source生效
9. 尝试启动Nacos Server
继续启动Nacos Server,发现报错为Nacos无法连接数据库。
图十 报错为Nacos无法连接数据库
10. 修改Mysql用户登陆设置
查看数据库用户登录设置后发现,配置的root用户默认只能从localhost登录,因此使用如下语句来修改用户登陆设置为可以从任何IP登录。
use mysql;
update user set host = %  where user =root;
flush privileges;

quit
图十一 修改数据库登录用户设置
11. 尝试启动Nacos Server
再次尝试启动Nacos Server,启动成功。
图十二 启动Nacos Server成功
12. 修改Nginx配置文件
为了能够使用Nacos的图形化Web管理界面,这里需要在Leader节点上配置Nginx。如果使用的是CentOS操作系统,可以参考[2]中的Nginx部署配置过程。
图十三 配置Nginx步骤截图
13. 进入Web图形界面
之前创建的数据库里,默认创建了一个名为nacos的用户,密码为加密的nacos。使用该用户名和密码,可以登录Nacos的Web图形管理界面。IP为/Nacos。
图十四 登录图形化Nacos的Web管理界面
14. 在其他节点上进行同样的操作
可以从图形界面的「集群管理」->「节点列表」里发现,当前只启动了一个节点的Nacos Server。我们模仿之前的步骤,依次启动其他节点的Nacos Server。
图十五 启动其他节点的Nacos Server之后,在Web界面中可以看到节点从「Down」状态转为「Up」状态
15. 关闭Nacos Server
如果需要关闭Nacos Server,只需要运行<安装目录>/Nacos/bin下面的shutdown.sh即可。
图十六 运行shutdown脚本之后,在Web界面中可以看到节点从「Up」状态转为「Down」状态

 



基于Nacos的Skywalking集群搭建


 

短短的十几步,就已经完成了JDKNginxMysql主从Nacos这一大堆环境的搭建,搞出了一个最基础的生产可用Nacos集群
那么,让我们来继续完成这最后的步骤吧。
首先,先看看加入了Skywalking之后,架构图发生什么样的变化。
图十七 基于Nacos的Skywalking集群部署架构图
可以看到,对比之前的Nacos集群搭建,这里相当于在Leader节点上额外配置一个ES,并且在集群的每个节点上配置一份Skywalking。
因此,很显然可以得出这一部分的部署思路:在之前Nacos集群部署的基础上,额外配置ES7和Skywalking即可参考[4]
1. 从官网下载ES7和Skywalking安装包
在本实验案例中,安装包下载后,上传至ftp后,在对应主机通过ftp下载。
图十八 在对应主机通过ftp下载安装包
2. 修改ES配置文件
解压安装包之后,进入到ES安装目录,修改ES的配置文件(配置文件目录为/config/elasticsearch.yml)。
在本实验案例中,将ES集群的名称命名为test(该命名需要与后续的Skywalking配置中的配置项内容相同)。同时,该配置文件中的data和logs目录如果不存在,需要手动创建。
图十九 修改ES配置文件
3. 创建es用户并修改目录权限
由于ES限制使用root用户启动,因此需要多带带创建es用户,并修改ES目录属组。
useradd es
chown es:es
图二十 修改ES安装目录属组为es:es
4. 启动ES
启动ES在/bin下运行sh startup.sh -d即可。启动成功后,ES默认使用9200端口,在浏览器打开对应ip:port,可以看到安装情况。如果看到下图的内容,则表示安装成功。
图二十一 ES安装成功浏览器显示结果
5. 修改Skywalking配置文件
解压安装包之后,进入到Skywalking安装目录,修改ES的配置文件(配置文件目录为/config/application.yml)。
涉及到的配置项如下:
1)配置集群为nacos
在本实验案例中,将nacos集群的使用的命名空间为默认的public,nacos用户名和密码使用默认的nacos/nacos,服务名为SkyWalking_OAP_Cluster
图二十二 配置集群
2)配置数据库为ES
在本实验案例中,根据上面步骤的记录,将ES的集群名设置为test
图二十三 配置数据库
3)设置集群配置为nacos
在本实验案例中,将nacos集群的使用的命名空间为默认的public,nacos用户名和密码使用默认的nacos/nacos
图二十四 集群配置
6. 启动Skywalking
启动Skywalking在/bin下运行sh startup.sh即可。启动成功后,Skywalking默认使用8080端口,在浏览器打开对应ip:port,可以看到图形化界面。(因为目前还没有任何数据,因此图形化界面里是空的)
图二十五 Skywalking启动成功反馈以及web图形化界面
7. Nacos图形界面查看服务
完成Skywalking启动后,可以在Nacos图形界面查看服务。
图二十六 在Nacos图形界面查看服务
8. 在其他节点上进行同样的操作
在其他节点上进行同样的操作,只修改服务名为SkyWalking_OAP_Cluster_2和服务名为SkyWalking_OAP_Cluster_3。在Nacos图形界面可以看到三个节点的服务[5]
图二十七 在Nacos图形界面可以看到三个节点的服务
至此我们已经成功完成了部署。
那么,让我们顺便来看一眼Skywalking的工作原理吧。了解它能帮助你更好的理解它的功能和效果。

 



Skywalking工作原理简要解读


 

Skywalking的源码量并不小,但理解它的核心在于明白它对应用监控的逻辑。在Skywalking中,这个功能通过探针实现。该功能是 Java 虚拟机提供的一整套后门。通过这套后门可以对虚拟机方方面面进行监控与分析。
我们可以从此切入,通过这样的思路[6]来了解Skywalking的工作原理。
1. 启动方式
通常Agent分为静态启动动态启动
1)静态启动:使用 -javaagent 参数,在类加载时对目标类的字节码可以进行任意修改,只要最后的结果符合字节码规范,SkyWalking 只支持这种方式启动 Agent。
2)动态附加:使用 Attach API,类已经加载完成并被使用,这时候只能对目标类的字节码进行有限的修改,典型的应用:系统诊断(阿里 Arthas、笨马 XPocket)。
2. 启动流程
在源码的agents部分中,可以看到它的启动流程如下:
1)初始化配置。(加载配置信息、将配置信息映射到 Config 类、根据配置信息重新指定日志解析器、检查 Agent 名称和后端地址是否配置、标记配置加载完成)
2)加载插件。(并行类加载器)
3)定制化Agent。(创建 ByteBuddy 实例、指定 ByteBuddy 要忽略的类、将必要的类注入到 BootstrapClassLoader 中、解决 JDK 模块系统的跨模块类访问、根据配置决定是否将修改后的字节码保存到磁盘/内存上)
4)启动服务。
5)注册关闭钩子。
3. 服务 BootService
Skywalking中主要的服务有如下几个:
1)GRPCChannelManager(Agent到OAP的网络连接、定时重连、通知监听器网络连接状态的变化);
2)ServiceManagementClient(向OAP汇报自身的信息、保持心跳);
3)CommandService(调度 OAP 下发的命令、CommandExecutorService);
4)SamplingService(控制链路是否被上报到 OAP);
5)JVMService(收集 JVM 的相关指标);
6)KafkaXxxService(由 Agent 直连 OAP 改为通过 Kafka 交互、大部分的采集的数据都改为走 Kafka);
7)StatusCheckService(用来判断哪些异常不算异常)。
4. 链路追踪
链路追踪是Skywalking实现的最基本功能,理解它需要首先知道这几个概念。
1)Trace:表示一整条链路(跨线程、跨进程的所有 Segment 的集合)
2)Segment:表示一个 JVM 进程内的一个线程中的所有操作的集合
3)Span:表示具体的某一个操作
TraceSegment(组成 Trace 的基本单元、TraceSegmentRef 用于引用 Parent Segment、所有的 Span 维护在一个 LinkedList 中;
relatedGlobalTraceId 表示当前 Segment 所在的 Trace、isSizeLimited 如果为 true 表示当前这条线程内发生的操作次数超过了配置值,Segment 丢弃了一部分操作);
Span(AsyncSpan - Span 的骨架、AbstractTracingSpan - 用于链路追踪的 Span 模型)。
大家看到这里,是不是对Skywalking的工作原理有了初步的印象,不再觉得这是一个完全吃不透的黑盒子了?

 



总结篇


 

虽然Skywalking这个开源项目在经历了多年的commit之后,已经变得相当庞大,但其基本工作原理和流程仍旧精炼优雅
本文初步探索了生产可用的Skywalking集群搭建,并且简要的介绍Skywalking的工作原理,阐释了其运转流程。希望能够帮助小白上手,或者给予老手些微的启发。

参考资料:

[1] https://Nacos.io/zh-cn/index.html(Nacos官网)

[2] https://blog.csdn.net/qq_37345604/article/details/90034424(安装nginx)

[3] https://www.imooc.com/article/288153/(搭建生产可用Nacos集群)

[4] https://www.cnblogs.com/fuhai0815/p/13344150.html(Centos7 Nacos + Elasticsearch + SkyWalking)

[5] https://www.bilibili.com/read/cv6621424/(基于Nacos的Skywalking集群配置)

[6] https://www.processon.com/view/link/611fc4c85653bb6788db4039#map(Skywalking源码思维导图)



END



本文作者:戴 波

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129479.html

相关文章

  • 手把手教你搭APMSkywalking搭建指南(支持Java/C#/Node.js)

    摘要:通过跟踪请求的处理过程,来对应用系统在前后端处理服务端调用的性能消耗进行跟踪,关于的介绍可以看这个链接,大规模分布式系统的跟踪系统作者刀把五链接来源知乎著作权归作者所有。 手把手教你搭APM之Skywalking 前言 什么是APM?全称:Application Performance Management 可以参考这里: 现代APM体系,基本都是参考Google的Dapper(大规模...

    ingood 评论0 收藏0
  • Mac下使用Docker快速搭建pinpont追踪系统APM

    摘要:下使用搭建分布式追踪系统简介是一个用编写大规模分布式系统性能管理工具,等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据,方便工程师能够快速定位问题。 Mac下使用Docker搭建pinpont分布式追踪系统APM 简介 Pinpoint 是一个用Java 编写大规模分布式系统性能管理 APM (Application Performance Manage...

    verano 评论0 收藏0
  • windows系统skywalking安装和配置

    摘要:安装可以去下载最新版本的压缩包,然后解压。然后进入目录下,直接双击即可运行然后访问即可看到的登录页面初始账号和密码均为登录进去即可看到下图因为还没有配置登录进来之后是没有数据的。 skywalking安装 可以去http://skywalking.apache.org/downloads/下载最新版本的skywalking压缩包,然后解压。 然后进入/apache-skywalking...

    AaronYuan 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<