之前我们已经将Jaeger部署到了Kubernetes上,并且对Jaeger官方的示例应用HotROD进行了分布式跟踪。 我们使用Elasticsearch作为Jaeger的后端存储。借助Jaeger我们可以很容易的进行微服务架构应用的服务链调用追踪,进一步实现应用的性能分析和延迟优化。

Jaeger还提供了一个spark job从存储中收集span数据,分析服务间的连接和依赖,并将分析结果持久化到后端存储中。jaeger query就可以查询到服务的依赖,jaeger ui的Dependencies页面就可以显示服务之间的依赖关系。

本篇我们将使用Kubernetes的CronJob调度执行jaeger的服务依赖分析任务。关于Kubernetes的CronJob可以查看Kubernetes的Cron Job以及Kubernetes的文档Cron Jobs

下面在kube-system这个命名空间中创建如下的CronJob:

 1---
 2kind: CronJob
 3apiVersion: batch/v2alpha1
 4metadata:
 5  labels:
 6    app: jaeger
 7  name: jaeger-spark-job
 8  namespace: kube-system
 9spec:
10  schedule: "0 * * * *"
11  concurrencyPolicy: Forbid
12  successfulJobsHistoryLimit: 10
13  failedJobsHistoryLimit: 10
14  jobTemplate:
15    spec: 
16      template:
17        metadata:
18          labels:
19            app: jaeger
20        spec:
21          containers:
22          - name: jaeger-spark-job
23            # 此处镜像应替换成本地私有镜像库中的镜像
24            image: jaegertracing/spark-dependencies:latest
25            imagePullPolicy: IfNotPresent
26            env:
27              - name: STORAGE
28                value: elasticsearch
29              - name: ES_NODES
30                value: "http://elasticsearch:9200"
31            resources:
32              requests:
33                memory: "1536Mi"
34                cpu: "250m"
35              limits:
36                memory: "1536Mi"
37                cpu: "500m"
38          restartPolicy: OnFailure

上面创建了一个名称为jaeger-spark-job的cronjob,并将在每小时被调度执行一次。 每次执行的时候会分析基于UTC时间分析当天的数据。

cronjob被调度执行后就会在ES中创建一个名称为jaeger-dependencies-yyyy-MM-dd的索引。 此时在jaeger UI的的dependencies页面就可以看到具体服务依赖图。

参考