ProxmoxをPrometheusとGrafanaで監視するメモ
はじめに
ProxmoxのVMをHomebridgeで管理できるようになったので、今度はPrometheusとGrafanaを使ってProxmox VEのメトリクスを監視する仕組みを導入しました。
prometheus-pve-exporterを使うことで、以下の情報を可視化できます。
- ノード情報: CPU・メモリ使用率、稼働時間
- VM/LXC情報: 各ゲストのリソース使用状況
- ストレージ情報: ディスク容量、使用量
- ネットワーク/ディスクIO: トラフィック、読み書き量
- バックアップ状態: バックアップ未設定のゲスト検出
prometheus-pve-exporterのインストール
pipでインストール
Python 3.9以上が必要です。
python3 -m pip install prometheus-pve-exporter
Dockerでインストール
docker pull prompve/prometheus-pve-exporter
Proxmox側の設定
監視用ユーザーの作成
セキュリティのため、読み取り専用権限を持つ専用ユーザーを作成します。
# ユーザー作成
pveum user add prometheus@pve
# PVEAuditorロール(読み取り専用)を付与
pveum aclmod / -user prometheus@pve -role PVEAuditor
APIトークンの作成(推奨)
パスワード認証よりAPIトークンを使用する方が安全です。
- Proxmox Web管理画面で Datacenter → Permissions → API Tokens を選択
- Add をクリックしてトークンを作成
- 表示されるSecretを必ず控えておく(再表示不可)
exporterの設定ファイル
設定ファイル pve.yml を作成します。
パスワード認証の場合
default:
user: prometheus@pve
password: "your-password"
verify_ssl: false # 自己署名証明書の場合
APIトークン認証の場合(推奨)
default:
user: prometheus@pve
token_name: "your-token-id"
token_value: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
verify_ssl: false
exporterの起動
直接起動
pve_exporter --config.file /path/to/pve.yml
デフォルトではポート9221で起動します。
Dockerで起動
docker run --init --name prometheus-pve-exporter -d \
-p 127.0.0.1:9221:9221 \
-v /path/to/pve.yml:/etc/prometheus/pve.yml:ro \
prompve/prometheus-pve-exporter
Prometheusの設定
prometheus.yml にスクレイプ設定を追加します。
exporterをProxmoxノード上で動かす場合
scrape_configs:
- job_name: 'pve'
static_configs:
- targets:
- 192.168.1.100:9221 # Proxmoxノード1
- 192.168.1.101:9221 # Proxmoxノード2
metrics_path: /pve
params:
module: [default]
cluster: ['1']
node: ['1']
exporterを別サーバーで動かす場合
scrape_configs:
- job_name: 'pve'
static_configs:
- targets:
- 192.168.1.100 # Proxmoxノード1
- 192.168.1.101 # Proxmoxノード2
metrics_path: /pve
params:
module: [default]
cluster: ['1']
node: ['1']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9221 # exporterのアドレス
メトリクスの確認
ブラウザで以下のURLにアクセスすると、メトリクスが確認できます。
http://localhost:9221/pve?target=192.168.1.100&cluster=1&node=1
主要なメトリクスは以下の通りです。
| メトリクス名 | 説明 |
|---|---|
pve_up | ノード/VM/LXCの稼働状態 |
pve_cpu_usage_ratio | CPU使用率 |
pve_memory_usage_bytes | メモリ使用量 |
pve_disk_usage_bytes | ディスク使用量 |
pve_network_receive_bytes_total | 受信バイト数 |
pve_network_transmit_bytes_total | 送信バイト数 |
Grafanaダッシュボードの導入
GrafanaのダッシュボードID 10347 を使用すると、すぐに可視化できます。
ダッシュボードのインポート
- Grafanaの左メニューから Dashboards → Import を選択
- Dashboard IDに
10347を入力 - Load をクリック
- Prometheusデータソースを選択して Import
表示される情報
- ノードレベル: CPU・メモリの現在値と履歴
- ストレージ: 各ストレージの割り当てと使用状況
- VM/LXC一覧: 全ゲストのリソース割り当てと使用状況
- 詳細グラフ: ディスク使用量、メモリ使用率、CPU使用率、IO
メモ
クラスタ規模に応じた設定
大規模なクラスタの場合、クラスタメトリクスとノードメトリクスを別々のジョブで収集すると効率的です。
# クラスタメトリクス(1ノードから取得でOK)
- job_name: 'pve-cluster'
static_configs:
- targets: ['192.168.1.100:9221']
metrics_path: /pve
params:
cluster: ['1']
node: ['0']
# ノードメトリクス(全ノードから取得が必要)
- job_name: 'pve-node'
static_configs:
- targets:
- 192.168.1.100:9221
- 192.168.1.101:9221
metrics_path: /pve
params:
cluster: ['0']
node: ['1']
アラート設定例
VMのタグに基づいてアラートを出す場合は、pve_guest_infoメトリクスを使います。
# criticalタグ付きのVMが停止した場合にアラート
(pve_guest_info{tags=~".*critical.*"} * on(id) group_left(name) pve_up{}) == 0
参考リンク
まとめ
prometheus-pve-exporterを使うことで、Proxmox VEの包括的な監視が可能になりました。既存のGrafana環境に統合することで、サーバー監視と一緒にProxmoxの状態も一元管理できます。
APIトークン認証を使用し、verify_ssl: falseは自己署名証明書環境のみで使用するように注意してください。