モニタリング
概要
Immichは、ローカル監視と洞察のためのさまざまなパフォーマンス指標を提供します。この統合は主にPrometheusメトリクスの形式で提供されます。ただし、OpenTelemetryの計測を使用しているためトレースのエクスポートも可能です。
これはオプトイン機能であり、Immichのパフォーマンスを監視するために設計されています。このデータは、設定した範囲以外には送信されません。
Prometheus
Prometheusは、構成された複数のソースからメトリクスを収集するツールです。「プル」戦略で動作し、各定義されたソースから定期的にメトリクスをリクエストします。つまり、要求が行われるまでソースは何も送信しません。また、ソースであるImmichが、メトリクスを要求するPrometheusがターゲットとするエンドポイントを公開する必要があります。
メトリクス
これらのメトリクスはさまざまな形式で提供されます:
- カウンター: 増加のみ可能。例:エンドポイントが呼び出された回数。
- ゲージ: 特定の範囲内で増加または減少可能。例:CPU利用率。
- ヒストグラム: 各観測値が特定の「バケット」に割り当てられる。例:応答時間、各バケットがミリ秒単位の値。この形式は少し複雑です。
- この場合のバケットは累積的です。つまり、観測値はそれを含む最小のバケットだけでなく、それより大きいすべてのバケットにも割り当てられます。例:ヒストグラムに1ms、5ms、10msのバケットがあり、観測値が3msの場合、5msおよび10msのバケットに割り当てられます。
Immichのメトリクスは、API(エンドポイント呼び出しと応答時間)、ホスト(メモリとCPU利用率)、IO(内部データベースクエリ、画像処理など)に分類されます。それぞれのメトリクスグループは、独立して有効化または無効化することができます。
設定
デフォルトでは、Immichはメトリクスのためのエンドポイントを公開しません。このエンドポイントを有効にするには、.env
ファイルにIMMICH_TELEMETRY_INCLUDE=all
環境変数を追加できます。この変数は現在、サーバーコンテナのみに使用されます。
IMMICH_TELEMETRY_INCLUDE=all
はすべてのメトリクスを有効にします。より詳細な設定を行うには、含めるべきテレメトリメトリクスをコンマ区切りリストとして列挙します(例:IMMICH_TELEMETRY_INCLUDE=repo,api
)。または、IMMICH_TELEMETRY_EXCLUDE
を使用して特定のメトリクスを除外することもできます。詳細については環境設定セクションを参照してください。
次に、新しいまたは既存のPrometheusインスタンスを設定し、このエンドポイントをスクレイプする必要があります。以下の手順はPrometheusインスタンスが存在しない場合を想定していますが、手順は似ています。
ComposeファイルにPrometheusサービスを定義することから始めます:
immich-prometheus:
container_name: immich_prometheus
ports:
# Prometheusのデフォルトポートを公開して操作可能にする
- 9090:9090
image: prom/prometheus
volumes:
# Prometheusの設定ファイル - 初期設定用の簡易版を提供
- ./prometheus.yml:/etc/prometheus/prometheus.yml
# Composeファイルの下部で定義される名前付きボリューム; またはマウントされたフォルダーにもなる
- prometheus-data:/prometheus
Composeファイルの下部にあるボリュームリストにprometheus-data
を追加する必要もあります:
volumes:
model-cache:
prometheus-data:
最後の部分は設定ファイルです。このファイルには、Prometheusがターゲットにするべきソースが定義されています。これをダウンロードしてComposeファイルと同じフォルダーに配置してください。
提供されたファイルは出発点に過ぎません。Prometheusの設定方法は非常に多岐にわたりますので、自由に試してみてください。
コンテナをdocker compose down
で停止させ、docker compose up -d
で再起動した後、Prometheusインスタンスは現在、Immichサーバーおよびマイクロサービスコンテナのメトリクスを収集します。これらのコンテナに新しいポートを公開する必要はありません - 通信は内部Dockerネットワークで処理されます。
どのメトリクスが利用可能か正確に確認する には、サーバーコンテナのポートに8081:8081
、マイクロサービスコンテナのポートに8082:8082
を追加することもできます。
これらのサービスの/metrics
エンドポイントにアクセスすると、Prometheusが収集する同じ生データが表示されます。
IMMICH_API_METRICS_PORT
およびIMMICH_MICROSERVICES_METRICS_PORT
を使用してポートを設定する方法はこちらです。
使用方法
それではPrometheusを設定した後、メトリクスを実際にどのように表示するのでしょうか。最もシンプルな方法は直接Prometheusを使うことです。Prometheusにアクセスすると、メトリクスを検索および視覚化できるウェブUIが表示されます。また、データソースのステータスを確認したり、設定を調整することもできますが、これらはこのガイドの範囲外です。
Grafana
より良い表示専用ツールとして、Grafanaを使用することもできます。これにより、Prometheus(おそらく他のソース)に接続して、高度なデータ視覚化を行うことができます。
Grafanaの設定はPrometheusと似ています。以下のサービスを追加できます:
immich-grafana:
container_name: immich_grafana
command: ['./run.sh', '-disable-reporting'] # Grafanaのテレメトリを無効化する
ports:
- 3000:3000
image: grafana/grafana
volumes:
# 美しいダッシュボードとパネルを保存する
- grafana-data:/var/lib/grafana
さらに別のボリュームを次のように追加してください:
volumes:
model-cache:
prometheus-data:
grafana-data:
サービスを停止して再起動した後、Grafanaにアクセスしてメトリクスを表示できます。初回ログイン時は、ユーザー名とパスワードに共にadmin
を入力し、パスワードを更新してください。その後、設定に進み、データ元としてhttp://immich-prometheus:9090
を追加してGrafanaをPrometheusインスタンスに指向させることができます。
使用方法
最初のダッシュボードを作成して開始できます。作業を頻繁に保存することを忘れないでください、そうしないとすべての進捗が失われます!
次に新しいパネルを作成し、データソースとしてPrometheusを指定します。
-- TODO: 画像と詳細をここに追加