Skip navigation
2014

ESXi の VM には、vCPU数、仮想メモリ容量、仮想ディスク、仮想NIC・・・

といった VM への一般的なリソース割り当て設定以外にも、

VM の動作を変更できるフラグ設定がいくつかあります。


vSphere Client では主に、仮想マシンのプロパティの「オプション」タブや、

vm-flags-01.png

 

「リソース」タブのあたりで設定できます。

vm-flags-02.png


このフラグ設定は、vSphere Client や Web Client や .vmx ファイルだけでなく、

PowerCLI からでも確認することができます。


たとえば、vm01 という VM がある場合、

PowerCLI> Get-VM vm01

 

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

vm01                 PoweredOn  1        0.250

 

PowerCLI からは下記のようにフラグ設定を見ることができます。

PowerCLI> (Get-VM vm01).ExtensionData.Config.Flags

 

DisableAcceleration      : False

EnableLogging            : True

UseToe                   : False

RunWithDebugInfo         : False

MonitorType              : release

HtSharing                : any

SnapshotDisabled         : False

SnapshotLocked           : False

DiskUuidEnabled          : False

VirtualMmuUsage          : automatic

VirtualExecUsage         : hvAuto

SnapshotPowerOffBehavior : powerOff

RecordReplayEnabled      : False

DynamicType              :

DynamicProperty          :

 

そして、下記のようなコマンドラインにすると、

見たいフラグ設定だけを表示することができます。

※赤字の部分で、2つのフラグ(VirtualMmuUsage と VirtualExecUsage)だけに絞って表示しています。

PowerCLI> (Get-VM vm01).ExtensionData.Config.Flags | select VirtualMmuUsage,VirtualExecUsage | fl

 

VirtualMmuUsage  : automatic

VirtualExecUsage : hvAuto

 

同様の情報は、下記のように表示することもできます。

PowerCLI> Get-VM vm01 | select Name,{$_.ExtensionData.Config.Flags.VirtualMmuUsage},{$_.ExtensionData.Config.Flags.VirtualExecUsage} | ft -AutoSize

 

Name $_.ExtensionData.Config.Flags.VirtualMmuUsage $_.ExtensionData.Config.Flags.VirtualExecUsage

---- --------------------------------------------- ----------------------------------------------

vm01 automatic                                     hvAuto

 

複数 VM のフラグ設定をまとめて表示する場合は、

上記のうち2つ目のコマンドラインのほうが向いています。

ヘッダを整えて、VM の起動状態も見られるようにしてみました。

Get-VM 直後の 「vm0?」 の部分で、表示対象の VM を絞っています。

※「?」だと1文字、「*」だと複数文字のかわりになります。

※ちょっと長いですが、コマンドラインは1行で実行します。

PowerCLI> Get-VM vm0? | select Name,PowerState,@{N="VirtualMmuUsage";E={$_.ExtensionData.Config.Flags.VirtualMmuUsage}},@{N="VirtualExecUsage";E={

$_.ExtensionData.Config.Flags.VirtualExecUsage}} | sort Name | ft -AutoSize

 

Name PowerState VirtualMmuUsage VirtualExecUsage

---- ---------- --------------- ----------------

vm01  PoweredOn automatic       hvAuto

vm02  PoweredOn off             hvOff

vm03  PoweredOn off             hvOn

vm04  PoweredOn on              hvOn

vm05 PoweredOff automatic       hvAuto

vm06 PoweredOff automatic       hvAuto

vm07 PoweredOff automatic       hvAuto

 

ちなみに、上記の VM は「CPU/MMU 仮想化」設定を次のように変更してみています。

※今回は、ESXi 5.5 u1 と PowerCLI 5.1 R2 の環境で試しています。

  • vm01 → 自動
  • vm02 → ソフトウェア
    (命令セットとMMU仮想化にソフトウェアを使用)
  • vm03 → CPU
    (Intel VT-x/AMD-Vを命令セット仮想化に使用し、ソフトウェアをMMU仮想化に使用)
  • vm04 → CPU/MMU
    (Intel VT-x/AMD-Vを命令セット仮想化に使用し、Intel EPT/AMD RVIをMMU仮想化に使用)

 

フラグ設定を変更する機会はあまりないかもしれませんが、

もしかしたら下記のようなケースで複数台の VM の設定状態を

まとめて確認してみたい場合などに使えるかもしれません。

 

Windows 2008 R2 and Solaris 10 64-bit virtual machines blue screen or kernel panic when running on ESXi 5.x with an Intel E5 v2 series processor (2073791)

http://kb.vmware.com/kb/2073791

 

以上、VM のフラグ設定を PowerCLI で表示してみる話でした。

vSphere 5.5 からの新機能、AppHA をデプロイしてみました。

今回は、細かい設定などは省略します・・・

 

AppHA の紹介について

 

AppHA はvSphere HA と連携して、VM のアプリケーション保護をします。

ちなみに、ここでの「アプリケーション保護」というのは、

アプリ(サービス/プロセス)が障害で停止した時に自動再起動したり、

アプリの自動再起動でサービスが復活できなかった時にVMをリセットしたり、

といったことを意味します。

 

AppHA について、くわしくは下記を参照して下さい。

 

AppHA の機能紹介ページ

http://www.vmware.com/jp/products/vsphere/features-application-HA

 

AppHA のマニュアル (現時点の最新版は v1.1)

https://www.vmware.com/support/pubs/appha-pubs.html

 

Japan Cloud Infrastructure Blog

VMware vSphere 5.5 AppHAについて

https://blogs.vmware.com/jp-cim/2013/09/vmware-vsphere5-5-appha.html

 

 

AppHA の見え方


AppHA は、Hyperic Server と AppHA の仮想アプライアンスで構成されます。

 

vCenter Hyperic

  • Hyperic Server と、Hyperic用のDBサーバで構成されます。
  • それぞれ、Linux等にインストールして構築して利用することもできるようですが、
    AppHAを試すには、vApp (.ovaファイル)をデプロイするのが一番簡単だと思います。
  • vApp 版の Hyperic Server の には、2つの VM が含まれます。
    ※VMの名前はどちらもデフォルトのままです。
    • vCenter_Hyperic_Server → Hyperic Server のインストールされた SUSE Linux。
    • vFabric_vPostgres_DB → Hyperic Server の利用するDBサーバ。これも SUSE Linux。

 

vSphere App HA

  • 仮想アプライアンス(これも .ovaファイル)として提供されています。
  • これも SUSE Linux です。

 

上記の vApp、仮想アプライアンスをデプロイすると、Web Clientでは下記のように見えます。

AppHA関連の VM は3つです。

一緒に見えている db01 という VM は、ためしに AppHA で保護してみるために用意したもので

AppHA の機能には関係ないものです。

appha11-01.png

 

AppHA では、保護したいアプリケーションごとに AppHA 独自のポリシーを作成できます。

ちなみに AppHA 1.1 からは、Oracle Database も保護対象にできるようになりました。


下記のようにポリシーを作成しておき、

appha11-02.png

 

保護したいアプリケーションを稼働させている VM に紐づけます。

※「アプリケーションの可用性」タブは AppHA をデプロイすると表示されるようになります。

appha11-03.png

 

AppHA は vSphere HA と連携します。

vSphere HA の設定では、

「仮想マシンの監視」の設定を「仮想マシンとアプリケーションの監視」にしておきます。

appha11-04.png

 

AppHA は、vCenter Hyperic という監視ソリューションと連携して動作します。

上記のようなポリシー設定の前に、

AppHA と Hyperic の連携設定をしておきます。

appha11-05.png

 

Hyperic Server の画面は、下記のような感じです。

vCenter_Hyperic_Server VM に、Web ブラウザでアクセスして操作します。

※ちなみに、Hyperic のバージョンは 5.8.1 です。

 

AppHA を動作させるためには Hyperic に下記を登録しておく必要があります。

  • vCenter(例では vcenter55-2.vmad.local という名前)
  • 保護対象アプリの VM (例では db01 という名前)

appha11-11.png

 

Hyperic に登録するそれぞれの OS に、Hyperic の Agent を導入しておく必要があります。

※例は保護対象のVMだけですが・・・

 

保護対象 VM のゲスト OS では、VMware Tools とは別に、

Hyperic Agent も起動した状態になります。

※例の Agent のパス(/opt/vmware/hyperic/bin/)は適当に決めました・・・

[oracle@db01 ~]$ cat /etc/oracle-release

Oracle Linux Server release 6.5

[oracle@db01 ~]$ vmware-toolbox-cmd -v

9.4.5.30548 (build-1598834)

[oracle@db01 ~]$ /etc/vmware-tools/services.sh status

vmtoolsd is running

[oracle@db01 ~]$ /opt/vmware/hyperic/bin/hq-agent.sh status

HQ Agent is running (PID:1944).

Current agent bundle: agent-x86-64-linux-5.8.1

Server IP address: 192.168.5.186

Server (SSL) port: 7443

Agent listen port: 2144

 

Hyperic に vCenter を登録すると、このように見えます。

システムの構成情報や、監視によるヘルスチェックの状態などが見えます。

appha11-12.png

 

保護対象のVM(db01 という DB サーバ)では、Oracle 11g も監視されています。

appha11-13.png

 

AppHA があれば、Guest SDK で微妙な作りこみをしなくても

vSphere HA でアプリケーション保護までできるケースが増えるはず・・・

 

ちなみに、以前こんなこともしてみました。

vSphereHA と Guest SDK のアプリケーション監視。

vSphereHA + Guest SDK で httpd を簡易アプリケーション監視。

 

以上、vSphere AppHA についてでした。

VM に対してトリガーされている vCenter アラームを、

PowerCLI で見てみようと思います。


vSphere Client ではこのように見えていて、

vm-alarm-01.png


Web Client ではこのように見えているものです。

※例では2つのVM に(vm02 と vm05)アラームがトリガーされています。

vm-alarm-02.png

 

今回は、下記の VM のアラームを確認します。

PowerCLI> Get-Cluster cluster02 | Get-VM

 

Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

vm05                 PoweredOn  1        0.250

vm03                 PoweredOn  1        0.250

vm06                 PoweredOn  1        0.250

vm04                 PoweredOn  1        0.250

vm07                 PoweredOff 1        0.250

vm02                 PoweredOn  1        0.250

vm01                 PoweredOn  1        0.250

 

GUI で表示されていたとおり、vm02 と vm05 が「yellow」(警告)になっています。

PowerCLI> Get-Cluster cluster02 | Get-VM | select Name,{$_.ExtensionData.OverallStatus} | ft -AutoSize

 

Name $_.ExtensionData.OverallStatus

---- ------------------------------

vm05                         yellow

vm03                          green

vm06                          green

vm04                          green

vm07                          green

vm02                         yellow

vm01                          green

 

vm05 のアラームの内容は、下記のように確認することができます。

VM の「TriggeredAlarmState」 を見ると、

トリガーされたアラームの ID (下記では「Alarm : Alarm-alarm-51」)がわかるので・・・

PowerCLI> Get-VM vm05 | % {$_.ExtensionData.TriggeredAlarmState}

 

Key                : alarm-51.vm-87

Entity             : VirtualMachine-vm-87

Alarm              : Alarm-alarm-51

OverallStatus      : yellow

Time               : 2014/04/12 0:12:56

Acknowledged       : False

AcknowledgedByUser :

AcknowledgedTime   :

LinkedView         :

DynamicType        :

DynamicProperty    :

 

それをもとに、アラームの定義を調べます。

「Name」や、「Description」などから、何のアラームなのかがわかります。

PowerCLI C:\> Get-AlarmDefinition -Id Alarm-alarm-51 | fl

 

Entity              : Datacenters

Description         : Default alarm to alert when vSphere HA reset a virtual machine

Enabled             : True

Name                : vSphere HA virtual machine monitoring action

ExtensionData       : VMware.Vim.Alarm

ActionRepeatMinutes : 0

Id                  : Alarm-alarm-51

Uid                 : /VIServer=vmad\administrator@vcenter55-2.vmad.local:443/Alarm=Alarm-alarm-51/

 

コマンドラインが長くなりますが、下記のようにすると見やすくなります。

※それぞれの VM の、直近のアラームを1つだけ表示しています。

PowerCLI> Get-Cluster cluster02 | Get-VM | select Name,@{N="Status";E={$_.ExtensionData.OverallStatus}},@{N="Alarm";E={(Get-AlarmDefinition -Id ($_.ExtensionData.TriggeredAlarmState | sort Time -Descending | select -First 1).Alarm).Name}} | sort Name | ft -AutoSize

 

Name Status Alarm

---- ------ -----

vm01  green

vm02 yellow vSphere HA virtual machine monitoring action

vm03  green

vm04  green

vm05 yellow vSphere HA virtual machine monitoring action

vm06  green

vm07  green

 

そして、上記のコマンドラインをもとに、スクリプトを作ってみました。

 

get_vm_status.ps1

$vms = $args[0]

$vms | % {

  $vm =$_

  $alarm = $vm.ExtensionData.TriggeredAlarmState | sort Time -Descending | select -First 1

  $alarm_id = $alarm.Alarm

  $alarm_name = if($alarm_id -ne $null){Get-AlarmDefinition -Id $alarm_id}

  $vm | select `

    Name,

    @{N="Status";E={$_.ExtensionData.OverallStatus}},

    @{N="Alarm";E={$alarm_name}}

} | sort Name | ft -AutoSize

 

下記のように実行すると、同様の結果が表示できます。

※スクリプトには「(Get-VM <VM名>)」など、VM の集合になるものを引数として指定します。

※今回の例では、cluster02  クラスタ に含まれる VM のアラームを表示ししています。

PowerCLI> .\get_vm_status.ps1 (Get-Cluster cluster02 | Get-VM)

 

Name Status Alarm

---- ------ -----

vm01  green

vm02 yellow vSphere HA virtual machine monitoring action

vm03  green

vm04  green

vm05 yellow vSphere HA virtual machine monitoring action

vm06  green

vm07  green

 

VM にトリガーされたアラームは GUI からでも確認できますが、

PowerCLI でうまく表示することができれば

サーバ稼働状態のレポート作成などで便利かもしれません。

 

以上、VM のトリガーされたアラームを PowerCLI で見てみる話でした。

PowerCLI で ESXi から性能情報を取得することができます。

ためしに、それをヒストグラムにしてみました。

 

今回は、このポストの続きです・・・

ESXi データストアへの VM 配置について。(PowerCLI でデータストア空き容量と IOPS を見てみる)

 

たとえば、直近の1時間で、

「ds_local_02 というデータストアへの書き込みが他より多そう」

な時があったとして・・・

※このスクリプトは、上記ポストで使ったものです。

PowerCLI> .\get_datastore_stat.ps1 | sort Datastore,Metric | ft -AutoSize

 

Datastore   Metric                                Count Average  Sum Maximum Minimum Begin    End

---------   ------                                ----- -------  --- ------- ------- -----    ---

ds_local_01 datastore.numberreadaveraged.average    180 0.36      65      19       0 09:06:20 10:06:00

ds_local_01 datastore.numberwriteaveraged.average   180 2.97     535       6       2 09:06:20 10:06:00

ds_local_02 datastore.numberreadaveraged.average    180 0.07      12       6       0 09:06:20 10:06:00

ds_local_02 datastore.numberwriteaveraged.average   180 31.28   5630      61      16 09:06:20 10:06:00

ds_local_03 datastore.numberreadaveraged.average    180 1.13     204       5       0 09:06:20 10:06:00

ds_local_03 datastore.numberwriteaveraged.average   180 9.99    1799      18       7 09:06:20 10:06:00

 

工夫すると、

下記のような見方もできたりします。

 

まず、

この ESXi にはデータストアは 3 つあります。

PowerCLI> Get-VMHost esxi501 | Get-Stat -Stat datastore.numberwriteaveraged.average -Realtime  | select Instance -Unique

 

Instance

--------

4e1d568f-c2bf5a1e-8739-d48564c9f062

4e47f95c-87799c29-74cb-d48564c9f062

4e1d5808-bd0e9ffb-e02d-d48564c9f062

 

そして、データストア名は下記のようになっています。

データストア「ds_local_02」のIDは、

4e1d5808-bd0e9ffb-e02d-d48564c9f062 でした。

PowerCLI> Get-VMHost esx501 | Get-Stat -Stat datastore.numberwriteaveraged.average -Realtime  | select Instance -Unique | select Instance,{Get-Datastore -id ("Datastore-" + $_.Instance)} | ft -AutoSize

 

Instance                            Get-Datastore -id ("Datastore-" + $_.Instance)

--------                            ----------------------------------------------

4e1d568f-c2bf5a1e-8739-d48564c9f062 ds_local_01

4e47f95c-87799c29-74cb-d48564c9f062 ds_local_03

4e1d5808-bd0e9ffb-e02d-d48564c9f062 ds_local_02

 

Get-Stat で、 ds_local_02 の

平均書き込み回数(datastore.numberwriteaveraged.average)だけ取得します。

それを、PowerShell の group(Group-Object)でグループ化してみると・・・

平均書き込み回数 で、ヒストグラムなものが作れたりします。

 

表示結果については

  • 「Name」列は、Get-Stat で取得した Value の値(これをもとに group 化している)
  • 「"o"*$_.Count」列は、Valueごとの登場回数

です。

たとえば、取得した性能値で、

「datastore.numberwriteaveraged.average」が「38」だったのは13回のようです。

 

なんとなく大きな山が2つ見えるので、少なくとも

2種類の書き込みによる要因がありそうな予感がします。

PowerCLI> Get-VMHost esx501 | Get-Stat -Stat datastore.numberwriteaveraged.average -Realtime | where {$_.Instance -eq "4e1d5808-bd0e9ffb-e02d-d48564c9f062"} | group Value | select Name,{"o"*$_.Count}| sort @{E={$_.Name -as [int]}} | ft -AutoSize

 

Name "o"*$_.Count

---- ------------

15   oo

16   oo

17   ooo

18   o

19   oooo

20   oooooooo

21   oooooooooooo

22   ooooo

23   ooooooooooooo

24   ooooooooooooo

25   ooooooooooo

26   oooooooo

27   oooo

28   ooo

30   oo

31   o

32   o

33   ooooo

34   ooooo

35   oooooooooo

36   ooooooooo

37   ooooooooo

38   oooooooooooo

39   oooooo

40   ooo

41   oooooo

43   ooo

44   ooooo

45   o

46   o

50   ooo

51   o

55   oo

56   o

57   o

59   o

61   oo

64   o

 

他にも、カウンタを変えて

書き込み遅延(datastore.totalwritelatency.average)を group 化してみると、

こんな感じに見えました。

こちらの「Name」列が表わすのは、平均書き込み遅延の「ミリ秒」です。

PowerCLI> Get-VMHost esx501 | Get-Stat -Stat datastore.totalwritelatency.average -Realtime | where {$_.Instance -eq "4e1d5808-bd0e9ffb-e02d-d48564c9f062"} | group Value | select Name,{"o"*$_.Count}| sort @{E={$_.Name -as [int]}} | ft -AutoSize

 

Name "o"*$_.Count

---- ------------

18   oo

19   o

20   ooo

21   o

22   ooooooooo

23   oooooo

24   ooooooooooooooo

25   ooooooo

26   oooooooooooooo

27   ooooooooooooooo

28   ooooooooooooooo

29   oooooooooooo

30   oooooooooooo

31   oooooooooooooooo

32   oooooooooooooo

33   ooooooo

34   oooooooooooo

35   ooooooo

36   ooo

37   o

38   o

39   ooo

40   o

41   o

42   o

44   o

 

ちなみに、

表示される列名を指定することもできます。

※上記とは別の時間帯で実行しているので結果も変化しています。

PowerCLI> Get-VMHost esx501 | Get-Stat -Stat datastore.numberwriteaveraged.average -Realtime | where {$_.Instance -eq "4e1d5808-bd0e9ffb-e02d-d48564c9f062"} | group Value | select @{N="W/sec";E={$_.Name}},@{N="Count";E={"o"*$_.Count}}| sort @{E={$_."W/sec" -as [int]}} | ft -AutoSize

 

W/sec Count

----- -----

17    oo

20    oooo

22    oooooooooo

23    ooooooo

24    ooooooooooooooooooooo

25    ooooooooooooooooo

26    ooooooooooooo

27    ooooo

28    oo

29    oo

30    o

31    oo

32    ooooo

33    oooooooooo

34    oooooooooooo

35    oooooooooo

36    oooooooooooooooo

37    ooooooo

38    ooooooo

39    o

40    oo

41    oooooo

42    ooo

43    oo

44    ooo

45    oo

46    o

53    o

55    o

56    oo

58    o

60    o

70    o

 

以上、PowerCLI の Get-Stat の楽しみ方についてでした。

なんと、vExpert 2014 に選ばれました。

 

vExpert 2014 Announcement

http://blogs.vmware.com/vmtn/2014/04/vexpert-2014-announcement.html

 

ちなみに、このブログでは

私が実務でやっていることは避けて、主に自宅ラボによるネタをポストするため

話題がコロコロ変わりますが

日本語圏のみなさまの VMware ライフの足しになればうれしいです。

 

以上です。これからもよろしくお願いします・・・