読者です 読者をやめる 読者になる 読者になる

AWS CLI + Amazon CloudWatchを利用してのエラーログの監視

AWS

こんにちは、罰金の徴収担当の高橋です。

前回のOWAZP ZAPのつづきを書こうと思ったのですが、 AWS CLI + Amazon CloudWatchでエラーログの監視をしてみたので、紹介します。

エラーログ発生数の可視化

エラーログの発生している状況を簡単に検知・可視化することができないかと思い、 AWS CLI + CloudWatch + bashを使用して、エラーログがどれだけ発生しているのかを可視化してみました。

AWS CLIAmazon コマンドラインインターフェース)とは

AWSのサービスをコマンドラインで使用するためのツールです。
今回はEC2で取得したデータをCloudWatchに送信するために使用します。 *1

Amazon CloudWatch とは

AWS上のリソースの監視を行うためのツールです。EC2やRDSのCPU使用率、ネットワーク転送量などの監視することができます。
しきい値を超えた場合に、アラートメールを送信することもできます。
デフォルトで監視対象になっていないものでも、APIを使うことでAmazon CloudWatchで監視できるようになります。
*2

エラー件数を数える仕組みは下記のとおりです。

  • シェルが起動した時刻の1分前に発生していたエラーログの行数をカウント
  • カウントした行数をAmzon CloudWatchのカスタムメトリックスとして送信する

実行環境の作成

環境

#!/bin/bash
# AWS CLIを利用するための設定
export AWS_CLOUDWATCH_HOME=/root/CloudWatch-1.0.20.0
export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credentials
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jre

# ec2のインスタンスIDを取得
instanceid=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`

# 行数を数える日時の計算(今回は過去1分間のログ数)
targettime=`date -d '-1 minutes' +"%a %b %d %H:%M"`
errorcount=`grep "\$targettime" /var/log/httpd/error_log | wc -l`

# CloudWatchに送信する 
mon-put-data --metric-name "ErrorLogCount" --namespace "System/Linux" --dimensio
ns "InstanceId=$instanceid" --value "$errorcount" --unit "None" --region ap-nort
heast-1

  • cronの設定
* * * * * /home/ec2user/error_count.sh
  • CloudWatchで見てみる AWSの管理コンソールからログインし、CloudWatchを見ると、

f:id:takahashih1234:20150202214929j:plain

CloudWatchのAlert設定をすることで、エラーが一定以上になった場合に通知することも可能です。

AWS CLIがインストールされていればシェルスクリプトだけで、急激にエラーが増えたなどの状態を検知することができます。