分布式跟踪系统Jaeger(一):Jaeger简介和示例应用HotROD

分布式跟踪系统Jaeger(一):Jaeger简介和示例应用HotROD

2017-11-18
Jaeger, Tracing

当使用微服务构建我们的程序时,客户端的一次请求会产生大量服务调用,包括服务和数据库等中间件的调用。 由单体应用迁移至微服务时,服务间调用的延迟是我们需要面对的一个问题。为了定位每次调用过程中的延迟问题和性能瓶颈,我们需要知道客户端一次请求所经历的过程,分别调用了哪些服务,调用每个服务花费的时长,以及调用每个服务花费的时长,这些将会成为我们性能调优的参考。因此,分布式追踪系统是微服务架构中不可缺少的一部分。

1.Jaeger简介 #

Jaeger是Uber开源的分布式跟踪系统,现在已经成为CNCF的开源项目,其灵感来源于Google的Dapper和twitter的Zipkin,从2016年开始该系统在Uber内部得到了广泛的应用。

Jaege在设计上参考了Google的Dapper。Dapper是Google内部大规模分布式追踪系统。关于Dapper的内容可以参考Google的论文:

本篇博文的主要目的是基于Jaeger官方的all-in-one docker镜像和示例应用HotRod快速体验一下Jaeger。

2.Jaeger Docker All in one容器 #

jaeger提供了一个all in one的docker镜像,主要用来体验和测试。这个镜像内包含了query, collector, agent, memory storage等组件。

下面启动jaeger docker all in one容器:

1docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
2  -p5775:5775/udp \
3  -p6831:6831/udp \
4  -p6832:6832/udp \
5  -p5778:5778 \
6  -p16686:16686 \
7  -p14268:14268 \
8  -p9411:9411 \
9  jaegertracing/all-in-one:latest

上面启动jaeger容器暴露了很多端口:

端口号协议组件功能
5775UDPagent通过thrift的compact协议接收zipkin.thrift数据
6831UDPagent通过thrift的compact协议接收jaeger.thrift数据
6832UDPagent通过thrift的binary协议接收jaeger.thrift数据
5778HTTPagent服务配置接口
16686HTTPwebJaeger Web UI的端口
9411HTTPcollector兼容zipkin的http端点

容器启动后使用下面的的地址访问jaeger webui: http://<hostip>:16686

3.HotROD示例应用 #

jaeger是使用go语言开发的,HotRod的示例应用位于jaeger源码的examples目录下。

运行HotROD示例应用:

1go get github.com/jaegertracing/jaeger
2cd $GOPATH/src/github.com/jaegertracing/jaeger
3make install
4cd examples/hotrod
5go run ./main.go all

HotROD示例应用是由frontend, customer, driver, route四个微服务组成的,当前HotROD的源码中这些服务默认监听的是127.0.0.1地址, 如果是在服务器上运行HotROD应用的话,可以修改以下HotROD源码中的监听地址。

frontend微服务监听的端口是8080,使用http://<hostip>:8080打开HotROD应用.

点击HotRod页面中的几个按钮进行基本的使用,此时在jaeger webui中就可以查询到收集到的跟踪数据。

参考 #

© 2024 青蛙小白