jager分布式跟踪部署


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
jaeger-v1

数据流式存储top2
jaeger-v1

jaeger-client-top jaeger-v1

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

Devops