Feb 26, 2025
Feb 26, 2025
N/A Views
MD

本記事では、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が表示されます。

image

サービスのログは次のコマンドで確認できます。

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を使ってトレースを送る方法はこちらの記事を参照してください。

Found a mistake? Update the entry.
Share this article: