メトリクスを記録し、送信するためのソフトウェア。
監視対象のサーバーで実行するサービス (“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.04sudo singularity instance start --nv --add-caps CAP_SYS_ADMIN dcgm-exporter.sif dcgm-service dcgm-exportersudo singularity run instance://dcgm-service &
- systemctl を使い、
- 記録サーバーでそれら exporter を監視するように設定
sudo nvim /etc/prometheus/prometheus.ymlsudo 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. 設定手順
- 以下のコマンドでエディタを開きます。
sudo systemctl edit prometheus.service - 開いたファイルに、以下の内容を記述して保存します。
[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がある」というエラーが発生します。
- ポイント: 最初の
systemdのデーモン設定を再読み込みします。sudo systemctl daemon-reload- 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=を追記する。
- 原因: ドロップインファイルで