一、了解分布式架构下系统的监控问题

接口监控问题
监测性能瓶颈
解决方案:Sleuth
日志监控问题
日志分散
解决方案:ELK+Kafka

二、使用Sleuth实现大觅网微服务跟踪

1.打开一个分布式项目dm-item-provider,启动,未加sleuth分布式日志时是这样的:

2.在dm-item-provider的pom中添加sleuth依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId><version>1.2.5.RELEASE</version>
</dependency>

3.修改配置文件
修改dm-item-provider项目的application.yml文件,在其中设置日志级别为info

logging:level: info

4.再次启动比较日志区别,名称变得详细。

5.打开项目dm-item-consumer,添加sleuth依赖,添加logging:info,即重复3、4操作。
启动dm-item-consumer。
6.选一个接口在postman进行请求测试,查看日志输出效果:
获取到了一段较为详尽的日志信息。

三、Spring Cloud Sleuth 整合Zipkin

问题:但是,刚才的日志输出好像用处并不显而易见。
解决:sleuth整合有可视化界面的zipkin。
Zipkin介绍:开源、数据追踪系统
1.创建springboot项目,指定artifactId为dm-sleuth-server
2.pom降版本,添加依赖zipkin-server和zipkin-autoconfigure-ui

<dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-server</artifactId>
</dependency>
<dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

3.启动类添加注解@EnableZipkinServer
4.application.yml配置服务端口为7700

server:port: 7700

5.启动项目dm-sleuth-server,查看监控http://localhost:7700/,可以看到zipkin的界面

四、微服务整合Zipkin

刚才只能看到zipkin的界面,但是并没有项目信息,接下来进行zipkin的配置。
1.添加依赖
分别为dm-item-consumer、dm-item-provider添加依赖sleuth和zipkin。

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId><version>1.2.5.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

2.修改配置
分别修改dm-item-consumer、dm-item-provider 的application.yml,在其中指定Zipkin Server地址和采样率

spring:sleuth:sampler:percentage: 1.0zipkin:base-url: http://localhost:7700

注意:在开发、测试中配置文件中的spring.sleuth.sampler.percentage属性设置为1.0,代表100%采样,否则可能会忽略掉大量span,可能看不到想要查看的请求
3.重启provider和consumer,刷新zipkin网页,可查看到产生如下数据内容:
可设置请求时间段,单击find traces进行日志追踪。

五、使用消息中间件RabbitMQ收集数据,Zipkin Server整合消息中间件

问题产生:
收集跟踪数据是使用HTTP请求的方式,带来的问题:
耦合性,都需要连接到Zipkin Server
不稳定性,网络出现问题就无法保证收集到跟踪数据。
(之前是通过http传输,http不稳定所以要先给MQ。)

问题解决:
可以使用消息中间件解决。
先将需要收集的数据发送到消息中间件中,然后Zipkin Server再从消息中间件取出数据分析。
这里使用RabbitMQ。

1.在dm-sleuth-server项目中添加依赖zipkin-autoconfigure-ui、sleuth-zipkin-stream、stream-binder-rabbit

<dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId><version>1.2.1.RELEASE</version>
</dependency>

2.在dm-sleuth-server项目中修改启动类注解
将@EnableZipkinServer改为@EnableZipkinStreamServer
3.在dm-sleuth-server项目中修改配置文件
配置RabbitMQ的服务地址和账号
4.分别为dm-user-consumer、dm-user-provider添加依赖
只保留以下依赖sleuth、sleuth-stream、stream-binder-rabbit。starter-zipkin要删掉。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId><version>1.2.5.RELEASE</version>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-stream</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId><version>1.2.1.RELEASE</version>
</dependency>

5.修改配置
在dm-item-consumer、dm-item-provider项目的application.yml中删除Zipkin Server连接配置。
在dm-item-consumer、dm-item-provider项目的application.yml中增加RabbitMQ的连接配置。

#  zipkin:
#    base-url: http://localhost:7700rabbitmq:host: 192.168.9.151port: 5672username: guestpassword: guest

6.启动虚拟机Ubuntu,访问到RabbitMQ可视化界面。

7.依次重启sleuth-server、provider和consumer。
发现刚才请求接口后在zipkin页面展示的接口信息不在了。

但是,再次访问接口后,zipkin会又有数据,相应的RabbitMQ中也有请求队列:

六、存储跟踪数据

如上,如果sleuth宕机重启,访问接口的数据将丢失。

问题产生:数据丢失
前文示例中Zipkin Server都是将数据保存在内存中,重启Zipkin Server后就不能查看到之前的数据了。

问题解决:数据持久化存储
MySQL
Elasticsearch

使用MySQL存储跟踪数据

1.添加依赖
在以上基础上改造Zipkin Server,为dm-sleuth-server添加数据库依赖

        <dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-storage-mysql</artifactId><version>1.16.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

2.创建数据库:dm_zipkin
使用官方脚本创建表:
https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

创建完毕,数据库中会多出三张空表:

3.修改配置文件
在dm-sleuth-server中添加关于数据库的配置
指定存储方式为MySQL

  datasource:url: jdbc:mysql://rm-bp176tlu16kkssrkkco.mysql.rds.aliyuncs.com:3306/dm_zipkin?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&useSSL=trueusername: rootpassword: 11111driver-class-name: com.mysql.jdbc.Driver
zipkin:storage:type: mysql

4.依次重启sleuth-server、provider和consumer。
zipkin中没有数据,再次访问接口,zipkin中有了数据。
数据库表dm_zipkin.zipkin_annotations中也有了数据:

sleuth-server模拟宕机重启,直接到zipkin刷新,刚才的请求接口信息仍旧在。
通过使用分布式日志sleuth,分布式追踪系统zipkin,消息中间件rabbitMQ,使用MySQL存储跟踪数据后,成功实现消息宕机不丢失。

分布式日志sleuth+分布式追踪系统zipkin+消息中间件rabbitMQ+MySQL存储跟踪数据相关推荐

  1. dubbo分布式日志调用链追踪

    一.背景 任何系统都无法100%保证不出错误,线上系统报错之后,首先要做的就是在第一时间内找出问题,解决问题,定位线上问题最主要的途径就是看日志. 在单模块下根据日志排查问题,只需要直接搜索关键字就能 ...

  2. 分布式链路监控与追踪系统(SpringCloud Sleuth + Zipkin)

    一.分布式链路监控与追踪产生背景 在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂.一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这 ...

  3. 【Spring Cloud Alibaba 温故而知新】(五)SpringCloud Sleuth + Zipkin:分布式日志追踪

    目录 8.1.1 SpringCloud Sleuth 是什么 SpringCloud Sleuth 必知必会 SpringCloud Sleuth 实现的功能是:它会自动为当前应用构建起各通信通道的 ...

  4. 原来10张图就可以搞懂分布式链路追踪系统原理

    分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务.服务内缓存变为分布式缓存.服务 ...

  5. 分布式追踪系统的对比、实现与使用—NodeTracing

    前言 现状 各类trace解决方案 各大厂商trace系统对比 NodeTracing概览 NodeTracing使用 下载 快速开始&单例启动 生产部署&集群启动 安装自动探针 探针 ...

  6. 快狗打车CTO沈剑:低成本搞定分布式调用链追踪系统

    本文根据沈剑老师在[2020 Gdevops全球敏捷运维峰会]现场演讲内容整理而成. 讲师介绍 沈剑,到家集团技术VP&技术委员会主席,快狗打车CTO,互联网架构技术专家,"架构师之 ...

  7. 调用链追踪系统在伴鱼:理论篇

    本文将调用链追踪系统的设计维度归结于以下 5 个:调用链数据模型.元数据结构.因果关系.采样策略以及数据可视化.我们可以把这 5 个维度当作一个分析框架,用它帮助我们在理论上解构市面上任意一个调用链追 ...

  8. 2023基于微信小程序的校园第二课堂活动报名系统+后台管理系统(Springboot+mysql)-JAVA.VUE(论文+开题报告+运行)

    摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,基 ...

  9. SpringCloud 分布式链路追踪、分布式日志系统

    目录 概述 Zipkin的使用 搭建zipkin server zipkin dependencies 在服务中添加zipkin的相关配置 SkyWalking的使用 部署skywalking web ...

最新文章

  1. LeetCode简单题之词典中最长的单词
  2. 零基础学caffe源码 ReLU激活函数
  3. Intel Realsense D435 python 实战(二)
  4. 修改引入表打造穿透KIS6的下载者(转)
  5. jQuery Css方法
  6. SAP UI5 初学者教程之九 - 创建第一个 Component 的试读版
  7. Unity shader入门之数据类型
  8. c语言发牌小游戏,大家想想怎么用c实现我们经常玩的斗地主游戏的发牌过程呢?...
  9. (鬼刀)记一次异步加载Python爬虫分析
  10. 一个亿,啪一下就没了!
  11. 关于路由器配置直连路由和静态路由
  12. flink的流处理的source
  13. python实用库之schemdraw不只是绘制原理图
  14. 【每日力扣Leetcode】459-判断一个字符串是否由子字符串重复组成
  15. 在计算机操作中粘贴的快捷键是什么,复制粘贴的快捷键,详细教您电脑怎么使用快捷键复制粘贴...
  16. SiliconLab zigbee host移植到IPQ 807X平台
  17. 建站影视cms网站源码(含安装说明文档)
  18. WIN10DOS命令
  19. C# C++ 互操作:C++向C#输出不定长数组或指针的实现
  20. 电子信息类的就业前景真的不如计算机吗?

热门文章

  1. mysql压缩包安装教程_MySQL5.7压缩包安装教程
  2. 助力白纸一般的你面试——宏任务微任务
  3. 「网络安全」Web防火墙和下一代防火墙的区别
  4. C++ operator 简单使用
  5. 计算机专业jsp项目,可练手
  6. java poi导出excel,合并单元格
  7. houseoforange_hitcon_2016(House of orange, unsorted bin attack,FSOP)
  8. c++ getline()详解
  9. es like and or_广东生态所孙蔚旻团队ESamp;T发表利用稳定同位素示踪宏基因组分箱联用技术揭示砷污染土壤中的厌氧砷氧化微生物及其代谢途径...
  10. linux系统下(x86_64)安装jdk 1.6(jdk-6u45-linux-x64.bin)