share facebook facebook2 twitter menu hatena pocket slack

2015.06.09 TUE

S3バケットの容量を監視するnagiosプラグイン(python – pynag製)

WRITTEN BY三浦 剛慈

S3バケットの使用量を監視するnagiosプラグインをpythonで書きました。
pythonでnagiosプラグインを作成する時にとても便利な、pynagモジュールを利用しております。

■事前準備(モジュールインストール)

# yum install python-boto
# yum install pynag
# yum install python-yaml

■ソースコード

check_s3size.py

#!/usr/bin/env python
import boto,os,yaml
from pynag.Plugins import simple as Plugin
np = Plugin()
np.add_arg("f","key-file", "Enter a aws cridential key file", required=None)
np.add_arg("b","s3-bucket", "Enter a s3bucket name", required=None)
np.activate()

#parameter check
if np['critical'] < np['warning']:
        np.nagios_exit("UNKNOWN", "warning should be smaller than critical")

#connect s3bucket
if np['key-file']:
        key_file = np['key-file']

        #parameter check
        if not os.path.isfile(key_file):
                np.nagios_exit("UNKNOWN", "%s is not found" % key_file)
        credentials = yaml.load(file(key_file, 'r'))
        s3 = boto.connect_s3(credentials['accessKey'],credentials['secretKey'])
else:
        #IAM role should be attached
        s3 = boto.connect_s3()

S3Bucket_Size = 0

if np['s3-bucket']:
        #specified s3 bucket,only specified s3 bucket will be culculated
        bucket = s3.lookup(np['s3-bucket'])
        for key in bucket:
                S3Bucket_Size += key.size
else:
        #not specified s3 bucket,all s3 bucket will be culculated
        for bucket in s3.get_all_buckets():
                for key in bucket:
                        S3Bucket_Size += key.size

np.add_perfdata("S3Bucket_SIZE",S3Bucket_Size)
np.check_range(S3Bucket_Size)

■使用方法

# ./check_s3size.py -h
Usage: check_s3size.py [options]

Options:
    -h, --help                     show this help message and exit
    -f KEY-FILE, --key-file=KEY-FILE
                                        Enter a aws cridential key file
    -b S3-BUCKET, --s3-bucket=S3-BUCKET
                                        Enter a s3bucket name
    -v VERBOSE, --verbose=VERBOSE
                                        Verbosity Level
    -H HOST, --host=HOST Target Host
    -t TIMEOUT, --timeout=TIMEOUT
                                        Connection Timeout
    -c CRITICAL, --critical=CRITICAL
                                        Critical Threshhold
    -w WARNING, --warning=WARNING
                                        Warn Threshhold

■使用例

例1:awsアクセスキーファイルを指定する場合

# ./check_s3size.py -c 300000 -w 230000 -b koujipstest -f /root/credential.yaml
OK: data 221250 is inside warning=230000 and critical=300000 | 'S3Bucket_SIZE'=221250;;;;

例2:awsアクセスキーファイルを指定せず、IAM roleを利用する場合

# ./check_s3size.py -c 300000 -w 200000 -b koujipstest
WARNING: data 221250 is outside warning range: 200000 | 'S3Bucket_SIZE'=221250;;;;