【監視】vCenterをPrometheusで監視する方法

スポンサーリンク
Prometheus
スポンサーリンク

PrometheusでvCenter経由で仮想マシンのリソース監視をしたい

前の記事でも書いたが、仕事でvCenterServerのデータをPrometheusで収集してGrafanaで表示する・・・というタスクをもらった。
vCenterのデータをPrometheusで収集する方法はいくつかあるが、今回は下記Githubで公開されているVMware exporterを使って収集できるようにする。
こちらの仕組みとしては、pyvmomiというVMwareのAPIをpythonで実行できる仕組みを用いてvCenter上の情報を取得し、Prometheus形式のWEBページを作成するというものである。
作成したWEBページをPrometheus側で情報ソース(ターゲット)として追加してやればよい。

GitHub - pryorda/vmware_exporter: VMWare vCenter Exporter for Prometheus
VMWare vCenter Exporter for Prometheus. Contribute to pryorda/vmware_exporter development by creating an account on GitH...

Prometheusのインストール方法

Prometheusのインストール方法については下記記事を参照してほしい。

環境

vmware exporterは今回専用のサーバーを用意してインストールする。
スペックは収集するデータ量にも依るが、ほとんどリソースを消費しないので以下程度で十分である。

CentOS 7.9 ※最小インストール
 CPUコア数:2コア(CPU性能値は2.6GHzくらいあれば十分)
 メモリ数 :4GB
 ディスク :40GB
なお、NWはPrometheus、vCenterServerと同一セグメントにあり、インターネットへの通信が可能なこととする。
企業などでインターネットへの直接通信が可能であることは難しいと思うので、その場合はプロキシ経由なり環境に合わせてほしい。

vmware exporterを専用サーバーを用意してインストールする理由

まずそもそもとして、vmware exporterのインストール先候補は3つある

① vCenterServerに直接インストール
② Prometheusをインストールしているサーバーにvmware exporterもインストール
③ 専用サーバーを用意してインストール

①については強くおすすめしない。vCenterServerはPhoton OSという専用のアプライアンスOSを利用している。vmware exporterのインストールにはpython3のバージョン指定やモジュールの導入も必要であるため、動作不良を起こす可能性が高い(特に、OS再起動を行った場合に正常に立ち上がらない危険がある)
最悪サポートを受けられなくなる恐れもあるのでやめておこう

②について、これはインストールすること自体は決して問題ではない。変にコンポーネントも増えないので耐障害性という意味では正しいかもしれない。しかし。Prometheusサーバーの役割を増やしてしまうことで、負荷やhttpsプロセス数の推定が難しくなったり、余計なセキュリティリスクを抱える懸念もある。

③は必要なサーバー数こそ増えてしまうものの、1サーバー1機能のシンプルな構成となり、またPrometheusが稼働中だった場合に影響を極力少なくできることがメリットである。

vmware exporterをインストールする

vmware exporterをダウンロードする

vmware exporterのGithubページから資材をダウンロードする。
※curlとかでやってもいいし、公式サイトの説明どおりdockerでもいい。このへんはお好みで。

「Code」をクリックして「Download ZIP」をクリックする。

ダウンロードしたZIPファイルを解凍し、tar.gzに変える。変換にはLhaplus 解凍/Lhaplus 圧縮を利用するとよい。
※わざわざZIPを解凍してtar.gzに圧縮し直す理由:無い。ZIPのままunarで解凍とかでもいいはず。ただ当時の私はunarの存在を知らず、unzipだと日本語がある場合に文字化けすることだけ知っていた。特に日本語は含まれていないのでunzipでも問題ないと思うが、個人的な慣習でこうしただけである。

これにより、「vmware_exporter-main.tar.gz」という資材ができたはず。以降はこれを資材名として扱う。

出来た資材は、winSCPなどのファイル連携ツールを利用して/usr/local/srcに格納しておく。
vmware exporterのダウンロードは以上である。

vmware exporterのインストール

vmware exporterをインストールするにあたり、以下4つの事前インストールを行う。

  • python3 (3.6以上)
  • pip
  • service_identity ※pipモジュール
  • requests ※pipモジュール

python3のインストール

#yum install python3

上記コマンドでpython3の最新バージョンをインストールする

pipのインストール

#curl -kL https://bootstrap.pypa.io/get-pip.py | python3

上記コマンドでpipの最新バージョンをインストールする
なお、python3で利用するため、python3で最後は指定すること。
pythonのままだとpython2で実行してしまう。

ここで
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
というメッセージが出ると思う。

これは、venv(仮想プロジェクト環境)を指定してやらないと、グローバルインストール扱いになり、もし他にもpythonやpipで利用しているパッケージ/モジュールがある場合に情報の上書きを行ってしまい、動作不良を引き起こす可能性があることを警告している。

今回の場合、vmware exporter専用のサーバーを用意しているのでこのままで問題ない。

service_identity のインストール

#pip install service_identity

上記コマンドでservice_identityをインストールする

事前にインストールしておかないと、vmware exporterをインストールした際に以下のようなエラーメッセージが出る可能性がある。

【インストール時】
Installed /usr/local/lib/python3.9/site-packages/pyasn1_modules-0.2.8-py3.9.egg
error: The 'pyasn1' distribution was not found and is required by service-identity

【vmware exporter実行時】
pkg_resources.DistributionNotFound: The 'pyasn1' distribution was not found and is required by service-identity

requests のインストール

#pip install requests

上記コマンドでrequestsをインストールする

事前にインストールしておかないと、vmware exporterをインストールした際に以下のようなエラーメッセージが出る可能性がある。

【インストール時】
Installed /usr/local/lib/python3.6/site-packages/urllib3-1.26.4-py3.6.egg
error: idna 3.1 is installed but idna<3,>=2.5 is required by {'requests'}

vmware exporterの解凍とコンフィグ設定

ここまで進んだら、いよいよ先程ダウンロードしたvmware exporterの資材を解凍しインストールしていく。

#cd /usr/local/src  ※資材格納場所
#tar zxvf vmware_exporter-main.tar.gz
#cd vmware_exporter-main
#python3 setup.py install

Finished processing dependencies for vmware-exporter==XXX(バージョン情報)と出ればOK。

続いて、vmware exporterで情報採取するvCenterServerの情報をconfigファイルに設定していく。
configファイルは最初存在しないので、viで新規作成する。
なお、このconfig.yml内で取得対象情報など様々に設定変更できるが、ここでは基本シンプルに取得できる全情報を取得する内容にしておく。詳しい説明はGithubページかReadmeを参照されたし。

#vi config.yml

---<以下、config.ymlの設定内容>---

default:
    vsphere_host: "xxx.xxx.xxx.xxx"  #vCenterのIPアドレス
    vsphere_user: "administrator@vsphere.local" #vCenterのhttpsページにログインするユーザー
    vsphere_password: "password" #上記ユーザーに対応するパスワードを記載
    ignore_ssl: True    #httpsアクセス時のssl自己証明書に対する警告の無視設定
    specs_size: 5000
    fetch_custom_attributes: True
    fetch_tags: True
    fetch_alarms: True
    collect_only:
        vms: True
        vmguests: True
        datastores: True
        hosts: True
        snapshots: True

firwallのポート穴あけを行う

本vmware exporterでは、デフォルトではPrometheus向けのWEBページを9272ポートで作成する。
そのため、他のサーバーから9272ポートにアクセスできるようにfirewallの穴あけを行う。

#firewall-cmd --add-port=9272/tcp --zone=public --permanent
#firewall-cmd --reload
#firewall-cmd --list-ports --zone=public

自動起動用のシェルを作成する

vmware exporterがサーバー再起動されても自動起動されるようにするため、自動起動用のシェル作成とsystemctlの設定を行う。

自動起動用シェルは以下内容で作成する。

#vi /usr/local/src/vmware_exporter-main/reboot.sh

---<以下reboot.shの内容>---
cd /usr/local/src/vmware_exporter-main
vmware_exporter -c config.yml

※ここの設定内容は、改良の余地がある。シェルパスなどは環境変数に設定したほうがおそらく好ましい。本記事ではとりあえずわかりやすさと動作実績を優先してこの形で記載する。

systemctlの設定は以下内容で作成する。

#vi /usr/lib/systemd/system/prometheus-vmware-exporter.service

---<以下prometheus-vmware-exporter.serviceの内容>---
[Unit]
Description=vmware_exporter for Prometheus
Documentation=https://github.com/pryorda/vmware_exporter
After=network.target

[Service]
Type=simple
WorkingDirectory=/usr/local/src/vmware_exporter-main
User=root
Group=root
ExecStart=/bin/bash /usr/local/src/vmware_exporter-main/reboot.sh
Restart=always

[Install]
WantedBy=multi-user.target

作成したサービスを起動し、vmware-exporterを立ち上げる

いよいよvmware exporterを起動する。先程作成したサービスを用いて以下の通り自動起動の設定とサービス起動を行う

#systemctl daemon-reload
#systemctl enable prometheus-vmware-exporter.service
#systemctl start prometheus-vmware-exporter.service

systemctl status prometheus-vmware-exporter を実行し、以下のような状態になっていればOK

● prometheus-vmware-exporter.service - vmware_exporter for Prometheus
   Loaded: loaded (/usr/lib/systemd/system/prometheus-vmware-exporter.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2021-08-02 22:56:29 JST; 3s ago
     Docs: https://github.com/pryorda/vmware_exporter
 Main PID: 6704 (bash)
   CGroup: /system.slice/prometheus-vmware-exporter.service
           tq6704 /bin/bash /usr/local/src/vmware_exporter-main/reboot.sh
           mq6705 /usr/bin/python3 /usr/local/bin/vmware_exporter -c config.yml

 8月 02 22:56:29 server1 systemd[1]: Started vmware_exporter for Prometheus.
 8月 02 22:56:31 server1 bash[6704]: 2021-08-02 22:56:31,461 INFO:Starting web server on port :9272

vCenterの情報が取得出来ていることの確認を行う

サービス起動が問題なく完了したら、以下URLにアクセスしvCenterの情報が取得できてることを確認する。

http://xxx.xxx.xxx.xxx:9272/metrics

※xxx.xxx.xxx.xxxはvmware exporterをインストールしたサーバーのIPアドレス

ちゃんと取得できていれば、以下のような画面になる。
※ここでは192.168.1.153がvmware exporterのIPアドレスである。
 また、cluster_nameやvm_nameといったvalueラベルに表示されている値がクラスター名や仮想マシン名に該当する。

逆に、うまく行っていないときはエラー画面や、以下のような画面になる。

以上でvmware exporterの設定は終了である。

最後に、Prometheusサーバーで取得するときの設定

vmware exporterが収集したデータをPrometheusでも取得するためには、prometheusの情報収集設定ファイル(デフォルトならprometheus.yml)に以下文言を追記する。

  - job_name: 'vcenter'
    static_configs:
    - targets: ['xxx.xxx.xxx.xxx:9272']

正しく設定/収集ができていればprometheusのtarget画面が以下のようになる。

仮想マシン数が非常に多い場合、レスポンスを受け取るのに非常に時間がかかる場合がある。prometheusのデフォルトのscrape_timeout時間を超過してしまうようであれば、ここでscrape_timeoutの時間を延ばしておくと良い

改版履歴

2021/08/03 初版作成

コメント

タイトルとURLをコピーしました