--- title: Rocky LinuxへのOTLPに対応したZipkinのインストールとサービス化するメモ tags: ["Zipkin", "OpenTelemetry", "Tracing", "Rocky", "Systemd", "Java"] categories: ["Observability", "OpenTelemetry", "Zipkin"] date: 2025-02-26T01:21:27Z updated: 2025-02-26T01:35:43Z --- 本記事では、Rocky Linux 8にOTLPに対応した[Zipkin](https://zipkin.io/)をインストールし、systemdサービスとして実行する方法を説明します。 OTLPに対応したTracing BackendはDockerを使えば簡単に立ち上げられますが、Air-gappedなどでDockerのインストールやコンテナの起動に手間がかかる環境で、手軽にOTLPを試したい時に使えると思います。 **目次** ### 前提条件 * Rocky Linux 8+ * Java 17+ ### Javaのインストール Rocky Linux 8にJavaをインストールしていない場合は、以下のコマンドでインストールできます。 ```bash sudo dnf install -y java-17-openjdk ``` インストールされたJavaのバージョンを確認します。 ```bash 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の最新バージョンをダウンロードします。 ```bash curl -sSL https://zipkin.io/quickstart.sh | bash -s ``` このコマンドは`zipkin.jar`をカレントディレクトリにダウンロードします。 次にZipkinのOTel Moduleをダウンロードします。 ```bash curl -sSL https://zipkin.io/quickstart.sh | bash -s io.zipkin.contrib.otel:zipkin-module-otel:LATEST:module otel.jar ``` このコマンドは`otel.jar`をカレントディレクトリにダウンロードします。 #### サービスユーザーの作成 Zipkinを実行するための専用ユーザーを作成します。 ```bash sudo useradd -r -s /sbin/nologin zipkin ``` #### Zipkinファイルの配置 Zipkinの実行ファイルを適切な場所に配置します。 ```bash 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サービスとして登録します。必要に応じて、メモリ設定やポート番号を環境に合わせて調整してください。 ```bash 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 ``` #### サービスの有効化と起動 作成したサービスを有効化し、起動します。 ```bash sudo systemctl daemon-reload sudo systemctl enable zipkin sudo systemctl start zipkin ``` #### サービスの状態確認 Zipkinサービスが正常に動作していることを確認します。 ```bash 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にアクセスして、サービスが正常に動作していることを確認します。 ```bash curl -s http://localhost:9411/health ``` 正常に動作している場合、次のような応答が返ります。 ```json { "status" : "UP", "zipkin" : { "status" : "UP", "details" : { "OpenTelemetryHttpCollector{}" : { "status" : "UP" }, "InMemoryStorage{}" : { "status" : "UP" } } } } ``` Webブラウザで `http://:9411` にアクセスすると、Zipkin UIが表示されます。 image サービスのログは次のコマンドで確認できます。 ```bash sudo journalctl -u zipkin -f ``` `/etc/systemd/system/zipkin.service`を変更した場合は、サービスを再読み込みして再起動してください。 ```bash sudo systemctl daemon-reload sudo systemctl restart zipkin ``` OTLPのTracing Endpointは `http://:9411/v1/traces` です。 OpenTelemetry Java Agentを使ってトレースを送る方法は[こちらの記事](/entries/827)を参照してください。