CloudWatch Logsでログを気軽にチェックする

CloudWatch Logs使ってますか?
filter + カスタムメトリックスで簡単な監視を設定できるし、色々と便利ですよね。

アプリでエラーが発生した時も、カスタムメトリックスのアラートを使えば、通知もしてくれるので簡単な監視のシステムはこれでなんとかなる感じです。

しかし、アラートを検知してもそのログを一緒に通知してくれれば便利なんですが(Amazonさんお願いします!!)、原因を調べるためにSSHでサーバに入ってログを確認する必要があります。

けど、その都度サーバにログインして調べるのも、開発者にアカウントを発行してと言った設定も出てくるし、間違えて変なコマンドを実行されたら大変な事になります。

そこで、もっと気軽にログを見れる方法がないか考えてみたところ、CloudWatch Logsに送り込んでるログを見れるようにすれば、わざわざサーバにSSHしなくてもできるんじゃないかと思いました。

そんな訳で、スクリプトを書いた。
https://github.com/sparkgene/cloudwatch_logs_tail

使い方

オプション

% ruby tail_cwlog.rb --help

Usage: tail_cwlog [options]
        --use-iamrole                USE IAM ROLE
        --aws-region=[VALUE]         AWS REGION
        --aws-access-key=[VALUE]     AWS ACCESS KEY
        --aws-secret-key=[VALUE]     AWS SECRET KEY
        --discribe-groups            Describe log groups
        --discribe-streams           Describe log streams
        --tailf                      tail -f log stream
        --tail=[VALUE]               tail log stream
        --log-group=[VALUE]          log group name
        --log-stream=[VALUE]         log stream name

CloudWatch Logsに登録されているLog Groupの一覧表示

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --discribe-groups

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure

Log Groupに含まれているLog Streamの一覧取得

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --discribe-streams --log-group=/var/log/cron

server-apps-1
server-apps-2
server-apps-3

tail -100 みたいに過去のログを表示したい場合

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --log-group=/var/log/cron --log-stream=server-apps-3 --tail=100

Feb 21 01:22:01 server-apps-3 CROND[2837]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:23:01 server-apps-3 CROND[2863]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:24:01 server-apps-3 CROND[2890]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)

tail -fみたいにログを監視したい場合

% ruby tail_cwlog.rb --aws-region=ap-northeast-1 --log-group=/var/log/cron --log-stream=server-apps-3 --tailf

Feb 21 01:22:01 server-apps-3 CROND[2837]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:23:01 server-apps-3 CROND[2863]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
Feb 21 01:24:01 server-apps-3 CROND[2890]: (root) CMD (/var/awslogs/bin/awslogs-nanny.sh > /dev/null 2>&1)
    • tailf オプションでは、デフォルトで最後の20行を表示して、ログの監視を行います。

5秒に1回ログを見に行きますので、サーバからCloudWatch Logsにアップロードされ、手元に届くまでタイムラグがあります。
よりリアルタイムで監視したい場合は、

sleep(5)

となっている部分、調整して使ってください。

注意

CloudWatch Logsに格納されているデータをダウンロードする場合は、AWSの転送料及びAPI利用料がかかります。

http://aws.amazon.com/cloudwatch/pricing/

Amazon CloudWatch API Requests
$0.01 per 1,000 GetMetricStatistics, ListMetrics, or PutMetricData requests

Amazon CloudWatch Logs*
$0.50 per GB ingested**
$0.03 per GB archived per month***
Data Transfer OUT from CloudWatch Logs is priced equivalent to the “Data Transfer OUT from Amazon EC2 To” and “Data Transfer OUT from Amazon EC2 to Internet” tables on the EC2 Pricing Page(http://aws.amazon.com/ec2/pricing/).

ご利用は計画的に。