WEB TECKS - WEBサイト構築知識いろいろ

[PHP]WEBサーバHDD使用率の監視。アラートメールの送信

更新日:2024-02-22 22:35:19 登録日:2024-02-22 22:25:49
[動作環境]
Amazon Linux 2
PHP 8.1.21 (cli) (built: Jul 4 2023 23:26:29) (NTS gcc x86_64) / PHP 5.6.40 (cli) (built: Aug 2 2023 11:54:43)

 管理しているWEBサーバのHDD使用量を定期的に監視、一定の使用率を超えた場合、アラートメールを送信したい場合もあるかと思います。PHPで実装するためのサンプルコードを記述します。
 chk_hdd.phpというファイル名で作成するとします。

chk_hdd.phpサンプルコード

// WARNING表示は消す
error_reporting(E_ERROR | E_PARSE);


// 監視するHDDのディレクトリ
$chk_dir = '/';


// サーバホスト名の取得
$host = gethostname();


// 送信先メールアドレス
$to_mail = "test@example.com";


// Fromメールアドレス
$fr_mail = "no-reply@{$host}";


// 監視するHDD限界使用率
$use_rate_lmt = 80; // 80%以上の場合にメール送信


// HDDの使用率を取得
$use_rate = get_use_rate($chk_dir);


// HDDの使用率が限界使用率を超えている場合にメール送信
if ($use_rate >= $use_rate_lmt)
{
// メールを送信
send_mail();
}


// HDDの使用率を取得する関数
function get_use_rate($chk_dir)
{
// 使用可能なディスク空き容量(バイト)
$free_spc = disk_free_space($chk_dir);

// ディスクの総容量(バイト)
$totl_spc = disk_total_space($chk_dir);

// ディスク使用容量の計算
$use_spc = $totl_spc - $free_spc;

// 使用率を計算
$use_rate = ($use_spc / $totl_spc) * 100;

// 小数点以下2桁まで丸める
$use_rate = round($use_rate , 2);


return $use_rate;
}


// メール送信関数
function send_mail()
{
global $fr_mail;
global $to_mail;
global $host;
global $use_rate;

// ヘッダ(Fromアドレス)を設定
$headers = "From: {$fr_mail}";

// メール件名
$subj = "HDD使用容量アラート({$host})({$use_rate}%)";

// メール本文
$msg = "{$host}のHDDの使用容量が {$use_rate}% に達しました。";

// 言語・文字コード指定
mb_language("Japanese");
mb_internal_encoding("UTF-8");

// メール送信
$ret = mb_send_mail($to_mail , $subj , $msg , $headers);
}

 一定間隔で自動的に上記プログラムを実行するために、crontabに設定します。
 以下は5分間隔で実行するためのサンプル。chk_hdd.phpの格納ディレクトリが「/var/www/html/bin/」の場合。

# crontab -e
*/5 * * * * /usr/bin/php /var/www/html/bin/chk_hdd.php
(:wq!で閉じる)

 lsコマンドで「/usr/bin/php」があることを事前に確認してから、上記crontabを設定してください。
 「/usr/bin/」に存在するphpは、php56などのようにバージョン数値が付いている場合もあります。例)「/usr/bin/php56」

crontabとは

 crontabは、UnixおよびUnix系オペレーティングシステムで使用されるコマンドラインベースのユーティリティです。crontabコマンドを使用すると、ユーザーは自動的に実行されるジョブ(またはタスク)をスケジュールできます。これらのジョブは、一定の間隔で定期的に実行されるように設定できます。

 crontabは、ジョブのスケジュールを管理するために使用されるコマンドラインインターフェースで、cronデーモンに対してジョブを設定および変更するためのインターフェースを提供します。

 crontabコマンドを使用して、ユーザーごとに個別のジョブリスト(またはクロンタブ)を作成、表示、編集、削除できます。各ジョブは、スケジュールされた実行時刻と実行するコマンドまたはスクリプトから構成されます。

 以下は、crontabコマンドの一般的な使用法の例です。

 crontab -e: 現在のユーザーのcrontabファイルを編集します。
 crontab -l: 現在のユーザーのcrontabファイルの内容を表示します。
 crontab -r: 現在のユーザーのcrontabファイルを削除します。
 crontab -u -l: 指定したユーザーのcrontabファイルの内容を表示します。

 crontabは、システムのバックアップ、ログのクリーンアップ、定期的なデータベースのバックアップ、定期的なデータの同期など、多くの場面で使用されます。ジョブのスケジュールを設定することで、繰り返し手動で実行する必要があるタスクを自動化し、効率を向上させることができます。