PrometheusでvCenter経由で仮想マシンのリソース監視をしたい
前の記事でも書いたが、仕事でvCenterServerのデータをPrometheusで収集してGrafanaで表示する・・・というタスクをもらった。
vCenterのデータをPrometheusで収集する方法はいくつかあるが、今回は下記Githubで公開されているVMware exporterを使って収集できるようにする。
こちらの仕組みとしては、pyvmomiというVMwareのAPIをpythonで実行できる仕組みを用いてvCenter上の情報を取得し、Prometheus形式のWEBページを作成するというものである。
作成したWEBページをPrometheus側で情報ソース(ターゲット)として追加してやればよい。
Prometheusのインストール方法
Prometheusのインストール方法については下記記事を参照してほしい。
環境
vmware exporterは今回専用のサーバーを用意してインストールする。
スペックは収集するデータ量にも依るが、ほとんどリソースを消費しないので以下程度で十分である。
CentOS 7.9 ※最小インストール
CPUコア数:2コア(CPU性能値は2.6GHzくらいあれば十分)
メモリ数 :4GB
ディスク :40GB
なお、NWはPrometheus、vCenterServerと同一セグメントにあり、インターネットへの通信が可能なこととする。
企業などでインターネットへの直接通信が可能であることは難しいと思うので、その場合はプロキシ経由なり環境に合わせてほしい。
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画面が以下のようになる。
改版履歴
2021/08/03 初版作成
コメント