はじめに
このシリーズでは、IBM CloudのBere Metal Servers for VPC上に構成されたVMware vSphereの環境をZabbixで監視する方法について複数の記事に分けて紹介しています。
- IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(環境構築編)
- IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(テンプレート編)
- IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(SNMP Trap編)
- IBM CloudのBare Metal Servers for VPC上に構成されたVMware vSphere環境をZabbixで監視する(SSHチェック編) -> この記事
この記事では、ZabbixでのSSHチェックにおける設定方法や監視項目について書いていきます。
また記事の最後に、これまでのまとめとして監視方法と項目の検討方法に関するの考察を簡単に記載します。
SSHチェック
Zabbixでは、SSHチェックという監視アイテムが存在します。エージェントレス型の監視方式で、監視対象のホストとsshにより接続を確立し、コマンドをホストに対して定期実行することでそのレスポンスを監視する方式です。任意のコマンドをホスト上で実行することができるため、非常に自由度の高い監視項目を設定することが可能です。
SSHチェックを実施するにはZabbixでlibssh2モジュールが有効化されている必要があります。libssh2をサーバーにインストールし、Zabbixをコンパイルする際に--with-ssh2
オプションを付与してください。
今回はESXiのハードウェア状況を確認するため、ESXiに対してSSHチェックを実施します。
SSHチェックのための事前準備
SSHチェックの設定方法についてはこちらの公式ドキュメントに記載があります。
特に難しい部分はなく、アイテムを作成するだけなのですが、Zabbix Serverから対象のホストに対してsshで接続できる状態にしておく必要があります。通常のsshと同様にパスワードによる方式か、公開鍵暗号を利用した方式を選択することができますので、要件に合わせて選択しましょう。
パスフレーズ認証方式
パスワード方式の場合、特にZabbix側に追加の設定は必要ありません。そのままSSHチェックを実施するアイテムを作成します。
下記のようなエラーが出た場合、ESXiサーバー側のsshサーバー設定を変更する必要があるかもしれません。
暗号化方式などを双方で同じものが利用できるように設定しておきましょう。
ちなみに、Zabbixで利用されているlibssh2ではrsaのみしかサポートされていないようです。
https://www.zabbix.com/documentation/current/en/manual/config/items/itemtypes/ssh_checks
私は下記のようにESXi側のホスト鍵の暗号化アルゴリズムにssh-rsa
を追加しました。(セキュリティ面などを考慮した上でどのように対応するか決定してください。)
HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-256,rsa-sha2-512,ssh-rsa
キーファイル認証方式
公開鍵暗号方式の場合は下記のようにZabbixの設定ファイルを変更し、Zabbix Serverを再起動します。
### Option: SSHKeyLocation
# Location of public and private keys for SSH checks and actions.
#
# Mandatory: no
# Default:
SSHKeyLocation=/usr/lib/zabbix/.ssh
ssh-keygen
コマンドで暗号鍵を作成し、上記で設定したディレクトリに暗号鍵を格納します。
また、下記のコマンドで公開鍵をESXiに登録し、公開鍵暗号方式での接続準備は完了です。
$ sudo -u zabbix ssh-copy-id root@<ESXi_IP>
暗号鍵方式では様々なエラーによりうまく接続ができない場合があります。下記のような方法で暗号化方式やディレクトリの権限設定を確認してみてください。
- 「zabbix」ユーザーでsshを実行し、デバッグモードで問題箇所を特定する
$ sudo -u zabbix ssh -vvv root@<ESXi_IP>
-
.ssh
とauthorized_keys
ディレクトリのパーミッションを確認する
sshの秘密鍵はそれを持つだけでサーバーにログインすることのできる、非常にセンシティブなデータです。そのため、パーミッションが甘めに設定されていても接続が拒否されるようになっています。(例えばauthorized_key
に書き込み権限が設定されていると公開鍵を書き込まれてしまう恐れがあります。)そこで、下記のようにパーミッションを設定する必要があります。
Zabbix Server側
$ chmod 700 /usr/lib/zabbix/.ssh
ESXi側
[root@esx-001:~] chmod 600 /etc/ssh/keys-root/authorized_keys
- ESXiのsshログファイルを見る
デバッグに非常に役に立ちます。ログデータはESXiの場合/var/log/auth.log
に格納されています。
SSHチェックのアイテム作成
キーは下記のような書式で書く必要があります。Descriptionの項目はホスト単位でユニークである必要があります。また、デフォルトのポートは22となっており、ホストインターフェースのポートは利用されません。
ssh.run[<Description>,<Host_IP>,<Port>,<Encoding>]
作成すると、定期的にsshでアクセスが行われ、記載したコマンドが実行されます。
SSHチェックにより監視できる項目
SSHチェックを利用するとどのような項目を監視することができるか確認します。基本的にはOS(ESXi)上で実行できるコマンドは全て実行することができるため、様々なコンポーネントのステータスを確認することができます。
ESXCLI
ESXiには、ESXiの設定や管理、情報収集を行うためのCLIが用意されています。ESXCLIという名称で、ハードウェアやネットワーク、ストレージなどに関するコマンドが提供されています。
例えば下記のような項目を確認することができます。
[root@esx-001:~] esxcli network nic list
Name PCI Device Driver Admin Status Link Status Speed Duplex MAC Address MTU Description
------ ------------ -------- ------------ ----------- ------ ------ ----------------- ---- -----------
vmnic0 0000:19:00.0 ionic_en Up Up 100000 Full 02:00:04:2c:82:0e 1500 Pensando Systems DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card, Ethernet Controller
[root@esx-001:~] esxcli storage core adapter list
HBA Name Driver Link State UID Capabilities Description
-------- -------- ---------- ------------ ------------ -----------
vmhba0 vmw_ahci link-n/a sata.vmhba0 (0000:6d:00.0) Marvell Technology Group Ltd. 88SE9230 PCIe SATA 6Gb/s Controller
vmhba1 iavmd link-n/a pscsi.vmhba1 (0000:98:05.5) Intel Corporation Intel Volume Management Device
vmhba2 iavmd link-n/a pscsi.vmhba2 (0000:ac:05.5) Intel Corporation Intel Volume Management Device
vmhba3 iavmd link-n/a pscsi.vmhba3 (0000:d8:05.5) Intel Corporation Intel Volume Management Device
vmhba4 iavmd link-n/a pscsi.vmhba4 (0000:ec:05.5) Intel Corporation Intel Volume Management Device
[root@esx-001:~] esxcli network ip neighbor list
Neighbor Mac Address Vmknic Expiry State Type
--------- ----------------- ------ ------- ----- ----
10.18.0.1 02:00:00:2c:82:0e vmk0 709 sec Dynamic
10.18.0.4 02:00:03:2c:82:0e vmk0 521 sec Dynamic
10.18.0.6 02:00:05:2c:82:0e vmk0 892 sec Dynamic
vSphereには他にもvsish
、vim-cmd
、vmkfstools
など管理用の様々なコマンドがあるので、必要なデータを確認するために利用することができます。コマンドの利用は構成を意図せず変更してしまう場合がありますので十分にご留意ください。
RAID Controllerの管理コマンド
RAIDコントローラーには、ログインしたOS上でコマンドラインからRAID構成を管理することのできるツールがあり、RAIDの構成状態やディスクの状態を確認することもできます。esxcliで得ることのできる情報では監視が難しい場合、管理ツールをダウンロードし、利用するのが良いと思います。
BMS for VPCの場合、上記のようにMarvellの88SE9230というRAID Controllerを利用しているようです。Marvellの管理ツールとしては下記のようなものがあるようです。時間がある時に別途記事にしたいと思います。
Marvell ESXCLI Plug-in for VMware vSphere
その他のコマンド
cim-diagnostic.sh
ハードウェアの診断情報を呼び出すコマンドです。かなりの情報量のデータが出てきますが、PCIデバイスやメモリーなどの情報は抽出することができそうです。
[root@esx-001:~] cim-diagnostic.sh
[Sun Jul 31 04:04:34 UTC 2022] CIM Diagnostic dump for root/interop
[Sun Jul 31 04:04:34 UTC 2022] Dumping instances of CIM_Namespace
・・・
VMware_PCIDevice.SystemCreationClassName="OMC_UnitaryComputerSystem",SystemName="45e02c00-a0b7-11ea-8000-000000000000",CreationClassName="VMware_PCIDevice",DeviceID="PCI 0:109:0:0"
DeviceID = PCI 0:109:0:0
CreationClassName = VMware_PCIDevice
SystemName = 45e02c00-a0b7-11ea-8000-000000000000
SystemCreationClassName = OMC_UnitaryComputerSystem
PhysicalSlot = (NULL)
ParentDeviceID = PCI 0:108:1:0
SegmentNumber = 0
SubClassCode = 6
RevisionID = 17
VendorID = 6987
PCIDeviceID = 37424
FunctionNumber = 0
DeviceNumber = 0
BusNumber = 109
SubsystemVendorID = 5593
SubsystemID = 6944
ClassCode = 1
Capabilities = { 1, 5, 16, 18, }
RequestedState = 0
EnabledState = 0
PrimaryStatus = 0
HealthState = 0
ElementName = Marvell Technology Group Ltd. 88SE9230 PCIe SATA 6Gb/s Controller #0
SelfTestEnabled = (NULL)
ExpansionROMBaseAddress = (NULL)
InterruptPin = (NULL)
LatencyTimer = (NULL)
CacheLineSize = (NULL)
DeviceSelectTiming = (NULL)
CapabilityDescriptions = (NULL)
CommandRegister = (NULL)
MaxQuiesceTime = (NULL)
AdditionalAvailability = (NULL)
IdentifyingDescriptions = (NULL)
TotalPowerOnHours = (NULL)
PowerOnHours = (NULL)
OtherIdentifyingInfo = (NULL)
ErrorCleared = (NULL)
ErrorDescription = (NULL)
LastErrorCode = (NULL)
StatusInfo = (NULL)
Availability = (NULL)
PowerManagementCapabilities = (NULL)
PowerManagementSupported = (NULL)
Description = (NULL)
Caption = (NULL)
InstanceID = (NULL)
InstallDate = (NULL)
Name = (NULL)
OperationalStatus = (NULL)
StatusDescriptions = (NULL)
Status = (NULL)
CommunicationStatus = (NULL)
DetailedStatus = (NULL)
OperatingStatus = (NULL)
OtherEnabledState = (NULL)
EnabledDefault = 2
TimeOfLastStateChange = (NULL)
AvailableRequestedStates = (NULL)
TransitioningToState = 12
TimeOfLastReset = (NULL)
ProtocolSupported = (NULL)
MaxNumberControlled = (NULL)
ProtocolDescription = (NULL)
BaseAddress = (NULL)
MinGrantTime = (NULL)
MaxLatency = (NULL)
・・・
OMC_PhysicalMemory.CreationClassName="OMC_PhysicalMemory",Tag="32.0"
Tag = 32.0
CreationClassName = OMC_PhysicalMemory
MaxMemorySpeed = 2933
IsSpeedInMhz = true
InterleavePosition = 255
PositionInRow = 255
TotalWidth = 72
Speed = (NULL)
SerialNumber = 379D639E
RemovalConditions = (NULL)
PartNumber = M393A4K40DB2-CVF
OperationalStatus = { 0, }
MemoryType = 26
Manufacturer = Samsung
HealthState = (NULL)
FormFactor = 8
ElementName = P1-DIMMA1
Description = P1-DIMMA1
DataWidth = 64
Caption = P1-DIMMA1
Capacity = 34359738368
CanBeFRUed = (NULL)
UserTracking = (NULL)
VendorEquipmentType = (NULL)
ManufactureDate = (NULL)
PoweredOn = (NULL)
OtherIdentifyingInfo = (NULL)
Version = (NULL)
SKU = (NULL)
Model = (NULL)
InstanceID = (NULL)
InstallDate = (NULL)
Name = (NULL)
StatusDescriptions = (NULL)
Status = (NULL)
CommunicationStatus = (NULL)
DetailedStatus = (NULL)
OperatingStatus = (NULL)
PrimaryStatus = (NULL)
Removable = (NULL)
Replaceable = (NULL)
HotSwappable = (NULL)
BankLabel = P0_Node0_Channel0_Dimm0
ConfiguredMemoryClockSpeed = (NULL)
・・・
smbiosDump
こちらもハードウェア情報を収集するコマンドです。Linuxのdmidecodeコマンドに相当します。空きスロットも含め、各スロットにインストールされているRAMの情報を確認することができます。
[root@esx-001:~] smbiosDump
Dumping live SMBIOS data!
・・・
Physical Memory Array (Type 16): #15
Use: 0x03 (System memory)
Location: 0x03 (Motherboard)
Slots: 48
Max. Size: 2048 GB
ECC: 0x05 (Single-bit)
Memory Device (Type 17): #16
Location: "P1-DIMMA1"
Bank: "P0_Node0_Channel0_Dimm0"
Manufacturer: "Samsung"
Serial: "379D639E"
Asset Tag: "P1-DIMMA1_AssetTag (Date:20/23)"
Part Number: "M393A4K40DB2-CVF"
Memory Array: #15
Form Factor: 0x09 (DIMM)
Type: 0x1a (DDR4)
Type Detail: 0x0080 (Synchronous)
Data Width: 64 bits (+8 ECC bits)
Size: 32 GB
Max. Speed: 2933 MT/s
Rank: 2
Configured Speed: 2934 MT/s
Min. Voltage: 1200 mV
Max. Voltage: 1200 mV
Configured Voltage: 1200 mV
Technology: 0x03 (DRAM)
Mode Capability: 0x0008 (Volatile)
Firmware Version: "0000"
Module Manufacturer ID: 0xce80
Volatile Size: 34359738368 bytes
Memory Device (Type 17): #17
Location: "P1-DIMMA2"
Bank: "NO DIMM"
Manufacturer: "NO DIMM"
Serial: "NO DIMM"
Asset Tag: "NO DIMM"
Part Number: "NO DIMM"
Memory Array: #15
Form Factor: 0x02 (Unknown)
Type: 0x02 (Unknown)
Type Detail: 0x0004 (Unknown)
Data Width: 0 bits
Size: No Memory Installed
Min. Voltage: 1200 mV
Max. Voltage: 1200 mV
Configured Voltage: 1200 mV
Technology: 0x02 (Unknown)
Mode Capability: 0x0008 (Volatile)
Firmware Version: "NO DIMM"
・・・
まとめと考察
複数の記事に渡って、IBM CloudのBMS for VPC上に構成されたVMware vSphere環境をZabbixでどのように監視することができるかを確認してきました。仮想環境自体の監視やネットワークポートの監視は特に問題なくできる一方、冒頭の記事でも記載した通り、現状ではBMS for VPCではIPMIを利用することができないため、ハードウェアのステータスを監視するのに工夫が必要であり、ストレージやメモリーの監視は難しいようです。
下記にこのシリーズ全体を通して確認したZabbixによる監視方法についてまとめました。メモ程度ですが、参考になれば幸いです。
-
テンプレートの適用による監視
- エージェントレスでvSphere APIから取れる情報を取得している
- 主にリソースの監視、ESXiのステータスの監視、死活監視など
-
SNMP Trap監視
- ESXiからのTrap
- ESXiホスト上のステータスなど
- vCenterからのTrap
- vSphere環境全体の障害(vCenterのアラームがTrapされる)
- ESXiからのTrap
-
SSH チェック
- HWなどの情報が個別に欲しい場合、この方法で確認できる可能性がある
- VMwareにはesxcli、vsish、vim-cmd、vmkfstoolsなどの管理コマンドがあるので、それらを活用して情報を取得
-
各物理コンポーネントにおける情報取得方法について
- NIC
- SmartNIC(物理NIC)はIBM Cloud管理のため不要
- PCI Interface(ESXiが認識するポート)に関してはESXiからのSNMP Trap、もしくはesxcli storage core adapter listのステータスで確認可能
- ストレージ
- RAIDコントローラーの管理ユーティリティーで確認
- BMS for VPCではMarvellの88SE9230というオンボードのRAIDコントローラーを使用しており、OSから制御できるのでストレージの情報は取れる可能性がある(未確認)
- また、テンプレート適用によりvCenter側で個別のディスクごとの使用状況が取得できているので、障害箇所については特定できる可能性はある
- vmkernel.logとvobd.logに記載されるログにはディスク障害の情報があるため、ログを確認する(Zabbixの機能ではない)
- メモリー
- cim-diagnostic.sh、smbiosDumpでメモリーの物理情報が出力可能
- smbiosDump は空いているスロットも含め、全てのメモリースロットの情報が出てくるので障害箇所の特定に使える可能性あり
- NIC
クラウドサービスのため、状況は日々更新されます。IPMIからの情報が取得できるようになる機能の実装などに期待しています。また、お客様がサービスにおける全ての運用責任を担うわけではありません。運用責任をユーザー側とクラウド事業者とで共有するモデルが適用されます。障害が疑われる場合にはIBM CloudのCaseを発行し、適切な対応方法を確認するようにしましょう。