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 にアクセスします。
Zipkin UI (この例では http://192.168.107.200:9411) にアクセスします。
"RUN QUERY"ボタンを押すと、次のようなTraceを確認できます。
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