zoukankan      html  css  js  c++  java
  • 链路追踪

    链路追踪

    分布式计算八大误区

    • 网络可靠
    • 延迟为零
    • 带宽无限
    • 网络绝对安全
    • 网络拓扑不会改变
    • 必须有一名管理员
    • 传输成本为零
    • 网络同质化(操作系统,协议)

    链路追踪的必要性

    如果能跟踪每个请求,中间请求经过哪些微服务,请求耗时,网络延迟,业务逻辑耗时

    我们就能更好地分析系统瓶颈、解决系统问题,因此链路跟踪很重要

    我们自己思考解决方案:在调用前后加时间戳,捕获异常

    链路追踪目的

    解决错综复杂的服务调用中链路的查看,排查慢服务

    市面上链路追踪产品,大部分基于google的Dapper论文

    • zipkin,twitter开源的,是严格按照谷歌的Dapper论文来的。
    • pinpoint 韩国的 Naver公司的。
    • Cat 美团点评的
    • EagleEye 淘宝的

    链路追踪要考虑的几个问题

    • 探针的性能消耗,尽量不影响 服务本尊
    • 易用,开发可以很快接入,别浪费太多精力
    • 数据分析,要实时分析,维度足够

    Sleuth简介

    Sleuth是Spring cloud的分布式跟踪解决方案

    span(跨度),基本工作单元,一次链路调用创建一个span

    span用一个64位id唯一标识

    包括

    • id
    • 描述
    • 时间戳事件
    • spanId,span父id

    span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等

    trace(跟踪)

    • 一组共享“root span”的span组成的树状结构称为trace,trace也有一个64位ID,trace中所有span共享一个trace id
    • 类似于一颗span树

    annotation(标签),annotation用来记录事件的存在

    其中,核心annotation用来定义请求的开始和结束

    • CS(Client Send客户端发起请求),客户端发起请求描述了span开始。
    • SR(Server Received服务端接到请求),服务端获得请求并准备处理它
    • SR-CS=网络延迟
    • SS(Server Send服务器端处理完成,并将结果发送给客户端),表示服务器完成请求处理,响应客户端时
    • SS-SR=服务器处理请求的时间。
    • CR(Client Received 客户端接受服务端信息),span结束的标识,客户端接收到服务器的响应
    • CR-CS=客户端发出请求到服务器响应的总时间

    其实数据结构是一颗树,从root span开始

    Sleuth单独使用

    每个需要监控的系统

    <!-- 引入sleuth依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>

    示例日志

    • [api-driver,1a409c98e7a3cdbf,1a409c98e7a3cdbf,true]
    • [服务名称,traceId(一条请求调用链中 唯一ID),spanID(基本的工作单元,获取数据等),是否让zipkin收集和展示此信息]

    看下游

    • [service-sms,1a409c98e7a3cdbf,b3d93470b5cf8434,true]
    • traceId, 是一样的

    zipkin

    zipkin是twitter开源的分布式跟踪系统。

    原理收集系统的时序数据,从而追踪微服务架构中系统延时等问题,还有一个友好的界面

    由4个部分组成:

    Collector、Storage、Restful API、Web UI组成

    采集器,存储器,接口,UI

    原理

    • sleuth收集跟踪信息通过http请求发送给zipkin server
    • zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示
    • 默认内存存储,可以用mysql,ES等存储

    官方地址:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-zipkin

    添加依赖

    <!-- zipkin -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>

    每个需要监听的服务的pom中添加

    每个需要监听的服务yml中

    spring:
        #zipkin
        zipkin:
            base-url: http://localhost:9411/
        #采样比例1
        sleuth:
            sampler:
            rate: 1 

    启动zipkin

    jar包下载

    curl -sSL https://zipkin.io/quickstart.sh | bash -s

    启动

    java -jar zipkin.jar

    或者docker

    docker run -d -p 9411:9411 openzipkin/zipkin

    测试点:

    访问zipkin:http://localhost:9411/zipkin/

    启动eureka,制造一次熔断,看看zipkin,停止路由,访问,会看到变红

    zipkin:最好和rabbitmq,mysql配合使用

    健康检查

    官方地址

    admin服务:https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-server

    admin界面:https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-server-ui

    添加依赖

    <!-- Admin 服务 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
    </dependency>
    <!-- Admin 界面 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-server-ui</artifactId>
    </dependency>

    每个需要监控的服务都添加

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    yml

    management:
        endpoints:
            web:
                exposure:
                #yml加双引号,properties不用加
                include: "*" 
        health: 
        ##默认是never
        show-details: ALWAYS 
        enabled: true

    访问server

    http://localhost:6010/

    邮件监控 ,在admin组件中

    官方地址:https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail

    添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    yml

    spring: 
        application: 
            name: cloud-admin
        security:
            user:
            name: root
            password: root
        # 邮件设置
        mail:
            host: smtp.qq.com
            username: 单纯QQ号
            password: xxxxxxx授权码
        properties:
            mail: 
            smpt: 
            auth: true
            starttls: 
            enable: true
            required: true
    #收件邮箱
    spring.boot.admin.notify.mail.to: ******@qq.com  
    # 发件邮箱
    spring.boot.admin.notify.mail.from: xxxxxxx@qq.com

    下线一个服务,查看邮箱

    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    jdbc连接Sql server数据库,并查询数据
    HttpClient,post请求,发送json,并接收数据
    SQL SERVER存储过程一
    HttpClient,get请求,发送并接收数据
    工作中操作数据库实例
    存储过程的实例(公司)
    eclipse发布项目后,项目所在的位置
    SQLSERVER存储过程基本语法
    SAXReader解析
    导包
  • 原文地址:https://www.cnblogs.com/YC-L/p/14532801.html
Copyright © 2011-2022 走看看