asuto.dev

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-exportersystemdのサービスとして登録する。
ここで、ブラウザから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を生やせるという利点を最大限活かしてこのような構成にした。これによって今後さらに運用するマシンが増えたとしてもそれぞれの健康状態を常に監視することができるようになりとても便利である。