メトリクスを記録し、送信するためのソフトウェア。
監視対象のサーバーで実行するサービス (“exporter”) と、記録を取るサーバーで実行するサービスに分かれている

  • exporter は監視対象のサーバーで実行するサービス。リクエストに対してメトリクスの値を返す (export)。
  • 記録を取るサーバーが exporter に定期的にリクエストを送り、そのメトリクスを保存していく。
    • この方法の利点は、exporter 側=被監視サーバー内にメトリクスの記録は残らないことと、リクエストが来ない限り被監視サーバー側に負荷がかからないこと
  • メトリクスは 記録サーバーに直接ブラウザからアクセスして読むこともできるが、grafana などの可視化ソフトを使ったほうがずっと見やすい。この場合、記録サーバー上にあるメトリクスに更に grafana からアクセスする設定を書く。

インストール

  • apt-get でインストールできる。被監視サーバーと記録サーバーの両方にインストール
  • 監視対象で exporter サービスを有効化
    • systemctl を使い、prometheus-node-exporter.service を有効化する
    • 逆に、 記録サービスである prometheus はデフォルトで有効化されていると思われるのでこれを無効化しておく
    • ほかに NVIDIA 製 GPU 監視 exporter として dcgm-exporter も使える
      • docker を使って実行する方法は 公式サイト にある
      • singularity を使って実行するには
        • singularity pull dcgm-exporter.sif docker://nvcr.io/nvidia/k8s/dcgm-exporter:4.4.2-4.7.0-ubuntu22.04
        • sudo singularity instance start --nv --add-caps CAP_SYS_ADMIN dcgm-exporter.sif dcgm-service dcgm-exporter
        • sudo singularity run instance://dcgm-service &
  • 記録サーバーでそれら exporter を監視するように設定
    • sudo nvim /etc/prometheus/prometheus.yml
    • sudo systemctl restart prometheus
  • 記録サーバーで記録サービスを有効化
  • 記録サーバーで可視化サービス (e.g. grafana) を有効化

その他

Prometheus メトリックのデータ保持期間を設定する

1. データの保存場所

Prometheus のデータは、コマンドライン引数で指定しない限り、デフォルトで以下の場所に保存されます。

  • Docker コンテナ使用時: コンテナ内の /prometheus ディレクトリ。
  • Docker 未使用時: Prometheus の実行ファイルがある場所の相対パスにある data/ ディレクトリ。
    • 例えば /home/user/prometheus/ で実行した場合、データは /home/user/prometheus/data/ に保存される。
    • パッケージ管理システムでインストールした場合、通常は /var/lib/prometheus/var/prometheus など、システム固有のパスになることが多い。

2. データ保持期間の変更

データ保持期間は、起動時のコマンドライン引数 --storage.tsdb.retention.time で設定します。

  • : データを 1 ヶ月(30 日)保持する場合
    --storage.tsdb.retention.time=30d

3. systemd サービスでの設定方法

サービスを systemctl で管理している場合、直接設定ファイルを編集するのではなく、ドロップインファイルを使用するのが推奨されます。

  • ドロップインファイルとは: 元のサービスファイル (/usr/lib/systemd/system/prometheus.service) を直接編集することなく、設定の一部を上書きするための仕組み。
  • 場所: systemctl edit prometheus.service コマンドを実行すると、/etc/systemd/system/prometheus.service.d/ ディレクトリに override.conf というファイルが作成される。

4. 設定手順

  1. 以下のコマンドでエディタを開きます。
    sudo systemctl edit prometheus.service
  2. 開いたファイルに、以下の内容を記述して保存します。
    [Service]
    ExecStart=
    ExecStart=/usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --storage.tsdb.retention.time=30d
    • ポイント: 最初の ExecStart= は、元のサービスファイルの ExecStart の設定を無効化するために必要です。これがないと、「複数の ExecStart がある」というエラーが発生します。
  3. systemd のデーモン設定を再読み込みします。
    sudo systemctl daemon-reload
  4. Prometheus サービスを再起動して、変更を適用します。
    sudo systemctl restart prometheus.service

5. よくあるエラーと解決策

  • エラー: Assignment outside of section. Ignoring.
    • 原因: ドロップインファイルに [Service] セクションが記述されていない。
    • 解決策: 必ず [Service] というセクションを追加し、その下に設定を記述する。
  • エラー: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services.
    • 原因: ドロップインファイルで ExecStart を上書きする際、元の設定がクリアされていない。
    • 解決策: 変更したい ExecStart 行の前に、空の ExecStart= を追記する。