分布式跟踪系统Jaeger(一):Jaeger简介和示例应用HotROD
2017-11-18
当使用微服务构建我们的程序时,客户端的一次请求会产生大量服务调用,包括服务和数据库等中间件的调用。 由单体应用迁移至微服务时,服务间调用的延迟是我们需要面对的一个问题。为了定位每次调用过程中的延迟问题和性能瓶颈,我们需要知道客户端一次请求所经历的过程,分别调用了哪些服务,调用每个服务花费的时长,以及调用每个服务花费的时长,这些将会成为我们性能调优的参考。因此,分布式追踪系统是微服务架构中不可缺少的一部分。
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容器暴露了很多端口:
端口号 | 协议 | 组件 | 功能 |
---|---|---|---|
5775 | UDP | agent | 通过thrift的compact协议接收zipkin.thrift数据 |
6831 | UDP | agent | 通过thrift的compact协议接收jaeger.thrift数据 |
6832 | UDP | agent | 通过thrift的binary协议接收jaeger.thrift数据 |
5778 | HTTP | agent | 服务配置接口 |
16686 | HTTP | web | Jaeger Web UI的端口 |
9411 | HTTP | collector | 兼容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中就可以查询到收集到的跟踪数据。