ESXi7.0 パフォーマンスログを日毎取得(esxtop+cron)

#環境
- 作業対象
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
```
![スクリーンショット 2021-12-26 192613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/31757f21-969c-d4cb-4ba6-45c5dd6bc165.png)

```
h
```

Switch Displayの項目をみて取捨選択をする。
今回はストレージI/Oが目的なので、u:disk device以外の項目は出力させないようにします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/e555ba1b-1ce2-e6bd-a4f5-9f2a8c34a988.png)


ctrl+cを押下しトップ画面に戻る
※トップ画面自体はSwitch display表記上のc:cpuに該当します。

```
f
```

不要な取得項目を停止する。
デフォルト値
![スクリーンショット 2021-12-26 192756.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/d9bb6442-6583-f947-8d08-cd1e714079b4.png)

※印は取得項目

```
abdefk
```

※印を消してenterを押下すると、取得項目がなくなり黒い画面に切り替わります。
![スクリーンショット 2021-12-26 193548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/d46aeef3-a31b-faae-2fc6-d6f4abda332b.png)

◆上記c:cpuで行った取得項目の除外を
　i:interrupt、m:memory、 n:network、 d:diskadapter、 v:diskVM、 p:powermgmt、 x:vsanでも実施する。



```
u
```

値の取得をしたいDeviceに表示切替をする。
![スクリーンショット 2021-12-26 195206.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/0fe2d5fe-a027-f98d-f160-eaf9150464e4.png)

```
f
```
フィールド設定画面に切り替えをする。
![スクリーンショット 2021-12-26 195319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/93aac7f9-f463-5aea-05e9-abb1ade77557.png)

```
b f i
```

DEVICE、 IOSTATSのみ取得に設定をする。
![スクリーンショット 2021-12-26 195429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/dbc38782-61ed-0b76-e0ed-02057aa2fdb8.png)
enterを押下
![スクリーンショット 2021-12-26 195656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/34df42ee-d85c-19b2-7869-2317444e40b0.png)


```
W(※大文字)
```
取得対象を設定したファイル(esxtop60rc)出力を空白のままでenterを押下する。
![スクリーンショット 2021-12-26 195840.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/9b9cb28d-41dd-808a-c9bc-fe394181ea8c.png)


ctrl+cを押下し、通常コマンドプロンプトに戻ります。

```
ls -al
```

.esxtop60rcがエクスポートされていることを確認する。
![スクリーンショット 2021-12-26 200209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/34af8ead-cd77-b34e-9993-ce03612dad8e.png)



```
esxtop -export-entity config
```

エクスポートしたconfigはesxtopで表示されていたdevice名やプロセス名称の一覧です。

```
ls -al
```
configファイルが出力されていることを確認する。

![スクリーンショット 2021-12-26 202243.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/55b22f84-657b-b51d-bfe2-b576f210a425.png)

```
vi config
```
Device以外は不要なので画像と同じく行削除し保存をする。
![スクリーンショット 2021-12-26 202822.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/3e921237-4132-5c78-9128-13efc9ec05f3.png)



- 2.設定ファイルを配置

```
mkdir /vmfs/volumes/<外部ストレージ・datastore1>/<任意フォルダ>
```

※ログイン直下ディレクトリでは容量制限があるため、専用フォルダを作成する。

```
mv .esxtop60rc  /vmfs/volumes/<外部ストレージ・datastore1>/<任意フォルダ>
mv config  /vmfs/volumes/<外部ストレージ・datastore1>/<任意フォルダ>
cd /vmfs/volumes/datastore1/esxtop
ls -al
```

![スクリーンショット 2021-12-26 204006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/41079618-dc76-21cd-8b93-c150ed1b6040.png)

- 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を選択します。

![スクリーンショット 2022-01-04 093948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/8b57445a-12db-d21d-6049-fb5d94a57fba.png)

csvファイルをLoadさせます。
![スクリーンショット 2022-01-04 122613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/4756c4fc-ad7e-2852-74fe-56d0200c1caf.png)

左メニューから確認をしたいDeviceを選択する。
最大値は環境ごとに異なるため、動作影響がでるまで負荷をかけた結果と比較することになるかと思います。
今回はI/Oに焦点を当てていますがcsvファイルにはcpuとメモリのデータも含まれています、比較するのに活用してください。
![スクリーンショット 2022-01-04 122925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660985/16613738-e1e6-c411-d26a-d344e8527a89.png)