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

    下线一个服务,查看邮箱

    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    (二分查找 拓展) leetcode 69. Sqrt(x)
    (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
    (链表) lintcode 219. Insert Node in Sorted Linked List
    (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
    (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
    (字符串 数组 递归 双指针) leetcode 344. Reverse String
    (二叉树 DFS 递归) leetcode 112. Path Sum
    (二叉树 DFS 递归) leetcode 101. Symmetric Tree
    (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
    (二叉树 递归 DFS) leetcode 100. Same Tree
  • 原文地址:https://www.cnblogs.com/YC-L/p/14532801.html
Copyright © 2011-2022 走看看