cloudpack の 踊る阿呆、橋本(Mitzi)です。geek目指しています。
はじめに
cloudwatch API で Amazon DynamoDB のリソース状況を監視することは可能ですが、DynamoDBへ実際にアクセスしているEC2の接続状況を監視出来ないものか。
この課題、Nagios Pluginを自前で用意することで対処してみました。
Amazon DynamoDBとは
公式サイトより
Amazon DynamoDB とは – Amazon DynamoDB
Amazon DynamoDB は、1桁台のミリ秒単位のレイテンシーを必要とするすべての規模のアプリケーションに対応した高速かつフレキシブルな NoSQL データベースサービスです。
使っただけお金が掛かるそうなので、利用には注意らしいです。
Index
00. 前提
01. AWS SDK for PHP導入
02. DynamoDBスキャンスクリプト
03. Nagios Plugin(DynamoDB接続チェック)
04. NRPE設定
05. Nagios監視
00. 前提
●検証環境
■Nagiosサーバ側
CentOS: 6.3
Nagios Core: 3.4.1
nagios-nrpe: 2.12-1
Apache: 2.2.15
■クライアント側(DynamoDBに接続するEC2)
CentOS: 6.6
nagios-nrpe: 2.14-1
AWS SDK for PHP: 2.7
PHP: 5.5.16
●Nagiosサーバ構築
今回こちらが目的ではないため、新規に構築はせず既存の Nagiosサーバを利用しました。
ちなみに当該Nagiosではアラートメール送信に Amazon SES を利用しています。
もし一から構築する場合は、nrpe含め yumを利用すると比較的簡単に実装出来ます。
01. AWS SDK for PHP導入
■公式を参照ください
こちらとてもシンプルですので、説明は公式に譲ります。
Getting Started with the AWS SDK for PHP
EC2構築時にIAM Roleを利用している場合は、credentialキーの設定は必要ありません。それはベタ書きを参照するよりシンプルで セキュアな環境となります。
■格納場所
DynamoDBスキャンスクリプトを実行するのは、nagiosユーザ。
そのためnagiosユーザが実行出来る階層にスクリプトともども格納する必要があります。
■vendorディレクトリの格納
AWS SDK for PHPはvendorディレクトリ配下にインストールされるため、こちらをnagiosユーザが参照できる場所に格納します。
/usr/lib64/nagios/plugins/vendor
02. DynamoDBスキャンスクリプト
■公式を参考に
- AWS SDK for PHP を使用してクエリを試行 – Amazon DynamoDB
- AWS SDK for PHP の低レベル API を使用したテーブルのスキャン – Amazon DynamoDB
上記を参考に単純にテーブルをスキャンするスクリプトを作成
# vi /usr/lib64/nagios/plugins/dynamodb_check_conn.php
Region::SINGAPORE)); }else{ $client = DynamoDbClient::factory(array('region' => Region::TOKYO)); } $env_flg=(substr(gethostname(),2,1)); if($env_flg=='y'){ $env_flg='h'; } $TableList = $client->listTables(); for($i = 0; $i < count($TableList['TableNames']); $i++){ $tablename = $TableList['TableNames'][$i]; if(preg_match("/^$env_flg/", $tablename)){ $resulte = $client->scan(array( 'TableName' => $tablename, 'Limit' => 1, )); } } print 'OK' . PHP_EOL; }catch(DynamoDbException $e){ print 'NG' . PHP_EOL; }
※上記はIAM Roleを利用した場合になります。
credentialsを利用する際は、ソース中に定義することも可能になります。
03. Nagios Plugin(DynamoDB接続チェック)
・02.のスクリプトを呼び出し、その結果をNRPEが判定できる値に変換するスクリプト。
# vi /usr/lib64/nagios/plugins/check_dynamodb_conn # chmod 755 /usr/lib64/nagios/plugins/check_dynamodb_conn #!/bin/sh STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 STATE_DEPENDENT=4 ret=`php -e /usr/lib64/nagios/plugins/dynamodb_check_conn.php` if test ${ret} = OK ; then echo "Status is OK" exit $STATE_OK elif test ${ret} = NG ; then echo "Status is CRITICAL" exit $STATE_CRITICAL else echo "Status is UNKNOWN" exit $STATE_UNKNOWN fi
※echo結果は、Nagios GUIの「Status Information」に反映されます。
04. NRPE設定
Nagiosから03.のpluginを呼び出せるよう下記のように設定します。
# vi /etc/nagios/nrpe.cfg ----------------------- command[check_dynamodb_conn]=/usr/lib64/nagios/plugins/check_dynamodb_conn
・設定反映
# service nrpe restart
・Nagiosサーバから動作確認
# /usr/lib64/nagios/plugins/check_nrpe -H-c check_dynamodb_conn Status is OK
コマンドを直に叩き監視出来ることを確認出来ました。
05. Nagios監視
・各EC2監視に以下のように設定
define service{ use <サービス名> host_name <ホスト名> service_description DynamoDB Connect service_groups dynamodb normal_check_interval 1 check_command check-nrpe2-cloudpack!check_dynamodb_conn }
※servicegroup.cfg に 「dynamodb」を追記しています。
※check-nrpe2-cloudpackは、 「$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$」 と定義したコマンドになります。
・構文チェック
# nagios -v /etc/nagios/nagios.cfg
・設定反映
# service nagios restart
おわり
・Nagios GUIより監視出来ていることが確認出来ました。
以上になります。
元記事はこちらです。
「CentOS – DynamoDBの接続状況、Nagiosで監視を。」