BitnamiのZipkin Helm Chartを使ってZipkinをKubernetesにインストールする際に、
OpenTelemetry Moduleを追加する設定のメモです。

執筆時点では、OTLPのhttp/protobufにのみ対応しています。

Tip

OpenTelemetry ModuleはOpenTelemetry CollectorのZipkin Exporterに比べて、Resource AttributesのSpan Tagへのマッピングなどが行われます。

ここでは設定をシンプルにするために、type=LoadBalancerのサービスを使います。必要に応じてIngressなどに変えてください。
また、zipkin-module-otelは最新版をダウンロードします。特定のバージョンを使用したい場合は、LATESTの部分を特定バージョンに変更してください。

cat <<EOF > helm-values.yaml
---
service:
  type: LoadBalancer
extraEnvVars:
- name: MODULE_OPTS
  value: "-Dloader.path=/modules/otel -Dspring.profiles.active=otel"
initContainers:
- name: download-modules
  image: nicolaka/netshoot
  command: [ "sh" ]
  args:
  - -cex
  - |
    curl -sSL https://zipkin.io/quickstart.sh | bash -s io.zipkin.contrib.otel:zipkin-module-otel:LATEST:module otel.jar
    mkdir -p /modules/otel
    mv otel.jar /modules/otel/
  volumeMounts:
  - name: modules
    mountPath: /modules
- name: unjar-modules
  image: bitnami/java
  command: [ "sh" ]
  args:
  - -cex
  - |
    cd /modules/otel
    jar -xf otel.jar
    rm -f otel.jar
  volumeMounts:
  - name: modules
    mountPath: /modules
extraVolumes:
- name: modules
  emptyDir: { }
extraVolumeMounts:
- name: modules
  mountPath: /modules
---
EOF

次のコマンドでインストールします。

helm upgrade --install -n zipkin zipkin oci://registry-1.docker.io/bitnamicharts/zipkin -f helm-values.yaml --create-namespace --wait

次のような結果になります。

$ kubectl get pod,svc,pvc -n zipkin 
NAME                          READY   STATUS    RESTARTS   AGE
pod/zipkin-7d94745468-dsg47   1/1     Running   0          15m
pod/zipkin-cassandra-0        1/1     Running   0          165m

NAME                                TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                               AGE
service/zipkin                      LoadBalancer   10.96.104.206   192.168.107.200   9411:31180/TCP                        165m
service/zipkin-cassandra            ClusterIP      10.96.142.204   <none>            9042/TCP                              165m
service/zipkin-cassandra-headless   ClusterIP      None            <none>            7000/TCP,7001/TCP,7199/TCP,9042/TCP   165m

NAME                                            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/data-zipkin-cassandra-0   Bound    pvc-21954a68-55ef-4cba-ad4d-58b751747ac5   8Gi        RWO            standard       <unset>                 165m

Note

次のバージョンで確認しました。

$ helm list -n zipkin
NAME  	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART       	APP VERSION
zipkin	zipkin   	1       	2025-01-12 22:05:17.002935 +0900 JST	deployed	zipkin-1.1.1	3.4.4

サンプルアプリを使ってアクセスします。

git clone https://github.com/making/demo-zipkin-otel
cd demo-zipkin-otel
./mvnw clean install -DskipTests

Backendを起動します。

java -jar backend/target/backend-0.0.1-SNAPSHOT.jar --management.zipkin.tracing.endpoint=http://192.168.107.200:9411/v1/traces

Frontendを起動します。

java -jar frontend/target/frontend-0.0.1-SNAPSHOT.jar --management.zipkin.tracing.endpoint=http://192.168.107.200:9411/v1/traces

http://localhost:8080 にアクセスします。

image

Zipkin UI (この例では http://192.168.107.200:9411) にアクセスします。

image

"RUN QUERY"ボタンを押すと、次のようなTraceを確認できます。

image image

BitnamiのZipkin Helm ChartはデフォルトでCassandra Storageを使用してTraceデータを永続化します。

これで簡単にOpenTelemetry対応のTraceバックエンドを構築できました。

OpenTelemetry CollectorからZipkinのOTLPエンドポイントに送りたい場合は、次のような設定を追加すれば良いです。

# ...
exporters:
  otlphttp/zipkin:
    endpoint: http://zipkin.zipkin.svc.cluster.local:9411
    compression: gzip
    tls:
      insecure: true
    # ...
# ...
service:
  pipelines:
    traces:
      receivers:
      - otlp
      # ...
      processors:
      # ...
      exporters:
      - otlphttp/zipkin
      # ...
# ...

アンインストールしたい場合は

helm uninstall -n zipkin zipkin
Found a mistake? Update the entry.
Share this article: