EC2 Auto Scaling で削除されたインスタンスの内部ログを調査する方法を教えてください

Auto Scaling グループによって削除された EC2 インスタンスの内部ログを保持し、調査するための方法をご紹介します。
2023.12.19

この記事は アノテーション株式会社 AWS Technical Support Advent Calendar 2023 | Advent Calendar 2023 - Qiita 19日目の記事です。

困っていた内容

Auto Scaling グループで稼働する EC2 インスタンスに何らかの問題が発生し、削除されて新しいインスタンスに置き換えられました。削除された EC2 インスタンスの内部ログを収集して原因調査をしたいのですが、方法を教えてください。

どう対応すればいいの?

残念ながら、すでに削除されてしまった EC2 インスタンスの内部ログを収集することはできませんが、今後に備えて以下のいずれかの方法を検討できます。

  • 方法1. Auto Scaling グループのライフサイクルフックで、EC2 インスタンスが削除されるのを保留する
  • 方法2. EC2 内部のログを CloudWatch Logs に転送して保持する

それぞれの方法について、以下に解説します。

方法1. Auto Scaling グループのライフサイクルフックで、EC2 インスタンスが削除されるのを保留する

Auto Scaling グループのライフサイクルフック機能(※1)を利用することで、問題が発生したインスタンスを直ちに削除することなく、待機状態にすることができます。その間に何らかのアクション(内部ログの収集、スナップショットの取得など)を行うことが可能です。

ただし、設定できる待機時間(ハートビートタイムアウト)は最大 7,200秒(2時間)までです。
もし夜間や勤務時間外に問題が発生した場合にログ収集を行うには、Lambda 関数で自動化する方法を検討しましょう。
下記の記事(※2)で参考手順を解説されているので、ご紹介します。

※1 Amazon EC2 Auto Scaling のライフサイクルフック - Amazon EC2 Auto Scaling

※2 AutoScallingのライフサイクルフックを使用してスケールイン時にEC2インスタンス内のログを退避させる | DevelopersIO

方法2. EC2 内部のログを CloudWatch Logs に転送して保持する

EC2 に CloudWatch エージェントを導入し(※3)、インスタンス内部のアプリケーションログやシステムログを CloudWatch Logs に転送しておくことで、インスタンスが削除された後も内部ログを確認することが可能です。
さらに AWS コンソール上でログに対してクエリを実行したり(※4)、ログ内に特定のエラーメッセージが出ていた時にアラートを出す(※5)など細かい設定も可能です。

いいことづくめの CloudWatch Logs ですが、利用にはログの保存費用やクエリ時のスキャン費用などが発生するため(※6)その点も考慮のうえ導入を検討しましょう。

※3 インターネットなしで EC2 Auto Scaling インスタンスから CloudWatch にログを送信する | AWS re:Post

※4 CloudWatch Logs Insights を使用したログデータの分析 - Amazon CloudWatch Logs

※5 CloudWatch Logsでの特定文字列の検知時の通知をメトリクスフィルターで実装してみた | DevelopersIO

※6 料金 - Amazon CloudWatch | AWS

以上、EC2 Auto Scaling で削除されたインスタンスのログを調査するための方法をご紹介しました。 この情報がどなたかのお役に立てば幸いです!

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。