之前我们已经将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:
---
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
labels:
app: jaeger
name: jaeger-spark-job
namespace: kube-system
spec:
schedule: "0 * * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 10
failedJobsHistoryLimit: 10
jobTemplate:
spec:
template:
metadata:
labels:
app: jaeger
spec:
containers:
- name: jaeger-spark-job
# 此处镜像应替换成本地私有镜像库中的镜像
image: jaegertracing/spark-dependencies:latest
imagePullPolicy: IfNotPresent
env:
- name: STORAGE
value: elasticsearch
- name: ES_NODES
value: "http://elasticsearch:9200"
resources:
requests:
memory: "1536Mi"
cpu: "250m"
limits:
memory: "1536Mi"
cpu: "500m"
restartPolicy: OnFailure上面创建了一个名称为jaeger-spark-job的cronjob,并将在每小时被调度执行一次。 每次执行的时候会分析基于UTC时间分析当天的数据。
cronjob被调度执行后就会在ES中创建一个名称为jaeger-dependencies-yyyy-MM-dd的索引。
此时在jaeger UI的的dependencies页面就可以看到具体服务依赖图。