--- title: BitnamiのZipkin Helm ChartにOpenTelemetry Moduleを追加するメモ tags: ["OpenTelemetry", "Tracing", "Zipkin", "Bitnami", "Kubernetes", "Helm", "Cassandra"] categories: ["Observability", "OpenTelemetry", "Zipkin"] date: 2025-01-12T13:28:55Z updated: 2025-01-22T15:06:25Z --- Bitnamiの[Zipkin Helm Chart](https://github.com/bitnami/charts/tree/main/bitnami/zipkin)を使ってZipkinをKubernetesにインストールする際に、 [OpenTelemetry Module](https://github.com/openzipkin-contrib/zipkin-otel/tree/main/module)を追加する設定のメモです。 執筆時点では、OTLPのhttp/protobufにのみ対応しています。 > [!TIP] > OpenTelemetry ModuleはOpenTelemetry CollectorのZipkin Exporterに比べて、Resource AttributesのSpan Tagへのマッピングなどが行われます。 ここでは設定をシンプルにするために、type=LoadBalancerのサービスを使います。必要に応じてIngressなどに変えてください。 また、[zipkin-module-otel](https://mvnrepository.com/artifact/io.zipkin.contrib.otel/zipkin-module-otel)は最新版をダウンロードします。特定のバージョンを使用したい場合は、`LATEST`の部分を特定バージョンに変更してください。 ```yaml cat < 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 ``` 次のコマンドでインストールします。 ```bash helm upgrade --install -n zipkin zipkin oci://registry-1.docker.io/bitnamicharts/zipkin -f helm-values.yaml --create-namespace --wait ``` 次のような結果になります。 ```bash $ 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 9042/TCP 165m service/zipkin-cassandra-headless ClusterIP 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 165m ``` > [!NOTE] > 次のバージョンで確認しました。 > ```bash > $ 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 > ``` [サンプルアプリ](https://github.com/making/demo-zipkin-otel)を使ってアクセスします。 ```bash git clone https://github.com/making/demo-zipkin-otel cd demo-zipkin-otel ./mvnw clean install -DskipTests ``` Backendを起動します。 ```bash java -jar backend/target/backend-0.0.1-SNAPSHOT.jar --management.zipkin.tracing.endpoint=http://192.168.107.200:9411/v1/traces ``` Frontendを起動します。 ```bash 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エンドポイントに送りたい場合は、次のような設定を追加すれば良いです。 ```yaml # ... 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 # ... # ... ``` アンインストールしたい場合は ```bash helm uninstall -n zipkin zipkin ```