サーバーのディスク使用量を定期的に監視し、空き容量が一定の閾値を下回った場合にメールで通知するスクリプトを紹介します。このスクリプトを使用することで、ディスクスペースの不足に早期に対応できるようになります。
スクリプトの概要
このスクリプトは、以下の機能を持っています:
- 監視対象ディレクトリのディスク使用量を取得。
- ディスクの総容量、使用量、空き容量、使用率を計算。
- 空き容量が設定した閾値を下回った場合にメールで通知。
スクリプトの詳細
以下に示すのは、ディスク使用量を監視し、空き容量が閾値を下回った場合に通知を送信するシェルスクリプトです。このスクリプトは、ホスト名とIPアドレスをメールの件名と本文に含めることで、どのサーバーからの通知であるかを明確にします。
スクリプト:disk_usage_monitor.sh
#!/bin/bash
# 監視対象のディレクトリと閾値の設定
TARGET="/path/to/monitor"
THRESHOLD=10 # GB単位の閾値
# ユニークな情報の取得
HOSTNAME=$(hostname)
IP_ADDRESS=$(hostname -I | awk '{print $1}')
# ディスク使用量の取得
DISK_INFO=$(df -h $TARGET | tail -n 1)
echo "ディスク情報: $DISK_INFO"
# サイズ、使用量、空き容量、使用率を正しく取得
TOTAL_DISK=$(echo $DISK_INFO | awk '{print $2}')
USED_DISK=$(echo $DISK_INFO | awk '{print $3}')
AVAILABLE_DISK=$(echo $DISK_INFO | awk '{print $4}')
USED_PERCENT=$(echo $DISK_INFO | awk '{print $5}' | sed 's/%//g')
echo "最大容量: $TOTAL_DISK"
echo "使用量: $USED_DISK"
echo "空き容量: $AVAILABLE_DISK"
echo "使用率: $USED_PERCENT%"
# 空き容量の数値部分と単位を抽出
AVAILABLE_DISK_NUM=$(echo $AVAILABLE_DISK | sed 's/[^0-9.]//g')
AVAILABLE_DISK_UNIT=$(echo $AVAILABLE_DISK | sed 's/[0-9.]//g')
echo "空き容量(数値): $AVAILABLE_DISK_NUM"
echo "空き容量(単位): $AVAILABLE_DISK_UNIT"
# 空き容量をGB単位に変換
if [ "$AVAILABLE_DISK_UNIT" = "M" ]; then
AVAILABLE_DISK_NUM=$(echo "scale=2; $AVAILABLE_DISK_NUM / 1024" | bc)
elif [ "$AVAILABLE_DISK_UNIT" = "T" ]; then
AVAILABLE_DISK_NUM=$(echo "scale=2; $AVAILABLE_DISK_NUM * 1024" | bc)
fi
# 数値部分を整数に変換
AVAILABLE_DISK_NUM=$(printf "%.0f" $AVAILABLE_DISK_NUM)
echo "空き容量(GB換算): $AVAILABLE_DISK_NUM GB"
# メール送信設定
TO="your-email@example.com"
SUBJECT="Disk Usage Alert on $HOSTNAME ($IP_ADDRESS)"
BODY="サーバー情報:\nホスト名: $HOSTNAME\nIPアドレス: $IP_ADDRESS\n\nディスクの最大容量は $TOTAL_DISK です。\n現在のディスク使用量は $USED_DISK です。\n空き容量が $AVAILABLE_DISK です。\n使用率は $USED_PERCENT% です。"
# 閾値を超えた場合にメールを送信
if [ "$AVAILABLE_DISK_NUM" -le "$THRESHOLD" ]; then
echo "空き容量が閾値を下回りました。メールを送信します。"
echo -e "$BODY" | mail -s "$SUBJECT" $TO
else
echo "空き容量は十分です。メールを送信しません。"
fi
スクリプトの説明
- 監視対象ディレクトリと閾値の設定:
TARGET
変数に監視対象のディレクトリのパスを設定します。THRESHOLD
変数に空き容量の閾値(GB単位)を設定します。
- ユニークな情報の取得:
HOSTNAME
変数にホスト名を取得します。IP_ADDRESS
変数にサーバーのIPアドレスを取得します。
- ディスク使用量の取得:
df -h $TARGET | tail -n 1
コマンドでディスク使用量の情報を取得し、DISK_INFO
変数に格納します。
- サイズ、使用量、空き容量、使用率の抽出:
awk
コマンドを使用して、DISK_INFO
から各フィールドを抽出します。
- 空き容量の数値部分と単位の抽出:
sed
コマンドを使用して、空き容量の数値部分と単位(GB、MB、TBなど)を抽出します。
- 空き容量の単位変換:
bc
コマンドを使用して、空き容量をGB単位に変換します。
- メール送信設定と実行:
- メールの宛先(
TO
)、件名(SUBJECT
)、本文(BODY
)を設定します。 - 空き容量が閾値を下回った場合にメールを送信します。
スクリプトの使用方法
- スクリプトの保存:
スクリプトをdisk_usage_monitor.sh
という名前で保存します。 - 実行権限の付与:
スクリプトに実行権限を付与します。
chmod +x disk_usage_monitor.sh
- スクリプトの実行:
スクリプトを実行します。
./disk_usage_monitor.sh
- Cronジョブの設定:
定期的にスクリプトを実行するために、Cronジョブを設定します。
crontab -e
以下のようにCronジョブを追加します。例えば、毎日午前9時にスクリプトを実行する場合:
0 9 * * * /path/to/disk_usage_monitor.sh
出力結果のサンプル
実行時に得られる出力結果のサンプルは以下の通りです:
ディスク情報: /dev/sda1 100G 80G 20G 80% /path/to/monitor
最大容量: 100G
使用量: 80G
空き容量: 20G
使用率: 80%
空き容量(数値): 20
空き容量(単位): G
空き容量(GB換算): 20 GB
空き容量は十分です。メールを送信しません。
空き容量が閾値を下回った場合には、次のようなメールが送信されます:
メールの件名
Disk Usage Alert on your-hostname (192.168.1.1)
メールの本文
サーバー情報:
ホスト名: your-hostname
IPアドレス: 192.168.1.1
ディスクの最大容量は 100G です。
現在のディスク使用量は 80G です。
空き容量が 20G です。
使用率は 80% です。
コメント