share facebook facebook twitter menu hatena pocket slack

2011.12.02 FRI

S3のファイルサイズをチェックするNagiosプラグイン(PHP)

鈴木 宏康

WRITTEN BY 鈴木 宏康

下記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)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。