下記2つの記事で、S3(バケット)のファイルサイズが取得できるようになりましたので、今回はS3のファイルサイズをチェックするNagiosプラグインを作ってみました。

S3で利用されているバケットのファイルサイズの取得
S3で利用されているファイルサイズ(全バケット)の取得

はじめに、下記のようなAWSのAPIを利用するためのキーを保存したファイルを用意します。

○ credential.yml

accessKey: “AAAAAAAAAAAAAAAAAAAA”
secretKey: “ssssssssssssssssssssssssssssssssssssssss”

次に下記のスクリプト(PHP)を用意します。

▼ check_s3size

require_once("/opt/aws/php/latest/sdk.class.php");

// define status
$ok       = array("code" => 0, "name" => "OK");
$warning  = array("code" => 1, "name" => "WARNING");
$critical = array("code" => 2, "name" => "CRITICAL");
$unknown  = array("code" => 3, "name" => "UNKNOWN");

// set option
$option = getopt("c:w:f:b:");
$critical_size = $option["c"];
$warning_size  = $option["w"];
$credential    = yaml_parse_file($option["f"]);
if(isset($option["b"])) {
    $bucket = $option["b"];
}

// init s3
$s3 = new AmazonS3($credential["accessKey"], $credential["secretKey"]);
$s3->use_ssl = false;

// get s3 size
if(isset($bucket)) {
    $total_filesize = $s3->get_bucket_filesize($bucket, false);
} else {
    $bucket_list = $s3->get_bucket_list();
    $total_filesize = 0;
    foreach($bucket_list as $bucket) {
        $total_filesize += $s3->get_bucket_filesize($bucket, false);
    }
}

// check status
if($total_filesize > $critical_size) {
    $status = $critical["code"];
} elseif($total_filesize > $warning_size) {
    $status = $warning["code"];
} elseif($total_filesize > 0) {
    $status = $ok["code"];
} else {
    $status = $unknown["code"];
}

// output status
switch($status) {
    case $ok["code"]:
        print($ok["name"]       . " - s3 size: " . $total_filesize . "|size=" . $total_filesize . ";");
        exit($ok["code"]);
    case $warning["code"]:
        print($warning["name"]  . " - s3 size: " . $total_filesize . "|size=" . $total_filesize . ";");
        exit($warning["code"]);
    case $critical["code"]:
        print($critical["name"] . " - s3 size: " . $total_filesize . "|size=" . $total_filesize . ";");
        exit($critical["code"]);
    case $unknown["code"]:
        print($unknown["name"]  . " - s3 size: " . $total_filesize . "|size=" . $total_filesize . ";");
        exit($unknown["code"]);
}
print($unknown["name"]);
exit($unknown["code"]);

実行オプションは、下記の通りです。

-c: CRITICALの閾値
-w: WARNINGの閾値
-f: キーファイル
-b: バケット(指定しない場合はすべてのバケットが対象)

オプションを指定して実行すると、下記のような結果になります。

# ./check_s3_size -c 1000 -w 100 -f credential.yml -b cdn.cloudpack.jp
CRITICAL - s3 size: 238725|size=238725;

バケット指定(-b)をなしで実行すると、下記のようにすべてのバケットのファイルサイズを
合計したものが対象となります。

./check_s3_size -c 1000 -w 100 -f credential.yml
CRITICAL - s3 size: 31145892|size=31145892;

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら