Jaeger是Uber开发的一套分布式追踪系统,已在Uber大规模使用。
并加入CNCF 开源组织。使用Jaeger可以非常直观的展示整个分布式系统的调用链,由此可以很好发现和解决问题。
OpenTracing是分布式跟踪系统,当我们把系统拆成服务化,分布式系统的时候,查询一个问题,很可能需要多个登录多台机器。
OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。
OpenTracing正在为全球的分布式追踪,提供统一的概念和数据标准协议。
jaeger是这一协议的开源实现。
一个完整的opentracing调用链包含 Trace + span + 无限极分类
Trace:追踪对象,一个Trace代表了一个服务或者流程在系统中的执行过程,如:test.com,redis,mysql等执行过程。一个Trace由多个span组成。
span:记录Trace在执行过程中的信息,如:查询的sql,请求的HTTP地址,RPC调用,开始、结束、间隔时间等。
无限极分类:服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。
Jaeger的top结构:
数据直接存储top1
数据流式存储top2
jaeger-client-top
opentracing 协议:
opentracing是一套分布式追踪协议,与平台,语言无关,统一接口,方便开发接入不同的分布式追踪系统。
简单理解opentracing 一个完整的opentracing调用链包含 Trace + span + 无限极分类
Trace:追踪对象,一个Trace代表了一个服务或者流程在系统中的执行过程,如:test.com,redis,mysql等执行过程。一个Trace由多个span组成。
span:记录Trace在执行过程中的信息,如:查询的sql,请求的HTTP地址,RPC调用,开始、结束、间隔时间等。
无限极分类:服务与服务之间使用无限极分类的方式,通过HTTP头部或者请求地址传输到最低层,从而把整个调用链串起来。
k8s上部署Operator 服务器端
kubectl create namespace observability # <1>
baseurl=" https://raw.githubusercontent.com/ \
jaegertracing/jaeger-operator/master/deploy/"
kubectl create -f $baseurl/crds/jaegertracing_v1_jaeger_crd.yaml # <2>
kubectl create -f $baseurl/service_account.yaml
kubectl create -f $baseurl/role.yaml
kubectl create -f $baseurl/role_binding.yaml
kubectl create -f $baseurl/operator.yaml
kubectl get deployment jaeger-operator -n observability
创建jaeger实例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
过几分钟会创建相应的服务 kubectl get pod -n observability
NAME READY STATUS RESTARTS AGE
pod/elasticsearch-0 1/1 Running 0 3h35m
pod/jaeger-operator-69b5c9444f-sbrwp 1/1 Running 0 3h54m
pod/simple-prod-collector-594ccf54ff-sv5mf 1/1 Running 1 3h5m
pod/simple-prod-query-56cbf8f547-j6gws 2/2 Running 0 3h5m
业务服务部署方面
只需要在原有的服务上增加注入即可。
metadata:
name: xxxx
annotations:
"sidecar.jaegertracing.io/inject": "true"
通过端口转发到本地访问jaeger UI,通过ui查看跟踪情况。
kubectl port-forward svc/simple-prod-query 16686:16686 -n observability
业务端不同语言的接入方式https://github.com/opentracing