简便快速的完成对分布式系统的监控;

一、业务背景

微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一些核心的业务流程,其请求链路会涉及到多个业务服务,少则三五个,多则十几个都很常见:

真实的业务场景远比图解复杂,在这种模式下当请求发生故障时,或者进行优化时,需要分析链路性能,追踪调用链路,排查和解决链路故障;

要完成上述流程,需要对请求的链路有完整监控,并且采集和分析各个环节的数据,这样才能清晰的理解系统的行为信息,比如耗时分析,故障原因发现,从而进行优化和解决;能实现这种能力的组件很多,这里来看看基于SkyWalking9的实践方式;

二、组件原理

Skywalking是APM规范的国产开源分布式链路追踪系统,APM(Application-Performance-Management)即应用性能管理,支持对SpringCloud微服务集成,并且无代码层面的侵入:

结构体系

业务机制

SpringCloud:分布式系统中的服务,启动时配置代理即可;

Agent:以探针的方式进行请求链路的数据采集,并向管理服务上报;

OAP-Service:接收数据,完成数据的存储和展示;

Storage:数据的存储层,支持ElasticSearch、Mysql、H2多种方式;

UI界面:数据的可视化展示界面;

工作流程,服务通过探针的方式接入数据采集的功能,之后请求链路的相关处理行为会上报到OAP服务中,进行数据的聚合管理和分析,并存储在持久层,然后可以通过UI界面进行可视化呈现;

三、安装部署

1、版本描述

skywalking在之前的旧版本中,apm与agent是在一个包中的,在9.0的版本中是需要分开下载的;agent包下载解压之后,也将其放到apm包下面维护:

  • skywalking-apm-9.1.0.tar.gz
  • skywalking-java-agent-8.10.0.tgz

2、配置存储方式

Skywalking数据存储的组件有多种选型方式,这里方便本地调试,就选择MySQL数据库,在生产环境中通常选择ElasticSearch组件;

配置文件:config/application.yml

storage:
selector: ${SW_STORAGE:mysql}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true"}
dataSource.user: ${SW_DATA_SOURCE_USER:username}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:password}

需要注意的是,要在本地的MySQL中新建swtest数据库,采用latin1字符编码,可以避免索引长度的问题,表的创建是自动的,然后需要在包中添加MySQL依赖;

3、启动与停止

  • 启动oap服务:sh bin/oapService.sh
  • 启动UI界面:sh bin/webappService.sh
  • 服务停止命令:jps查看,kill相关编号;

UI界面服务默认是8080端口,如果存在占用问题,可以修改:webapp/webapp.yml文件,更换端口;启动完成后访问LocalIP:port即可;

4、服务集成

在本地存在gatewayfacadeaccount,三个服务,案例围绕account服务中的请求展开,由于涉及网关服务,还需要添加相关插件的依赖;

optional-plugins可选插件目录中的两个网关的依赖包,复制到plugins插件目录下;

在服务启动类中添加agent配置,如果在生产环境中,通常会统一在脚本中设置,由于在本地环境演示,基于IDEA工具进行管理;

-javaagent:本地路径/agent/skywalking-agent.jar -Dskywalking.agent.service_name=gateway
-javaagent:本地路径/agent/skywalking-agent.jar -Dskywalking.agent.service_name=facade
-javaagent:本地路径/agent/skywalking-agent.jar -Dskywalking.agent.service_name=account

这样全部的配置就完成了,依次启动skywalking相关服务,与这里配置的三个微服务,下面再来看看功能细节;

四、功能细节

1、服务监控

相关服务启动完成后,访问skywalking界面,主页加载的即上述配置的三个微服务,这样说明整个流程是正常的,点击服务名称可以查看服务相关的细节指标;

2、拓补结构图

请求通过gateway网关服务,经过facade门面服务,到达account业务服务,完成一次调用后,查看请求的拓补结构图(即Topology一栏);

可以清晰的看到请求的路由链路,以及相关服务访问的数据库地址,对于微服务架构中的复杂接口来说,借助该拓补模型,既可以快速理解业务逻辑,同时在出具文档时可以节省很多画图时间;

3、链路跟踪

上面只是请求的拓补结构图,在实际应用中还是更侧重链路跟踪,查看account服务请求链路(即Trace一栏);

skywalking组件对于开发来说,最常用的就是该功能,这里采集了请求链路上的各个节点,以及执行的耗时分析,点击相关节点可以查看详细信息,针对异常请求同样可以采集到异常信息的描述;

这样可以极大的提升问题排查的效率,尤其对于那种路由十多个服务的业务逻辑;

4、数据库监控

虽然在整个配置中没有显式的添加对MySQL的监控,但是skywalking依旧可以实现对服务中的数据库监控,对于这些指标细节不过多描述,可以自行查阅文档;

本篇文章只是站在开发的角度,总结skywalking的应用方式,并未涉及过多的细节原理,其它强大的功能设计,对于开发来说同样值得参考。

五、源码参考

应用仓库:
https://gitee.com/cicadasmile/butte-flyer-parent 组件封装:
https://gitee.com/cicadasmile/butte-frame-parent

监控平台SkyWalking9入门实践的更多相关文章

  1. 京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践

    1. 为什么需要一个前端监控系统 通常在一个大型的 Web 项目中有很多监控系统,比如后端的服务 API 监控,接口存活.调用.延迟等监控,这些一般都用来监控后台接口数据层面的信息.而且对于大型网站系 ...

  2. 《开源安全运维平台OSSIM最佳实践》

    <开源安全运维平台OSSIM最佳实践> 经多年潜心研究开源技术,历时三年创作的<开源安全运维平台OSSIM最佳实践>一书即将出版.该书用80多万字记录了,作者10多年的IT行业 ...

  3. 大众点评开源分布式监控平台 CAT 深度剖析

    一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报 ...

  4. Cacti+Nagios监控平台完美整合

    Cacti+Nagios监控平台完美整合 本博文出自51CTO博客吴光科博主,有任何问题请进入博主页面互动讨论!博文地址:http://wgkgood.blog.51cto.com/1192594/1 ...

  5. 携程实时计算平台架构与实践丨DataPipeline

    文 | 潘国庆 携程大数据平台实时计算平台负责人 本文主要从携程大数据平台概况.架构设计及实现.在实现当中踩坑及填坑的过程.实时计算领域详细的应用场景,以及未来规划五个方面阐述携程实时计算平台架构与实 ...

  6. 性能测试监控平台:InfluxDB+Grafana+Jmeter

    前面的博客介绍了InfluxDB.Telegraf.Grafana的安装和使用方法,这篇博客,介绍下如何利用这些开源工具搭建性能测试监控平台... 前言 性能测试工具jmeter自带的监视器对性能测试 ...

  7. Kubernetes集群的监控报警策略最佳实践

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79652064 本文为Kub ...

  8. TOP100summit:【分享实录-Microsoft】基于Kafka与Spark的实时大数据质量监控平台

    本篇文章内容来自2016年TOP100summit Microsoft资深产品经理邢国冬的案例分享.编辑:Cynthia 邢国冬(Tony Xing):Microsoft资深产品经理.负责微软应用与服 ...

  9. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)

    目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...

随机推荐

  1. 5-7 分页查询PageHelper

    1. PageHelper实现分页查询 Day08 1.1 PH作用: PageHelper框架可以实现我们提供页码和每页条数, 自动实现分页效果,收集分页信息 1.2 PH原理: PageHelpe ...

  2. MLX90640 红外热成像仪测温模块简要介绍说明

    MLX90640 红外热成像仪测温模块简要介绍说明 (1) A 型和 B 型的区别 区别主要有以下几点 视场角不同: A 型为 110*75° , B 型为 55*35° ,通俗一点讲就是 A 型是广 ...

  3. 什么是FastAPI异步框架?(全面了解)

    一:FastAPI框架 1.FastAPI是应该用于构建API的现代,快速(高性能)的 web 框架,使用Python 3.6+ 并基于标准的 Python 类型提示. 关键性: 快速: 可与Node ...

  4. Node.js精进(11)——Socket.IO

    Socket.IO 是一个建立在 WebSocket 协议之上的库,可以在客户端和服务器之间实现低延迟.双向和基于事件的通信. 并且提供额外的保证,例如回退到 HTTP 长轮询.自动重连.数据包缓冲. ...

  5. NFS配置-实现多服务器共享目录

    NFS网络文件系统 为什么要用NFS? 前端所有的应用服务器接收到用户上传的图片.文件.视频,都会统一放到后端的存储上.共享存储的好处:方便数据的查找与取出,缺点:存储服务器压力大,坏了丢失全部数据. ...

  6. DateFormat类的format方法和parse方法

    /** * 使用DateFormat类中的方法format,把日期格式化为文本 * String format(Date date) 按照指定的模式把Date日期格式化为符合模式的字符串 * 使用步骤 ...

  7. 20220727-Java中方法重写override

    目录 代码示例 注意事项 代码示例 public class OverrideExercise { public static void main(String[] args) { Person ja ...

  8. 【AGC】开放式测试示例

    前言:这一次我们来带大家进入AGC领域,学习AGC相关的知识.所谓AGC就是AppGallery Connect的简称,为用户的应用进行创意.开发.分发.运营.经营各环节提供一站式服务,说的通俗一点, ...

  9. 搞定面试官 - MySQL 中你知道如何计算一个索引的长度嘛?

    大家好,我是程序员啊粥. 今天给大家分享一个我遇到过的比较少见的面试题,那就是 MySQL 中如何计算一个索引的长度. 说实话,我第一次遇到这个问题的时候想当然的以为索引长度就是我们建表时定义的字段长 ...

  10. 【MySQL】从入门到精通5-一对多-外键

    上期:[MySQL]从入门到掌握4-主键与Unique 第一章:创建角色表 啥是一对多啊? 一个账号可以有多个角色,但是一个角色只能属于一个账号. 举个例子,我们之前创建的是玩家的账号数据库. 但是一 ...