環境
- 作業対象
ESXi7.0 - 作業環境
windows10
、java8u311(NMONVisualizerversionのファイル形式jarを実行)
、NMONVisualizerversion (2021-04-04)
目的
数日間仮想マシンに負荷をかけた際に、ESXiホストのストレージI/O日毎に区切ったログを出力させる。
課題
esxtop > xxxx.csv で対処するとログアウト時にコマンドが終了する。
ログインしたまま対応できる環境だとしても1つのファイルが容量が大きくなりすぎる。
方法
- 1.esxtopコマンドの設定ファイルを作成
- 2.設定ファイルを配置
- 3.csvファイル出力をさせるスクリプト作成
- 4.日毎でバックグラウンド実行させるためにcron登録
- 5.csvファイルをNMONVisualizerでグラフ表示
作業詳細
-
0.ESXiへSSH接続
一般的な操作なので省略します。 -
1.esxtopコマンドの設定ファイルを作成
取得が必要な値以外は除外し設定ファイルを出力させる。
(参考:https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.monitoring.doc/GUID-D89E8267-C74A-496F-B58E-19672CAB5A53.html)
esxtop
h
Switch Displayの項目をみて取捨選択をする。
今回はストレージI/Oが目的なので、u:disk device以外の項目は出力させないようにします。
ctrl+cを押下しトップ画面に戻る
※トップ画面自体はSwitch display表記上のc:cpuに該当します。
f
※印は取得項目
abdefk
※印を消してenterを押下すると、取得項目がなくなり黒い画面に切り替わります。
◆上記c:cpuで行った取得項目の除外を
i:interrupt、m:memory、 n:network、 d:diskadapter、 v:diskVM、 p:powermgmt、 x:vsanでも実施する。
u
f
b f i
DEVICE、 IOSTATSのみ取得に設定をする。
enterを押下
W(※大文字)
取得対象を設定したファイル(esxtop60rc)出力を空白のままでenterを押下する。
ctrl+cを押下し、通常コマンドプロンプトに戻ります。
ls -al
.esxtop60rcがエクスポートされていることを確認する。
esxtop -export-entity config
エクスポートしたconfigはesxtopで表示されていたdevice名やプロセス名称の一覧です。
ls -al
configファイルが出力されていることを確認する。
vi config
Device以外は不要なので画像と同じく行削除し保存をする。
- 2.設定ファイルを配置
mkdir /vmfs/volumes/<外部ストレージ・datastore1>/<任意フォルダ>
※ログイン直下ディレクトリでは容量制限があるため、専用フォルダを作成する。
mv .esxtop60rc /vmfs/volumes/<外部ストレージ・datastore1>/<任意フォルダ>
mv config /vmfs/volumes/<外部ストレージ・datastore1>/<任意フォルダ>
cd /vmfs/volumes/datastore1/esxtop
ls -al
- 3.csvファイル出力をさせるスクリプト作成
vi esxtop.sh
下記内容を環境に合わせて編集する。
一分間に一回取得する設定としています。
# !/bin/sh
date=$(date "+%Y%m%d_%H%M%S")
hostname=$(hostname)_
exportfile="esxtop_$hostname$date"
cd /vmfs/volumes/<外部ストレージ・datastoreX>/<任意フォルダ>
nohup esxtop -import-entity config -c .esxtop60rc -d 60 n $1 -b > $exportfile.csv
- 4.日毎でバックグラウンド実行させるためにcron登録(参考:https://kb.vmware.com/s/article/1033346?lang=ja)
vi /var/spool/cron/crontabs/root
cronへスクリプトを追記する。ESXiはUTCで稼働している為、日本時間に合わせ毎日15:00開始にしています。
一分毎に取得するesxtopを1440回繰り返し一日分を取得できるようにしています。
追記した行はESXiのシャットダウンで消える仕様となっています。
# min hour day mon dow command
1 1 * * * /sbin/tmpwatch.py
1 * * * * /sbin/auto-backup.sh ++group=host/vim/vmvisor/backup.sh
0 * * * * /usr/lib/vmware/vmksummary/log-heartbeat.py
*/5 * * * * /bin/hostd-probe.sh ++group=host/vim/vmvisor/hostd-probe/stats/sh
00 1 * * * localcli storage core device purge
*/10 * * * * /bin/crx-cli gc
00 15 * * * /vmfs/volumes/<外部ストレージ・datastorex>/<任意フォルダ>/esxtop.sh 1440 & ###この行を追加####
cat /var/run/crond.pid
<プロセスID>
稼働中crondのプロセスIDを確認する。
kill -HUP <プロセスID>
crondを停止
/usr/lib/vmware/busybox/bin/busybox crond
crondを再実行
cat /var/run/crond.pid
<プロセスID>
プロセスIDが停止前と違う値になっていることを確認する。
▼翌日以降はcsvファイルがエクスポートされています。
- 5.csvファイルをNMONVisualizerでグラフ表示
/vmfs/volumes/<外部ストレージ・datastorex>/<任意フォルダ>/esxtop_<ホスト名>_yyyymmdd_150000.csv
tera termで上記csvファイルを作業端末へ保存します。
NMONVisualizerversion (https://nmonvisualizer.github.io/nmonvisualizer/)
を実行し、左上メニュー内のFile>Loadを選択します。
左メニューから確認をしたいDeviceを選択する。
最大値は環境ごとに異なるため、動作影響がでるまで負荷をかけた結果と比較することになるかと思います。
今回はI/Oに焦点を当てていますがcsvファイルにはcpuとメモリのデータも含まれています、比較するのに活用してください。