支持OpenTracing
的server
端有不少,咱们总要选一个。在这里,选用jaeger
。 jaeger
的开发较为活跃,支持的客户端实现也较多。因为采用了golang
开发,发行包也比较简洁。前端
jaeger的官网是 www.jaegertracing.io/java
jaeger的开发语言是`golang`
jaeger支持OpenTracing协议,同属于CNCF基金会
jaeger支持各类各样的客户端,包括Go、Java、Node、Python、C++等
jaeger支持udp协议传输,固然也支持http
复制代码
分布式事务监控
性能分析与性能优化
调用链,找到根源问题
服务依赖分析(需大数据分析)
复制代码
OpenTracing
Golang
ElasticSearch
Kafka (可选)
复制代码
jaeger是二进制发行包,使用wget下载便可,这里以linux版本为例。linux
wget -c https://github.com/jaegertracing/jaeger/releases/download/v1.11.0/jaeger-1.11.0-linux-amd64.tar.gz
复制代码
jaeger的二进制发行包包含五个二进制文件:git
jaeger-agent
jaeger-collector
jaeger-query
jaeger-standalone
jaeger-ingester
复制代码
若是没有执行权限,可使用github
chmod a+x jaeger-*
复制代码
增长执行权限。golang
trace数据总要存在一个地方。jaeger支持ES
和Canssandra
两种后端DB。国内用ES的多一点,咱们就以ES为例,来介绍其安装方式。后端
ES请先自行安装。性能优化
因为上面四个命令都有不少参数,因此咱们能够建立几个脚本,来支持jaeger的启动。bash
start-collector.sh
app
export SPAN_STORAGE_TYPE=elasticsearch
nohup ./jaeger-collector --es.server-urls http://10.66.177.152:9200/ --log-level=debug > collector.log 2>&1 &
复制代码
start-agent.sh
export SPAN_STORAGE_TYPE=elasticsearch
nohup ./jaeger-agent --collector.host-port=10.66.177.152:14267 --discovery.min-peers=1 --log-level=debug > agent.log 2>&1 &
复制代码
start-query.sh
export SPAN_STORAGE_TYPE=elasticsearch
nohup ./jaeger-query --span-storage.type=elasticsearch --es.server-urls=http://10.66.177.152:9200/ > query.log 2>&1 &
复制代码
jaeger有两种部署方式。下面一一介绍。若是你的数据量特别多,使用kafka缓冲一下也是能够的(因此就引入了另一个组件jaeger-ingester),很少作介绍。
这些环境的流量很小,一个agent是足够的。
更加简洁的部署方式,连agent都不须要,直接向collector发送数据便可。为了方便测试,咱们使用此方式。
这种方式的好处是生产环境的配置很是的简单。即便你的机器是混合部署的,也能正常收集trace信息。
jaeger的调用关系图是使用spark任务进行计算的。项目地址为:
https://github.com/jaegertracing/spark-dependencies
复制代码
做为一个可选部分,只有在计算完毕后,才能在jaeger的后台中进行展示。
Agent
5775 UDP协议,接收兼容zipkin的协议数据
6831 UDP协议,接收兼容jaeger的兼容协议
6832 UDP协议,接收jaeger的二进制协议
5778 HTTP协议,数据量大不建议使用
复制代码
它们之间的传输协议都是基于thrift封装的。咱们默认使用5775做为传输端口。
Collector
14267 tcp agent发送jaeger.thrift格式数据
14250 tcp agent发送proto格式数据(背后gRPC)
14268 http 直接接受客户端数据
14269 http 健康检查
复制代码
Query
16686 http jaeger的前端,放给用户的接口
16687 http 健康检查
复制代码
至此,咱们的jaeger就安装完毕。
以上,就是咱们的环境准备。有了一个server接收数据,调用链的主要工做就在于客户端开发。
接下来,将从一个简单的java程序提及,来讲明OpenTracing规范的使用方式。