zoukankan      html  css  js  c++  java
  • Uber分布式追踪系统Jaeger使用介绍和案例

    image

    原文:Uber分布式追踪系统Jaeger使用介绍和案例【PHP Hprose Go】

    前言

      随着公司的发展,业务不断增加,模块不断拆分,系统间业务调用变得越复杂,对定位线上故障带来很大困难。整个调用链不透明,犹如系统被蒙上一块黑纱,当线上遇到故障时,整个技术部就陷入痛苦的漩涡。这时候分布式追踪系统应运而生,如揭开了黑纱,让阳光照进黑暗。

    分布式系统调用过程

    image

    opentracing 协议

     opentracing是一套分布式追踪协议,与平台,语言无关,统一接口,方便开发接入不同的分布式追踪系统。

    image

    简单理解opentracing

    一个完整的opentracing调用链包含 Trace + span + 无限极分类

    • Trace:追踪对象,一个Trace代表了一个服务或者流程在系统中的执行过程,如:test.com,redis,mysql等执行过程。一个Trace由多个span组成
    • span:记录Trace在执行过程中的信息,如:查询的sql,请求的HTTP地址,RPC调用,开始、结束、间隔时间等。
    • 无限极分类:服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。

    相关文档

    分布式追踪系统Jaeger

    Jaeger是Uber开发的一套分布式追踪系统,已在Uber大规模使用。并在2017-9-13 加入CNCF 开源组织。使用Jaeger可以非常直观的展示整个分布式系统的调用链,由此可以很好发现和解决问题:

    image

    作用

    • 分布式环境下信息传播
    • 分布式交易监控
    • 展示跨进程调用链
    • 性能优化
    • 定位问题

    特性

    • 使用udp传输数据,相对于HTTP,优点在于,不用担心Jaeger服务宕机或者网络传输有问题而影响正常的业务。缺点就是丢包,影响了整条调用链。
    • 数据通过Thrift进行序列化,和json对比
    接口Thrift/bytejson/byte节省
    接口1 987 2396 约1.5倍
    接口2 1212 2916 约1.4倍
    接口3 12830 18893 约40%
    接口4 17158 22465 约24%
    接口5 11025 14282 约23%

     从中可以看出thrift相对json减少了不少空间。在我们采集公司接口的数据大小都集中在10~20k,所以使用thrift会更有优势。

    • 采集策略

    Jaeger 官方提供了多种采集策略,使用者可以按需选择使用

    1. ConstSampler,全量采集
    2. ProbabilisticSampler ,概率采集,默认万份之一
    3. RateLimitingSampler ,限速采集,每秒只能采集一定量的数据
    4. RemotelyControlledSampler ,一种动态采集策略,根据当前系统的访问量调节采集策略
    1. Go
    2. Java
    3. node
    4. python

    部署

    快速部署 ------ All in one Docker image

     all-in-one 是Uber官方打包好的镜像,可以直接部署使用,但是只能用于测试环境,不能用于线上,因为它把数据放入了内存。

    
    

        docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp

        >   -p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest


    通过 http://localhost:16686 可以在浏览器查看 Jaeger的后台

    官方提供的使用例子,需要go环境

    go get github.com/uber/jaeger
    cd $GOPATH/src/github.com/uber/jaeger
    make install
    cd examples/hotrod
    go run ./main.go all

    http://localhost:8080 浏览器打开查看

    cassandra + docker 部署,单机模式

    docker run -itd
    --name=cassandra -p9042:9042
    -v /data/cassandra:/var/lib/cassandra
    cassandra

    进入容器建立表空间

    按照官方脚本整理了一份建表语句jaeger_tables,进入cassandra,执行语句即可创建所需的表。

    keyspaces:jaeger_v1_dc

    运行 jaeger-query

    docker run -itd --network=bridge
    --name=jaeger-query
    -p16686:16686
    jaegertracing/jaeger-query
    /go/bin/query-linux
    --span-storage.type=cassandra
    --cassandra.keyspace=jaeger_v1_dc
    --cassandra.servers={{ cassandra }}:9042
    --query.static-files=/go/jaeger-ui/

    运行 jaeger-collector

    docker run -itd --network=bridge
    --name=jaeger-collector
    -p14267:14267
    -p14268:14268
    -p9411:9411
    jaegertracing/jaeger-collector
    /go/bin/collector-linux
    --span-storage.type=cassandra
    --cassandra.keyspace=jaeger_v1_dc
    --cassandra.servers={{ cassandra }}:9042

    运行 jaeger-agent

    docker run
    -itd --network=bridge
    --name=jaeger-agent
    -p5775:5775/udp
    -p6831:6831/udp
    -p6832:6832/udp
    -p5778:5778/tcp
    jaegertracing/jaeger-agent
    /go/bin/agent-linux --collector.host-port={{ jaeger-collector }}:14267

  • 相关阅读:
    高级查询query
    elasticsearch 复合查询
    第八篇 elasticsearch链接mysql自动更新数据库
    第七篇 elasticsearch 链接mysql不会更新
    第六篇 elasticsearch express 删除索引数据
    koa1创建项目
    第五篇 elasticsearch express插入数据
    hdu3594 Cactus
    hdu2767 Proving Equivalences
    loj2274 「JXOI2017」加法
  • 原文地址:https://www.cnblogs.com/mafeng/p/10120256.html
Copyright © 2011-2022 走看看