CDP:Log Aggregation パターン
提供:AWS-CloudDesignPattern
ログの集約
目次 |
解決したい課題
APサーバーの台数が多いシステムでは、アクセスログなどが各サーバーに分散している場合、ログの集計や分析、トラブルシュートの際、分散したログを収集する必要があり、手間がかかる。また、オートスケーリングする環境では、スケールインでサーバーが自動的にシャットダウンされてしまうため、サーバー上のログが消去されてしまう。
ログを一定期間保存しておく必要がある場合、大容量のディスクが必要となる。しかし、成長しているシステムやピークが読めないようなシステムでは、保存するファイルサイズを見積もる(キャパシティープランニング)のは難しい。 各サーバーのログを共有ストレージにアーカイブして短期間でローテーションすれば、各サーバーでディスク拡張のメンテナンスを無くせる。ただ、いずれにせよ共有ストレージのキャパシティープランニングは必要で、共有ストレージ自体の運用も必要となる。
クラウドでの解決/パターンの説明
ログの集約先としてインターネットストレージを使うことで、大量のログを安価かつ高い耐久性で保存可能となる。APサーバーなどにログ収集エージェントなどを常駐させ、集約対象のログをインターネットストレージに集めるようにする。
実装
- ログ保存用のS3バケットを用意する。
- 各サーバーにログ収集エージェントを常駐させ、定期的にS3バケットにログを転送する。
構造
利点
- S3に集約し、ログ保存用に別途サーバーを立てる必要がなく、収集したログの堅牢性についても意識する必要がなくなる。
- S3と親和性の高いEMRやRedshiftを使って、容易にログ解析を実行できる。
注意点
- Auto Scalingによりインスタンスがterminateする際に、収集タイミングによってはS3に転送されないログが出てくる。terminate 時に最後の収集を実行する場合は、Auto Scalingのライフサイクルフックを利用する。[関連ブログ 1]
その他
- 収集したログの内容を確認し、通知を送りたい場合(例えばERRORという文字が合った場合にメールを送るなど)、CloudWatch Logsを利用することもできる。CloudWatch Logsを利用する場合も同様に、CloudWatch Logs のエージェントを各サーバーに常駐させ、ログをCloudWatch Logsに転送する。[関連ブログ 2]