LoginSignup
0
0

More than 5 years have passed since last update.

DynamoDBの接続状況、Nagiosで監視を。

Last updated at Posted at 2015-02-10

踊る阿呆 Mitziです。geek目指しています。

はじめに

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

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

Amazon DynamoDBとは

DynamoDB.png

公式サイトより
http://aws.amazon.com/jp/dynamodb/
http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Introduction.html

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_logo.png

今回こちらが目的ではないため、新規に構築はせず既存のNagiosサーバを利用しました。
ちなみに当該Nagiosではアラートメール送信にSESを利用しています。

もし一から構築する場合は、nrpe含め yumを利用すると比較的簡単に実装出来ます。

01. AWS SDK for PHP導入

■公式を参照ください

こちらとてもシンプルですので、説明は公式に譲ります。

Getting Started with the AWS SDK for PHP
http://aws.amazon.com/jp/developers/getting-started/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 を使用してクエリを試行
http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GettingStartedPHPQuery.html

AWS SDK for PHP の低レベル API を使用したテーブルのスキャン
http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/LowLevelPHPScanning.html

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

# vi /usr/lib64/nagios/plugins/dynamodb_check_conn.php

<?php
require_once("/usr/lib64/nagios/plugins/vendor/autoload.php"); ★参照先を上述のパスに合わせています

//ini_set( "display_errors", "Off");

use Aws\DynamoDb\DynamoDbClient;
use Aws\Common\Enum\Region;
use Aws\DynamoDb\Exception\DynamoDbException;

try{
  if(substr(gethostname(),2,1)=='y'){
    $client = DynamoDbClient::factory(array('region' => 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 <EIP> -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キャプチャ.png

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

以上になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0