API を利用した監視(AWS) ①AWS CLI

AWS環境の様々なインスタンスを監視する上で、APIを利用することで詳細に監視できる項目、

またはAPIを利用しないと監視が難しいものが多々あります。

当記事では、APIで監視を行う幾つかの基礎的な方法のうち、

Amazon Linux でデフォルトでインストールされている AWS CLIの利用方法をご紹介します。

AWC CLI を利用することでコマンドラインより簡単にAPIを利用することが出来ます

初期設定を行う

AWS CLI の利用には、API利用時に必要になるAccessKeyとSecretKeyを設定ファイルに記載するか、

適切な権限を設定したIAM ROLEをインスタンスに付与する必要があります。

設定ファイルに記載する場合、下記のように対話式で設定することが可能です。
作成先はホームディレクトリ配下の ~/.aws/config ファイルになります

[root@ip-172-31-18-21 ~]# aws configure
AWS Access Key ID [None]: xxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]:

実際に利用する

上記の設定を終えるだけで、すぐに利用することが出来ます。書式は以下のとおりです。

aws [options] <command> <subcommand> [parameters]

command の 部分にはサービス名、subcommand には利用するAPIを記述します。タブ補完が効き、また最後に help をつけることで利用方法が確認できます。

[root@ip-172-31-18-21 ~]# aws ec2 describe-instance-attribute --instance-id i-e11c54ec --attribute instanceType
{
    "UserData": {},
    "ProductCodes": [],
    "InstanceId": "i-e11c54ec",
    "InstanceInitiatedShutdownBehavior": {},
    "SriovNetSupport": {},
    "RootDeviceName": {},
    "EbsOptimized": {},
    "BlockDeviceMappings": [],
    "KernelId": {},
    "RamdiskId": {},
    "DisableApiTermination": {},
    "InstanceType": {
        "Value": "t2.small"
    }
}

後は、CloudWatchなどから値を取得しチェックするシェルスクリプトを作成すれば、

簡単に監視などを行うことが出来ます。

監視スクリプトを作る

下記は、RDSのフェイルオーバを監視するスクリプトになります。

フェイルオーバはイベントログに出力されるため通常監視は難しいですが、

AWC CLI を利用し過去60分間のログを aws rds describe-events で取得、

ファイルオーバに関連するログが出力されているかを確認しています。

#!/bin/bash

export AWS_CONFIG_FILE=/root/.aws/config

output=$(aws rds describe-events  --duration 60 --event-categories failover )
num=($(echo "$output" | /root/JSON.sh | egrep '"Events",[0-9]+,' | cut -d ',' -f2|sort -u))

[ "${#num[@]}" -eq 0 ] &amp;&amp; exit 0

msg="フェイルオーバを検知しました\n\n"

for i in "${num[@]}"; do
  datetime=$(date -d $(echo "$output" | /root/JSON.sh | egrep "\"Events\",${i},\"Date\"" | awk '{print $2}' | sed 's/^"\(.*\)"$/\1/g') +'%Y/%m/%d %H:%M:%S')
  instance=$(echo "$output" | /root/JSON.sh | egrep "\"Events\",${i},\"SourceIdentifier\"" | awk '{print $2}' | sed 's/^"\(.*\)"$/\1/g')
  message=$(echo "$output" | /root/JSON.sh | egrep "\"Events\",${i},\"Message\"" | awk -F"\t" '{print $2}' | sed 's/^"\(.*\)"$/\1/g')

  msg="${msg}Date     : ${datetime}\n"
  msg="${msg}Instance : ${instance}\n"
  msg="${msg}Message  : ${message}\n\n"
done

echo -e "${msg}"

AWC CLI のアウトプットを/root/JSON.sh というスクリプトに渡していますが、こちらで公開されているJSONをパースするスクリプトになります。

AWC CLI のアウトプットはデフォルトではJSON形式なので、シェルスクリプトで扱う場合は上記のようなものを利用するか Perl や Ruby などのワンライナーでパースする必要があります。

また、–output (json/text/table) オプションを付与することで、出力形式を変更することも出来ます。

実行すると、下記のような形でフェイルオーバを検知してくれました。

[root@ip-172-31-18-21 ~]# ./check_rds_failover.sh
フェイルオーバを検知しました

Date     : 2014/08/22 13:46:20
Instance : test
Message  : Multi-AZ instance failover started

Date     : 2014/08/22 13:47:20
Instance : test
Message  : Multi-AZ instance failover completed

備考

AWS CLIを利用してシェルスクリプトを作成する場合は、注意する点があります。

実行時に設定ファイルの読み込みを行いますが、環境変数 AWS_CONFIG_FILE を参照します。
(デフォルトは~/.aws/config)

そのため、シェルスクリプト中でAWS_CONFIG_FILEを明示的に指定する必要があります。

AWS CLI には様々な設定・利用方法があるので、下記公式ドキュメントを参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.