分布式跟踪系统Jaeger(四):使用Kubernetes的CronJob进行Jaeger的服务依赖分析
2017-12-06
之前我们已经将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页面就可以看到具体服务依赖图。