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

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

相关推荐
lucifer3112 小时前
线程池与最佳实践
java·后端
程序员大金3 小时前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
程序员大金3 小时前
基于SpringBoot的旅游管理系统
java·vue.js·spring boot·后端·mysql·spring·旅游
Pandaconda3 小时前
【计算机网络 - 基础问题】每日 3 题(十)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
程序员大金4 小时前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
customer084 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Ylucius4 小时前
JavaScript 与 Java 的继承有何区别?-----原型继承,单继承有何联系?
java·开发语言·前端·javascript·后端·学习
ღ᭄ꦿ࿐Never say never꧂5 小时前
微服务架构中的负载均衡与服务注册中心(Nacos)
java·spring boot·后端·spring cloud·微服务·架构·负载均衡
.生产的驴5 小时前
SpringBoot 消息队列RabbitMQ 消息确认机制确保消息发送成功和失败 生产者确认
java·javascript·spring boot·后端·rabbitmq·负载均衡·java-rabbitmq