资讯专栏INFORMATION COLUMN

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

April / 963人阅读

摘要:简单理解一个完整的调用链包含无限极分类追踪对象,一个代表了一个服务或者流程在系统中的执行过程,如,,等执行过程。无限极分类服务与服务之间使用无限极分类的方式,通过头部或者请求地址传输到最低层,从而把整个调用链串起来。

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

前言

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

分布式系统调用过程

opentracing 协议

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

简单理解opentracing

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

Trace:追踪对象,一个Trace代表了一个服务或者流程在系统中的执行过程,如:test.com,redis,mysql等执行过程。一个Trace由多个span组成

span:记录Trace在执行过程中的信息,如:查询的sql,请求的HTTP地址,RPC调用,开始、结束、间隔时间等。

无限极分类:服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。

相关文档

官方文档

OpenTracing语义规范(中文版)

OpenTracing语义惯例

opentracing文档中文版 ( 翻译 ) 吴晟

分布式追踪系统Jaeger

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

作用

分布式环境下信息传播

分布式交易监控

展示跨进程调用链

性能优化

定位问题

特性

使用udp传输数据,相对于HTTP,优点在于,不用担心Jaeger服务宕机或者网络传输有问题而影响正常的业务。缺点就是丢包,影响了整条调用链。

数据通过Thrift进行序列化,和json对比

接口 Thrift/byte json/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 官方提供了多种采集策略,使用者可以按需选择使用

ConstSampler,全量采集

ProbabilisticSampler ,概率采集,默认万份之一

RateLimitingSampler ,限速采集,每秒只能采集一定量的数据

RemotelyControlledSampler ,一种动态采集策略,根据当前系统的访问量调节采集策略

客户端

Go

Java

node

python

php

官方提供了 go,java,node,python客户端,其他客户端还在开放中,php客户端为个人开发【欢迎star】

部署 快速部署 ------ 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_examples
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

跨语言调用案例

php

Hprose

Go【beego】

beego

install beego

go get github.com/astaxie/beego

Download trace_example

git clone git@github.com:jukylin/trace_example.git
cd  trace_example
bee run trace_example
PHP

install jaeger-php

Run Hprose.php

cd vendor/jukylin/jaeger-php/example
php Hprose.php
Trace Result View

PS

优步分布式追踪技术再度精进

Jaeger还在发展中,官方也希望得到社区的支持。

Jaeger和Jaeger-php,在公司测试环境运行了1个多月,于2017-10-18发布上线。

选择好采集策略,日志数据会爆炸性增长。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30681.html

相关文章

  • 开放布式追踪(OpenTracing)入门与 Jaeger 实现

    摘要:是推出的一款开源分布式追踪系统,兼容。借助阿里云日志服务的海量数据处理能力,让您享受在分布式追踪领域给您带来便捷的同时无需过多关注后端存储系统的问题。部分仅提供查询展示的功能,对分析问题排查问题支持不足。 摘要: 分布式系统的运维挑战 容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中,可以看到两个变化: 应用架构开始从单体系统逐步转变为微服务...

    shadowbook 评论0 收藏0
  • 后端常用开源组件合集(持续更新中)

    摘要:常用库开源库集合编码规范编码规范建议敏捷开发工具用于实践敏捷开发的看板数据分析类似于分析的项目框架开源的框架,基于跨语言百度开源的框架腾讯开源的框架阿里开源的框架,国内圈很火分布式协调系统简单来说就是一个实现的强一致的存 1. 常用库 awesome - golang开源库集合 2. 编码规范 cppguide - C++编码规范CodeReviewComments - go code...

    宠来也 评论0 收藏0
  • 这么多监控组件,总有一款适合你

    摘要:典型实现不同的监控模块,侧重于不同领域,有着不同的职责。指标收集方面,支持多样化的组件将被优先下使用。以上谈了这么多,仅仅是聊了一下收集方面而已。 更多文章,请移步微信公众号《小姐姐味道》 mp原文 https://mp.weixin.qq.com/s?__...监控是分布式系统的必备组件,能够起到提前预警、问题排查、评估决策等功效,乃行走江湖、居家必备之良品。 监控系统概要 功能划分...

    simon_chen 评论0 收藏0
  • 这么多监控组件,总有一款适合你

    摘要:典型实现不同的监控模块,侧重于不同领域,有着不同的职责。指标收集方面,支持多样化的组件将被优先下使用。以上谈了这么多,仅仅是聊了一下收集方面而已。 更多文章,请移步微信公众号《小姐姐味道》 mp原文 https://mp.weixin.qq.com/s?__...监控是分布式系统的必备组件,能够起到提前预警、问题排查、评估决策等功效,乃行走江湖、居家必备之良品。 监控系统概要 功能划分...

    wpw 评论0 收藏0
  • 华尔街见闻基于istio的服务网格实践

    摘要:,托管于腾讯云容器平台容器编排工具。适配我们目前的服务部署在腾讯云托管,节点使用核的网络增强型机器,所有的后端服务都以部署,集群外部署高可用支持集群内服务发现,数据库以为主,消息队列采用。 距离2017年的见闻技术架构调整接近2年,随着业务线的发展,见闻技术部的项目数量、项目架构类型、基础设施规模、服务变更频率都在不断地增长,带给SRE的挑战是如何能更快地助力于开发人员更快更稳定地部署...

    stonezhu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<