Proxmox VEにPrometheus, Grafanaを導入した
Date: 2024-12-22
経緯
昨年から研究室に置いているマシンでProxmox VEを動かしているのだが、先日実家にミニPC(N100, 16GB, 512GB)に設置してProxmox VEを新たに導入した。もともとProxmox VEのWebインターフェースは普段使いでどのくらいCPUやメモリを使用しているかを観察する程度では十分だが複数サーバの健康状態を常に監視するには不十分であり、時系列データを保存しているわけではないのであくまでその時点でのデータしか見れず過去の状態を見ることはできないという点が不便なので、以前から監視ツールであるPrometheusを導入したいと考えていた。
そこで今回メトリクス計測用のVMを立てて、監視したいProxmoxの各ノードに健康状態を返すエンドポイントを立ててくれるExporterを入れて、そのメトリクスをProxmox VE上のVMでPrometheusによって監視し、その時系列データをGrafanaで可視化することにした。
当初の予定としては、Proxmox via PrometheusというGrafanaダッシュボードがいい感じだったので使いたいと考えていて、またPrometheusで監視したデータを時系列データ用のDBであるInfluxDBで管理したいと考えたので、PrometheusとInfluxDBを繋ぐTelegrafを用いて格納するつもりであったのだが、このダッシュボードはデータソースがPrometheusのみでInfluxDBに対応していなかったため、現在はInfluxDBに書き込んでいるもののDB自体は何にも使用していない。ただし、頑張ってデータソースのフォーマットの違いを吸収すれば、このダッシュボードをInfluxDBに対応させること自体はおそらく可能だと思う。
動作環境
ホスト
- Proxmox VE: 8.3.2
- prometheus-pve-exporter: 3.4.7
VM
- Ubuntu Server: 24.04.1
- InfluxDB: 2.7.11
- Telegraf: 1.33.0
- Prometheus: 3.0.1
- Grafana: 11.4.0
ProxmoxホストへのExporterのインストール
以下のサイトを参考にして
prometheus-pve-exporter
を使う。以下のようにしてユーザ認証の設定を書き込む。
prometheus-pve-exporter
をsystemd
のサービスとして登録する。ここで、ブラウザから
http://<ProxmoxホストのIPアドレス>/pve?target=<ProxmoxホストのIPアドレス>
にアクセスしてみて、以下のような内容が表示されたらExporterがおそらく正常に機能している。私の場合は、先ほどの手順にあった
pveum
コマンドを打っていなかったために、Internal Server Errorが表示されていたのだが、sudo journalctl -xeu prometheus-pve-exporter
を見るとProxmoxのAPIを叩く権限がないと表示されており、調べたらこの手順が必要なようだった。監視用VMへのInfluxDB, Telegraf, Prometheus, Grafanaの導入
まず、監視用VMを用意する。今回はサーバの性能にそこまで余裕があるわけではないのでUbuntu-24.04-Serverを利用した。また、InfluxDBは結果的に使っていないのでProxmox via Prometheusのダッシュボードを使うだけであれば、InfluxDBとTelegrafのインストールは不要である。
InfluxDBのインストール
以下のようにaptリポジトリを追加してInfluxDBをインストールする。
ここで、ブラウザから
http://<VMのIPアドレス>:8086
にアクセスして、ユーザ登録を行いトークンを発行する。
その後、CLIかLoadDataタブののBucketsからPrometheus用のバケットを作成したら、TelegrafからPrometheusのデータを書き込む準備が完了する。

Telegrafのインストール
InfluxDBと同じリポジトリにあるのでそのままインストールする。
以下のような内容を設定ファイルに書き込む。
書き込んだ設定をテスト実行してエラーが出なければ
systemd
にサービスとして登録する。ここまでが成功していればブラウザ上でInfluxDBのDashboardやData Explorerからデータの内容を見れるようになる。


Prometheusのインストール
以下のようにしてPrometheusのバイナリをダウンロード、インストールする。本当ならばapt, snapパッケージを使った方がメンテナンスの観点から良いと思われる。
prometheus
もVMのsystemd
のサービスに登録しておく。Prometheus用の設定ファイルにExporterの情報を書き込む。なお、私の環境ではTailscaleをホストとVMの両方に入れており、DNSの名前解決もそれで行なっている。
以下のようにして、設定ファイルをテストして認証などがうまく通りそうか確認したら、
systemd
にサービスとして登録して起動し、journalctl
を見てエラーが出ていないか確認しておく。ブラウザから
http://<VMのIPアドレス>:9090
にアクセスして、pve_up
などのクエリを叩いて、正常に情報が取得できればここまでは正常に動作している。

Grafanaのインストール
以下のようにaptリポジトリを追加してインストールして、
systemd
にサービスとして登録する。ブラウザから
http://<VMのIPアドレス>:9221
にアクセスして、DataSourcesからprometheusもしくはinfluxdbを追加して、Build a dashboardから構築したいダッシュボードのIDを入力してJSONを穴埋めして読み込むことで、最終的に以下のようなGrafanaダッシュボードが表示された。

感想
今回は、VM上で色々なリポジトリを追加したり、バイナリをダウンロードしたりして何個かのソフトウェアをインストールしたが、このうちいくつかはDockerコンテナで動かすこともできるので、頑張れば全部ホスト上でコンテナのみで動かすことも可能だと思われる。しかし、Proxmoxを使っている以上簡単にVMを生やせるという利点を最大限活かしてこのような構成にした。これによって今後さらに運用するマシンが増えたとしてもそれぞれの健康状態を常に監視することができるようになりとても便利である。