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;;;;