如何选择全链路监控系统?CAT、SkyWalking、Pinpoint哪个更适合?

如果服务器上没有应用还会造成硬件瓶颈吗?显然是不会的,呈现出来的硬件瓶颈绝大多数是表象问题,我们往往需要在系统应用上寻找问题的根因。而寻找系统问题的根因,对于系统链路监控也是必不可少的,

前面我们也写了几篇关于SkyWalking搭建的文章,但是文章视角不一样。之前是以架构设计的角度来通过监控体系搭建,及时了解系统的运行情况和服务器的调用链路。本篇文章主要是以测试的角度来描述搭建目的。

一、为什么要链路监控

随着微服务的流行,链路监控越来越受重视。微服务架构是根据业务进行拆分,对外统一暴露API 接口,而内部可能是分布式服务、分布式对象存储等,如下图所示:

这些组件共同构成了复杂的分布式网络。而分布式系统一旦出现问题,比如一个请求经过多个微服务之后出现了调用失败的问题,或者一个请求经过多个微服务之后 Response 时间过长,但具体是哪个微服务节点的问题我们并不知道。只能去服务器上查看调用经过的每个微服务的日志,当然这种方式的效率是比较低的,相当于人肉运维。

随着业务体系越来越复杂,加上服务间的相互依赖关系,微服务其中一个节点出现了问题,很可能牵一发而动全身,导致严重的后果。在这样的情况下,分布式链路监控的价值就体现出来了,它可以让我们清晰地知道跨服务调用的链路耗时信息、执行方法等,并从整体到局部将信息呈现出来,可以节约故障排查时间。

二、全链路监控选择

全链路监控系统有很多,可以从这几方面选择:

  • 探针的性能消耗,探针是搜集信息的"情报员",尤其是在多节点情况下,搜集数据的成本会越来越高,监控组件服务的影响应该做到足够小、数据分析快、性能占用小;

  • 对代码的非侵入性,减少开发的维护成本;

  • 监控、分析的维度尽可能多。

目前市面上的全链路监控工具很多,比如 CAT、SkyWalking、Pinpoint 等,对于工具的选型来说最重要的是采样数据对系统的性能消耗足够小、数据分析和展示快、监控的维度尽可能丰富,简单比较下这几个工具。

  • CAT:是由美团和携程的同学开发的,通过代码埋点的侵入式方式,对应用日志分析、监控、展示等,不过侵入式的方式会带来开发以及维护成本的增加。

  • SkyWalking:也是由国人开发,目前项目已经提交到 Apache 孵化组织,无侵入性、UI 展示简洁清晰。

  • Pinpoint:由韩国人开发,相对于 SkyWalkingg 提供了更为详尽的链路监控信息,不过数据采集带来的性能损耗相对于 SkyWalking 来说比较大。

三、SkyWalking模块分析

先来看下 SkyWalking 的组件示意图:

1、SkyWalking部署安装

首先下载 SkyWalking 安装包并进行解压:

bash 复制代码
wget https://github.com/apache/SkyWalking/archive/v8.0.1.tar.gz

tar -zxvf v8.0.1.tar.gz

解压后可以看到如下文件夹:

(1)修改配置文件

修改配置文件 config/application.yml。在这里先进行数据库的配置,使用当前服务器上的 mysql 来进行存储:

yml 复制代码
    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}

修改完成后,启动服务。

shell 复制代码
$ bin/oapService.sh

SkyWalking OAP started successfully!

(2)SkyWalking UI配置

接着来看 SkyWalking UI 的相关配置,由于 SkyWalking UI 的默认端口是 8080,这个端口是很多应用的默认端口,容易产生冲突,可以修改一下,如下所示:

yaml 复制代码
# 修改webapp/webapp.yml

server:

  port: 18080

UI界面启动成功后示意图如下:

(3)启动微服务

bash 复制代码
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监控体系后,如果服务遇到超时、访问错误时,我们如何能快速接收到报警信息呢?有哪些报警方式可以使用呢?欢迎继续关注。

文章将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

相关推荐
架构师沉默4 小时前
程序员如何避免猝死?
java·后端·架构
椰奶燕麦4 小时前
Windows PackageManager (winget) 核心故障排错与通用修复指南
后端
zjjsctcdl5 小时前
springBoot发布https服务及调用
spring boot·后端·https
zdl6866 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情6 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player6 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明6 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
武超杰6 小时前
Spring Boot入门教程
java·spring boot·后端
IT 行者7 小时前
Spring Boot 集成 JavaMail 163邮箱配置详解
java·spring boot·后端
gelald7 小时前
JVM - 运行时内存模型
java·jvm·后端