Jaegerを使った分散トレーシング

たけるです。

最近Observabilityに関して学ぶ機会が多かったのでJaegerを触って
今回はKubernetes(kind)上にJaegerを構築してわいわいやっていこうと思います

Jaegerは以下のコンポーネントから構成されるみたいです (参考)

  • jaeger-client
  • jaeger-agent
    • UDPを通して送信されたスパンをコレクターに流すネットワークデーモン
  • jaeger-collector
    • Agentからトレースを受け取り、トレースを検証し、インデックスを付けてDBに保存する
  • jaeher-query
    • DBからトレースを取得してWeb UIを表示する
  1. 適当にクラスタを立てます
$ kind create cluster
  1. helmでクラスタにJaeger Operatorをインストールします
$ helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
$ helm repo update
  1. JaegerをAll In One Deploymentでデプロイします。
    今回はデータの永続化はしませんが、ElasticSearch Operatorなりk8ssandraなりを入れてあげてウェイってしてあげればいいのかなぁと思います。
$ kubectl apply -f jager.yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: jaeger
  namespace: monitoring
  1. ここまででjaeger-queryにアクセスできるようになっているのでポートフォワーディングして確認してみます。
$ kubectl port-forward -n monitoring svc/jaeger-query 16686:16686

http://localhost:16686

  1. ただこのままだと何もトレーシングしていないので、jaegerがデモアプリとして用意しているHot R.O.D. - Rides on Demandをデプロイしてトレースしてみます。
    jaeger-agentはannotationにsidecar.jaegertracing.io/injectを設定するとjaeger-operatorが挿入してくれます。
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hotrod
  name: hotrod
  namespace: monitoring
  annotations:
    sidecar.jaegertracing.io/inject: "true"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hotrod
  template:
    metadata:
      labels:
        app: hotrod
    spec:
      containers:
      - image: docker.io/jaegertracing/example-hotrod
        name: hotrod
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: hotrod
  namespace: monitoring
spec:
  ports:
  - name: hotrod
    port: 8000
    targetPort: 8080
  selector:
    app: hotrod

ちゃんとサイドカーとしてjaeger-agentか挿入されていたらhotrodのコンテナが2つになっているはずです

NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE
monitoring           hotrod-576695ccc5-zmspl                      2/2     Running   0          1m
  1. hotrodを弄り倒します
    hotrod

  2. jager-queryにアクセスしてみるとしっかりとトレーシングできてることがわかります。べんり

    エラーもしっかり