たまに自宅ラボ触ろうとするとホストが落ちていることがあり、必要なタイミングで触れないのもなぁ…ということで監視・通知を入れることに。
ひとまず vCenter で ESXi ホストを監視し、通知として vCSA に内にスクリプトを仕込んで、Pushbullet API をたたき、PC やスマホに push 通知を飛ばす。
(vCenter 自体は仮想マシンで立ててる Zabbix 辺りで監視させる予定)
監視の検知をトリガーにスクリプトを実行し WebAPI を叩くのは下記投稿を参照のこと。
通知メッセージの組み立て
監視対象や検出値はスクリプト実行時に環境変数で渡されるので、それを使って通知メッセージは自由に組み立てられる。使える環境変数は以下の公式 Doc に。
どんな感じの値が入っている?
環境変数について、どんな感じに値が入っているか察せるものもあれば、実物見てみないとなぁみたいなものもあるので、全部出力させてみて実際の値を出してみる。
↓ の感じでダラダラ羅列してみるだけですが…
${VMWARE_ALARM_NAME}
${VMWARE_ALARM_ID}
${VMWARE_ALARM_TARGET_NAME}
${VMWARE_ALARM_TARGET_ID}
${VMWARE_ALARM_OLDSTATUS}
${VMWARE_ALARM_NEWSTATUS}
${VMWARE_ALARM_TRIGGERINGSUMMARY}
${VMWARE_ALARM_DECLARINGSUMMARY}
${VMWARE_ALARM_ALARMVALUE}
${VMWARE_ALARM_EVENTDESCRIPTION}
${VMWARE_ALARM_EVENT_USERNAME}
${VMWARE_ALARM_EVENT_DATACENTER}
${VMWARE_ALARM_EVENT_COMPUTERESOURCE}
${VMWARE_ALARM_EVENT_HOST}
${VMWARE_ALARM_EVENT_VM}
${VMWARE_ALARM_EVENT_NETWORK}
${VMWARE_ALARM_EVENT_DATASTORE}
${VMWARE_ALARM_EVENT_DVS}
これで(nested の) ESXi ホストの電源停止させた場合 ≒ イベント発生のメッセージ ↓
アラームテスト
alarm-2312
192.168.100.44
host-15014
Normal
Critical
Event: vSphere HA detected a host failure (4143890)
Summary: vSphere HA detected a possible host failure of host 192.168.100.44 in cluster nested-cls in datacenter labdc01
Date: 09/13/2023 11:39:58 AM
Host: 192.168.100.44
Resource pool: nested-cls
Data center: labdc01
Arguments:
eventTypeId = com.vmware.vc.HA.DasHostFailedEvent
objectId = host-15014
objectName = 192.168.100.44
([Event alarm expression: vSphere HA detected a host failure; Status = Red])
Event details
vSphere HA detected a possible host failure of host 192.168.100.44 in cluster nested-cls in datacenter labdc01
labdc01
nested-cls
192.168.100.44
メモリ利用率 70% 超え ≒ 条件のメッセージ ↓
アラームテスト2 alarm-2312 192.168.100.24 host-11151 Normal Critical Metric Memory Host consumed % is equal to 77% ([Red metric Is above 70%]) Current values for metric/state Alarm 'アラームテスト2' on 192.168.100.24 changed from Green to Red
とりあえず
アラーム名、ターゲット、マルチラインサマリがあればどこで何が起きたかは分かりそうなので、それをメッセージに含める感じで一旦 FA。
#!/bin/sh
TOKEN=(write your access token)
/usr/bin/curl -H "Content-Type: application/json" \
-H "Access-Token: ${TOKEN}" \
-X POST \
--data-binary "{\"type\": \"note\", \"TITLE\": \"vCenter Alarm\", \"body\": \"${VMWARE_ALARM_NAME}\n${VMWARE_ALARM_TARGET_NAME}\n${VMWARE_ALARM_TRIGGERINGSUMMARY}\"}" \
https://api.pushbullet.com/v2/pushes
せっかくなので、Github にも置いておきました。