本記事では、Rocky Linux 8にOTLPに対応したZipkinをインストールし、systemdサービスとして実行する方法を説明します。
OTLPに対応したTracing BackendはDockerを使えば簡単に立ち上げられますが、Air-gappedなどでDockerのインストールやコンテナの起動に手間がかかる環境で、手軽にOTLPを試したい時に使えると思います。
目次
前提条件
- Rocky Linux 8+
- Java 17+
Javaのインストール
Rocky Linux 8にJavaをインストールしていない場合は、以下のコマンドでインストールできます。
sudo dnf install -y java-17-openjdk
インストールされたJavaのバージョンを確認します。
java -version
次のような出力が表示されます。
openjdk version "17.0.14" 2025-01-21 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.14.0.7-1) (build 17.0.14+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.14.0.7-1) (build 17.0.14+7-LTS, mixed mode, sharing)
Zipkinのインストール
Tip
この記事ではメモリ内ストレージを使用します。JVMのヒープサイズは必要に応じて調整することができます。
保存するトレース量に応じてヒープサイズを適切なサイズに設定してください。
Zipkinのダウンロード
Zipkinの最新バージョンをダウンロードします。
curl -sSL https://zipkin.io/quickstart.sh | bash -s
このコマンドはzipkin.jarをカレントディレクトリにダウンロードします。
次にZipkinのOTel Moduleをダウンロードします。
curl -sSL https://zipkin.io/quickstart.sh | bash -s io.zipkin.contrib.otel:zipkin-module-otel:LATEST:module otel.jar
このコマンドはotel.jarをカレントディレクトリにダウンロードします。
サービスユーザーの作成
Zipkinを実行するための専用ユーザーを作成します。
sudo useradd -r -s /sbin/nologin zipkin
Zipkinファイルの配置
Zipkinの実行ファイルを適切な場所に配置します。
sudo mkdir -p /opt/zipkin
sudo mv zipkin.jar /opt/zipkin/
sudo mv otel.jar /opt/zipkin/
sudo chown -R zipkin:zipkin /opt/zipkin
systemdサービスの設定
Zipkinをsystemdサービスとして登録します。必要に応じて、メモリ設定やポート番号を環境に合わせて調整してください。
sudo tee /etc/systemd/system/zipkin.service << 'EOF'
[Unit]
Description=Zipkin Server
After=network.target
[Service]
Type=simple
User=zipkin
Group=zipkin
Environment="JAVA_OPTS=-Xms512m -Xmx1g -XX:+ExitOnOutOfMemoryError -Dloader.path='otel.jar,otel.jar!/lib' -Dspring.profiles.active=otel"
Environment="MEM_MAX_SPANS=10000"
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
WorkingDirectory=/opt/zipkin
ExecStart=/usr/bin/java $JAVA_OPTS -cp /opt/zipkin/zipkin.jar org.springframework.boot.loader.launch.PropertiesLauncher
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
サービスの有効化と起動
作成したサービスを有効化し、起動します。
sudo systemctl daemon-reload
sudo systemctl enable zipkin
sudo systemctl start zipkin
サービスの状態確認
Zipkinサービスが正常に動作していることを確認します。
sudo systemctl status zipkin
次のような出力が表示されます。
● zipkin.service - Zipkin Server
Loaded: loaded (/etc/systemd/system/zipkin.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2025-02-26 10:11:09 JST; 7s ago
Main PID: 1678 (java)
Tasks: 43 (limit: 617204)
Memory: 466.1M
CGroup: /system.slice/zipkin.service
└─1678 /usr/bin/java -Xms512m -Xmx1g -XX:+ExitOnOutOfMemoryError -Dloader.path=otel.jar,otel.jar!/lib -Dspring.profiles.active=otel -cp /opt/zipkin/zipkin.jar org.springframework.boot.loader.launch.PropertiesLauncher
Feb 26 10:11:10 zipkin java[1678]: oooooooo oooooooo
Feb 26 10:11:10 zipkin java[1678]: oooo oooo
Feb 26 10:11:10 zipkin java[1678]: ________ ____ _ _____ _ _
Feb 26 10:11:10 zipkin java[1678]: |__ /_ _| _ \| |/ /_ _| \ | |
Feb 26 10:11:10 zipkin java[1678]: / / | || |_) | ' / | || \| |
Feb 26 10:11:10 zipkin java[1678]: / /_ | || __/| . \ | || |\ |
Feb 26 10:11:10 zipkin java[1678]: |____|___|_| |_|\_\___|_| \_|
Feb 26 10:11:10 zipkin java[1678]: :: version 3.5.0 :: commit 0f8fc88 ::
Feb 26 10:11:10 zipkin java[1678]: 2025-02-26T10:11:10.944+09:00 WARN [/] 1678 --- [ main] i.m.p.PrometheusMeterRegistry : A MeterFilter is being configured after a Meter has been registered to this registry. All MeterFilters should
be configured before any Meters are registered. If that is not possible or you have a use case where it should be allowed, let the Micrometer maintainers know at https://github.com/micrometer-metrics/micrometer/issues/4920. Enable DEBUG level logging on t
his logger to see a stack trace of the call configuring this MeterFilter.
Feb 26 10:11:11 zipkin java[1678]: 2025-02-26T10:11:11.045+09:00 INFO [/] 1678 --- [oss-http-*:9411] c.l.a.s.Server : Serving HTTP at /[0:0:0:0:0:0:0:0]:9411 - http://127.0.0.1:9411/
動作確認
Zipkin UIにアクセスして、サービスが正常に動作していることを確認します。
curl -s http://localhost:9411/health
正常に動作している場合、次のような応答が返ります。
{
"status" : "UP",
"zipkin" : {
"status" : "UP",
"details" : {
"OpenTelemetryHttpCollector{}" : {
"status" : "UP"
},
"InMemoryStorage{}" : {
"status" : "UP"
}
}
}
}
Webブラウザで http://<server_address>:9411 にアクセスすると、Zipkin UIが表示されます。
サービスのログは次のコマンドで確認できます。
sudo journalctl -u zipkin -f
/etc/systemd/system/zipkin.serviceを変更した場合は、サービスを再読み込みして再起動してください。
sudo systemctl daemon-reload
sudo systemctl restart zipkin
OTLPのTracing Endpointは http://<server_address>:9411/v1/traces です。
OpenTelemetry Java Agentを使ってトレースを送る方法はこちらの記事を参照してください。