2011年12月1日木曜日

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

スズキです。

下記でS3(バケット)のファイルサイズが取得できるようになったので
S3で利用されているバケットのファイルサイズの取得
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;

次はこのプラグインを実際にNagiosで利用してみます。
--------
http://www.suz-lab.com

0 コメント: