ESXiシェルでのリソース情報取得の仕方

# ESXiシェルでリソース情報を取得する
ESXiでホストおよびゲストOSのリソース情報を取得する機会があったため、内容をメモ。

#### 環境
* ESXi 5.5.1

SSH接続でESXiホストに接続し、esxtopコマンドを実行することでESXiのリソース情報を取得できる。出力形式は、Linuxのtopコマンドと類似している。

```
# esxtop
```

オプションは以下の通り。

|オプションフラグ |概要|
|------------|---|
|-b          |バッチモードで起動|
|-d ${sec}   |表示間隔(sec) ※2秒以上を設定|
|-n ${count} |表示回数|
|-a|すべてのリソースフィールド情報を表示|
|-import-entity ${list}|リソース表示対象リストの読み込み|
|-c ${conf}  |表示リソースフィールド設定ファイルの読み込み|

リダイレクトでファイルに出力する際は、CSV形式で出力される。
*注意：リソースの表示対象、フィールドを指定しないと膨大な情報が出力される。* 
#### コマンド例
2秒おきに1分間リソースをファイルに出力。

```
# esxtop -b -d 2 -n 30 -import-entity entity.list -c field.conf > resource.csv
```


#### リソース表示対象リスト
下記コマンドでesxtopでリソース取得できるプロセスリストをファイル出力できる。

```
# esxtop -export-entity example.list
```

```example.list
SchedGroup
  2 1 idle
  3 8208385 sh.5199748
  4 2 system
  5 8 helper
  ...
```


#### 表示リソースフィールド設定ファイル
esxtopのインタラクティブモードで”W”を入力することで、カレントディレクトリにファイル出力される。デフォルトでは、.esxtop50rcに出力される。

```/.esxtop50rc
ABcDEFghij
aBcDefgHijKLmnOpq
ABCdEfGhijkl
ABcdeFGhIjklmnop
aBCDEFGH
AbcDEFGHIJKLmno
ABCDeF
ABCDe
5c
```

設定ファイルの形式は特殊で設定行が各々のリソースに対応している。
対応表は以下の通り。

|設定値             |対応するパネル   |
|------------------|---------------|
|ABcDEFghij        |c:cpu          |
|aBcDefgHijKLmnOpq |m:memory       |
|ABCdEfGhijkl      |d:disk adapter |
|ABcdeFGhIjklmnop  |u:disk device  |
|aBCDEFGH          |v:disk VM      |
|AbcDEFGHIJKLmno   |n:network      |
|ABCDeF            |i:interrupt    |
|ABCDe             |p:power mgmt   |
|5c                |fin.           |

さらに設定ファイルの各行では、各リソースのどの項目を取得するかを大文字(on)と小文字(off)で表現している。ちなみにこの設定値は、esxtopをインタラクティブモードで実行しているときに”f”を入力することで確認できる。また、対象のアルファベットを入れ替えることでフィールドの表示順を変更できる。
詳細は以下の通り。（長文です）

```
<cpu>
Current Field order: ABcDEFghij

* A:  ID = Id
* B:  GID = Group Id
  C:  LWID = Leader World Id (World Group Id)
* D:  NAME = Name
* E:  NWLD = Num Members
* F:  %STATE TIMES = CPU State Times
  G:  EVENT COUNTS/s = CPU Event Counts
  H:  CPU ALLOC = CPU Allocations
  I:  SUMMARY STATS = CPU Summary Stats
  J:  POWER STATS = CPU Power Stats
```

```
<memory>
Current Field order: aBvDefgHijKLmnOpq

  A:  ID = Id
* B:  GID = Group Id
  C:  LWID = Leader World Id (World Group Id)
* D:  NAME = Name
  E:  NWLD = Num Members
  F:  MEM ALLOC = MEM Allocations
  G:  NUMA STATS = Numa Statistics
* H:  SIZE = MEM Size (MB)
  I:  ACTV = MEM Active (MB)
  J:  MCTL = MEM Ctl (MB)
* K:  SWAP STATS = Swap Statistics (MB)
* L:  LLSWAP STATS = Llswap Statistics (MB)
  M:  CPT = MEM Checkpoint (MB)
  N:  COW = MEM Cow (MB)
* O:  OVHD = MEM Overhead (MB)
  P:  CMT = MEM Committed (MB)
  Q:  ZIP = MEM Compression (MB)

```

```
<disk adapter>
Current Field order: ABCdEfGhijkl

* A:  ADAPTR = Adapter Name
* B:  PATH = Path Name
* C:  NPATHS = Num Paths
  D:  QSTATS = Queue Stats
* E:  IOSTATS = I/O Stats
  F:  RESVSTATS = Reserve Stats
* G:  LATSTATS/cmd = Overall Latency Stats (ms)
  H:  LATSTATS/rd = Read Latency Stats (ms)
  I:  LATSTATS/wr = Write Latency Stats (ms)
  J:  ERRSTATS/s = Error Stats
  K:  PAESTATS/s = PAE Stats
  L:  SPLTSTATS/s = SPLIT Stats
```

```
<disk device>
Current Field order: ABcdeFGhIjklmnop

* A:  DEVICE = Device Name
* B:  ID = Path/World/Partition Id
  C:  NUM = Num of Objects
  D:  SHARES = Shares
  E:  BLKSZ = Block Size (bytes)
* F:  QSTATS = Queue Stats
* G:  IOSTATS = I/O Stats
  H:  RESVSTATS = Reserve Stats
* I:  LATSTATS/cmd = Overall Latency Stats (ms)
  J:  LATSTATS/rd = Read Latency Stats (ms)
  K:  LATSTATS/wr = Write Latency Stats (ms)
  L:  ERRSTATS/s = Error Stats
  M:  PAESTATS/s = PAE Stats
  N:  SPLTSTATS/s = SPLIT Stats
  O:  VAAISTATS= VAAI Stats
  P:  VAAILATSTATS/cmd = VAAI Latency Stats (ms)
```

```
<disk VM>
Current Field order: aBCDEGFH

  A:  ID = Vscsi Id
* B:  GID = Grp Id
* C:  VMNAME = VM Name
* D:  VDEVNAME = Virtual Device Name
* E:  NVDISK = Num of Virtual Disks
* F:  IOSTATS = I/O Stats
* G:  LATSTATS/rd = Read Latency Stats (ms)
* H:  LATSTATS/wr = Write Latency Stats (ms)
```

```
<network>
Current Field order: AbcDEFGHIJKLmno

* A:  PORT-ID = Port Id
  B:  UPLINK = Uplink(Y/N)
  C:  PNIC = Physical Nic Properties
* D:  USED-BY = Used By Name
* E:  TEAM-PNIC = Team Uplink Physcial NIC Name
* F:  DNAME = Device Name
* G:  PKTTX/s = Packets Tx/s
* H:  MbTX/s = MegaBits Tx/s
* I:  PKTRX/s = Packets Rx/s
* J:  MbRX/s = MegaBits Rx/s
* K:  DRPTX/s = %Packets Dropped (Tx)
* L:  DRPRX/s = %Packets Dropped (Rx)
  M:  ACTN/s = Actions/s
  N:  MULTICAST/s = Multicast Packets/s
  O:  BROADCAST/s = Broadcast Packets/s
```

```
<interrupt>
Current Field order: ABCDeF

* A:  VECTOR = Interrupt Vector Id
* B:  COUNT/sec = Total Number of Interupts Per Second
* C:  TIME/int = Average Interrupt Processing Time (usec)
* D:  COUNT_x/sec = Number of Interupts Per Second On CPU x
  E:  TIME_x/int = Average Interrupt Processing Time (usec) on CPU x
* F:  DEVICES = Devices Using the Interrupt Vector
```

```
<power mgmt>
Current Field order: ABCDe

* A:  PCPU = PCPU Id
* B:  CPU Usage = CPU Usage time: %USED and %UTIL
* C:  %CState = Percentage of time spent in a C-State
* D:  %PState = Percentage of time spent in a P-State
  E:  %TState = Percentage of time spent in a T-State
```

ホストの大まかなリソースを取得したい場合は、リソース表示対象リストを空ファイルとして読み込むのがオススメです。
何も設定しないで自分がリソース情報を出力したときは、３万行以上出力されてとても整理できませんでした。いろいろと設定ファイルを編集して出力結果を確認しながら設定するのがいいと思います。

ESXiシェルが使えるといろいろ便利そうなので、引き続き学習したいなぁ。