如果服务器上没有应用还会造成硬件瓶颈吗?显然是不会的,呈现出来的硬件瓶颈绝大多数是表象问题,我们往往需要在系统应用上寻找问题的根因。而寻找系统问题的根因,对于系统链路监控也是必不可少的,
前面我们也写了几篇关于SkyWalking搭建的文章,但是文章视角不一样。之前是以架构设计的角度来通过监控体系搭建,及时了解系统的运行情况和服务器的调用链路。本篇文章主要是以测试的角度来描述搭建目的。
一、为什么要链路监控
随着微服务的流行,链路监控越来越受重视。微服务架构是根据业务进行拆分,对外统一暴露API 接口,而内部可能是分布式服务、分布式对象存储等,如下图所示:
这些组件共同构成了复杂的分布式网络。而分布式系统一旦出现问题,比如一个请求经过多个微服务之后出现了调用失败的问题,或者一个请求经过多个微服务之后 Response 时间过长,但具体是哪个微服务节点的问题我们并不知道。只能去服务器上查看调用经过的每个微服务的日志,当然这种方式的效率是比较低的,相当于人肉运维。
随着业务体系越来越复杂,加上服务间的相互依赖关系,微服务其中一个节点出现了问题,很可能牵一发而动全身,导致严重的后果。在这样的情况下,分布式链路监控的价值就体现出来了,它可以让我们清晰地知道跨服务调用的链路耗时信息、执行方法等,并从整体到局部将信息呈现出来,可以节约故障排查时间。
二、全链路监控选择
全链路监控系统有很多,可以从这几方面选择:
-
探针的性能消耗,探针是搜集信息的“情报员”,尤其是在多节点情况下,搜集数据的成本会越来越高,监控组件服务的影响应该做到足够小、数据分析快、性能占用小;
-
对代码的非侵入性,减少开发的维护成本;
-
监控、分析的维度尽可能多。
目前市面上的全链路监控工具很多,比如 CAT、SkyWalking、Pinpoint 等,对于工具的选型来说最重要的是采样数据对系统的性能消耗足够小、数据分析和展示快、监控的维度尽可能丰富,简单比较下这几个工具。
-
CAT:是由美团和携程的同学开发的,通过代码埋点的侵入式方式,对应用日志分析、监控、展示等,不过侵入式的方式会带来开发以及维护成本的增加。
-
SkyWalking:也是由国人开发,目前项目已经提交到 Apache 孵化组织,无侵入性、UI 展示简洁清晰。
-
Pinpoint:由韩国人开发,相对于 SkyWalkingg 提供了更为详尽的链路监控信息,不过数据采集带来的性能损耗相对于 SkyWalking 来说比较大。
三、SkyWalking模块分析
先来看下 SkyWalking 的组件示意图:
1、SkyWalking部署安装
首先下载 SkyWalking 安装包并进行解压:
wget https://github.com/apache/SkyWalking/archive/v8.0.1.tar.gztar -zxvf v8.0.1.tar.gz
解压后可以看到如下文件夹:
(1)修改配置文件
修改配置文件 config/application.yml。在这里先进行数据库的配置,使用当前服务器上的 mysql 来进行存储:
mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://127.0.0.1:3306/swtest"}dataSource.user: ${SW_DATA_SOURCE_USER:root}dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}
修改完成后,启动服务。
$ bin/oapService.shSkyWalking OAP started successfully!
(2)SkyWalking UI配置
接着来看 SkyWalking UI 的相关配置,由于 SkyWalking UI 的默认端口是 8080,这个端口是很多应用的默认端口,容易产生冲突,可以修改一下,如下所示:
# 修改webapp/webapp.ymlserver:port: 18080
UI界面启动成功后示意图如下:
(3)启动微服务
nohup java -server -Xms256m -Xmx256m -Dspring.profiles.active=dev -Dspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 -javaagent:/root/apm/apache-SkyWalking-apm-bin/agent/SkyWalking-agent.jar=agent.service_name=cctuser -Dspring.cloud.nacos.config.server-addr=127.0.0.1:8848 -jar blade-user.jar > log.file 2>&1 &
启动本地的微服务成功后,就可以访问服务,同时通过 SkyWalking 监控可以看到服务部署图以及链路监控等,如下图所示:
搭建完SkyWalking监控体系后,如果服务遇到超时、访问错误时,我们如何能快速接收到报警信息呢?有哪些报警方式可以使用呢?欢迎继续关注。
文章将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发。