Posted at

CloudWatch Logsをさわってみた

More than 5 years have passed since last update.

CloudWatch Logsをさわってみたメモを残す。


CloudWatch Logsの位置付け

今までログ収集のベストプラクティスは最終的にS3に収集 → Glacierだったのが、収集場所としてCloudWatch Logsという選択肢が増えた感じ。


料金

$0.50 per GB ingested

$0.03 per GB archived per month**



  • 1ヶ月で100GBのログデータを取り込み、ログが圧縮されて20GBになるとすると、$50.60/月くらい。


    • おそらくS3がバックエンドで使われており、保存の料金は安い感じ。

    • ぱっと見で結構かかる気はするけど、EC2とEBSでログを保管することに比べたら安い感じ(運用保守もいらないし)。



100GB x $0.50 + 20GB x $0.03 = $50.60


収集したログの分類

収集されたログはLogStreamとLogGroup(LogStreamの集合)で分類される。

フィルタがLogGroup単位なので、LogGroupの中に別の種類のログ混ぜるのは止めた方が良さそう。


CloudWatch Logs Agentでのログ収集をやってみた

# インストールスクリプト取得

$ wget https://s3.amazonaws.com/aws-cloudwatch/downloads/awslogs-agent-setup-v1.0.py

# インストール
# 対話モードでも可だけど以下のようにするとサイレントなので自動化に向きそう。
# 設定のプロトは対話モードで作るとか
$ sudo python awslogs-agent-setup-v1.0.py --configfile https://gist.githubusercontent.com/mechamogera/aa03714bede13b8c535f/raw/c24c3f51b6591a09cb815d337df9e60643d3ac98/awslogs.conf --region us-east-1 --non-interactive

Step 1 of 5: Installing pip ...DONE

Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE

Step 5 of 5: Setting up agent as a daemon ...DONE

------------------------------------------------------
- Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf
- You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logs:
- You can use 'sudo service awslogs start|stop|status|restart' to control the daemon.
- To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log
- You can rerun interactive setup using 'sudo ./awslogs-agent-setup.py --region us-east-1 --only-generate-config'
------------------------------------------------------

# 最初から起動していて自動的に起動するようにもなっている
$ sudo service awslogs status
(pid 5795) is running...

$ sudo chkconfig awslogs --list
awslogs 0:on 1:on 2:on 3:on 4:on 5:on 6:on

# 設定ファイルの変更時はrestartすると反映された


AutoScaling対応について

一工夫必要そう。


  • LogGroupでまとめておくと、フィルタがあるのでその範囲でリアルタイム監視できるし、現状動いている単体インスタンスのログも調べるのは出来そう。

  • ただ、インスタンスが多かったり、入れ替わりが多かったりするとLogStreamが多くなって目的のログを捜すのが大変になりそう。



  • 今のCloudWatch Logs Agentでは対応してないがLogStreamを日付別でわけて同じLogStreamに各インスタンスのログをソース情報を付与した上で集約できるといい?


ログ取得用のRubyスクリプトを作ってみた

LogGroupにLogStreamが多くなる場合、Management Console上でLogGroupから該当のログを見つけ出すのが大変そうなので作ってみた。

ただ、LogStreamが増えれば増えるほど取得に時間がかかりそう。