cloudpack の 踊る阿呆、橋本(Mitzi)です。geek目指しています。

はじめに

cloudwatch APIAmazon DynamoDB のリソース状況を監視することは可能ですが、DynamoDBへ実際にアクセスしているEC2の接続状況を監視出来ないものか。

この課題、Nagios Pluginを自前で用意することで対処してみました。

Amazon DynamoDBとは

DynamoDBの接続状況、Nagiosで監視を。: 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サーバ構築

DynamoDBの接続状況、Nagiosで監視を。: 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スキャンスクリプト

■公式を参考に

上記を参考に単純にテーブルをスキャンするスクリプトを作成

# 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

おわり

DynamoDBの接続状況、Nagiosで監視を。: 動作確認

・Nagios GUIより監視出来ていることが確認出来ました。

以上になります。

元記事はこちらです。
CentOS – DynamoDBの接続状況、Nagiosで監視を。