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