ProxMox VE の状態をメールで通知する


OpenMediaVault の状態をメールで通知するには、メニュー System > Scheduled Tasks を利用してシェルスクリプトを実行、という方法があります。シェルスクリプトの標準出力が cron のおかげでメール送信される、という仕掛けです。

これを真似て ProxMox Virtual Environment (PVE) の状態を通知させてみました。

PVE ではローカルの root ユーザーへメールを送ると、通知ターゲット(Notification Target) で指定した SMTP サーバーを経由して、そのメールを転送できます。

あらすじ
  1. 「ユーザー」を作って、宛先メールアドレスを指定します。
  2. 「通知ターゲット」を作って、SMTPサーバーと、作った「ユーザー」を指定します。
  3. 「通知 Matcher」の設定を変更して、作った「通知ターゲット」を指定します。
  4. 状態をテキスト出力するシェルスクリプトを作ります。
  5. root の crontab を編集して、作ったシェルスクリプトを定期的に実行させます。
ユーザー(宛先メールアドレス指定)を作る

データセンター > アクセス権限 > ユーザ

通知ターゲット(SMTPサーバー指定)を作る

データセンター > 通知 > 通知ターゲット

通知 Matcher の設定変更

データセンター > 通知 > 通知 Matcher

既定の「default-matcher」のタブ「通知するターゲット」で、既定の mail-to-root のチェックを外し、作った通知ターゲットにチェックを入れます。

シェルスクリプトを作る
#!/bin/bash
(
	echo "<date>$(date)</date>";
	echo "<uptime>$(uptime)</uptime>";
	echo;	#------------------------
	echo "<free>";
	free;
	echo "</free>";
	echo;	#------------------------
	echo "<lsblk -fipr>";
	lsblk -fipr | grep "\s\S";	# a space followed by a non-space
	echo "</lsblk>";
	echo;	#------------------------
IFNAME=vmbr0
	echo "<ip address show $IFNAME>";
	ip address show $IFNAME;
	echo "</ip>";
	echo;	#------------------------
IFNAME=enp2s0
	echo "<ethtool $IFNAME>";
	/usr/sbin/ethtool $IFNAME | grep 'Speed\|Duplex';
	echo "</ethtool>";
	echo;
	echo "<ip -statistics link show $IFNAME>";
	ip -s link show $IFNAME;
	echo "</ip>";
	echo;	#------------------------
	echo "<ss --tcp --all (!TIME-WAIT)>";
	ss -t -a | grep -v "^TIME-WAIT";
	echo "</ss>";
	echo;	#------------------------
	echo "<ss --udp --all>";
	ss -u -a;
	echo "</ss>";
	echo;	#------------------------
)
crontab に登録する

crontab で1日1回実行させます。

11 23 * * *     sh /home/work/pve-status.sh

おしまい。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です