DEA / ドメイン3 データ運用とサポート

Amazon CloudWatch Logs

Logs は、アプリケーションや AWS のサービスが出すログを集めて保存し、検索、化、ほかのサービスへの転送を行うサービスです。データパイプラインでは、、、、 などの実行ログを1か所に集め、障害の調査、監査、トレーサビリティ (後から処理の経緯をたどれること) に使います。

DEA では、CloudWatch Logs でアプリケーションのデータをログに記録するための設定と、その自動化 (保持期間、エージェント、メトリクスフィルター、、エクスポート) に重点が置かれます。

Point
  • Log group (ロググループ) は同じ種類のログのまとまり、Log stream (ログストリーム) はその中の発生元ごとの流れです。
  • Retention = 保持 で、ログを何日間残すかの設定です。
  • Subscription filter (サブスクリプションフィルター) は、条件に合うログをリアルタイムでほかのサービスへ送り続ける設定です。
  • 和訳

概要

ログは、集める、保存する、活用する、の3段階で扱います。

概要の図 Lambda ロググループ保持期間・暗号化 Glue ジョブ MWAA EC2 / オンプレミスCloudWatch エージェント メトリクスフィルターエラー件数をメトリクスに サブスクリプションフィルターリアルタイムに転送 Logs Insightsクエリで調査 S3 へのエクスポート長期保管 Firehose / KinesisLambda / OpenSearch
段階機能
集めるAWS のサービスからの自動の送信、 エージェント、 の PutLogEvents
保存するロググループごとの保持期間、ログクラス、 による暗号化、機密データのマスキング
活用するフィルター、、、 へのエクスポート、Live Tail

主要技術

①ロググループ、保持期間、ログクラス ⚠️ 頻出

ロググループの保持期間は、既定では「期限なし (失効しない)」です。1日から10年までの期間を選べるため、要件に合わせて設定しないと、ログが無期限にたまり続けて保存の料金が増えます。

設定内容
保持期間期限を過ぎたログは自動で削除されます。監査で長く残す必要があるログは、 へ移して安いで保管します。
による暗号化ロググループに KMS キーを関連付け、ログを自分のキーで暗号化します。
ログクラスStandard (すべての機能) と Infrequent Access (取り込みの料金が安く、機能が限られる) から選びます。作成後は変更できません。
データ保護ログの中のメールアドレスやクレジットカード番号などの機密データを検出してマスクします。
ログクラス使える主な機能向くログ
Standardフィルター、、Live Tail、、 など、すべてリアルタイムの監視や通知に使うログ
Infrequent AccessLogs Insights のクエリ、S3 へのエクスポート、暗号化など一部。メトリクスフィルターとサブスクリプションフィルターは使えません事後の調査や監査のためにまとめて保管するログ

⚠️ 頻出: 「ログが無期限に残ってコストが増えている」は保持期間の設定、「ほとんど見ないログを安く集めたい」は Infrequent Access のログクラスです。ただし、メトリクスフィルターやサブスクリプションフィルターが必要なログには使えません。


②ログを集める設定

発生元集め方
標準出力とログ出力が自動で /aws/lambda/<関数名> のロググループに送られます。ログの形式 (テキスト / ) とログレベルを関数の設定で変えられます。ログレベルは JSON の形式で使え、アプリケーションのログレベルを INFO にすると DEBUG のログは送られず、取り込みの料金を抑えられます。実行ロールにログを書く権限が必要です。
ドライバーとのログが /aws-glue/jobs/ 以下のロググループに送られます。連続ログ記録 (continuous logging) を有効にすると、実行中のログも確認できます。
環境の設定で、 の解析、スケジューラー、タスク、ワーカー、Web サーバーのログをそれぞれ有効にします (#25)。
Express ワークフローの実行履歴や、Standard の詳細なログを、ログのレベル (ALL、ERROR、FATAL) を指定して送ります。
ステップのログは のログの場所 (ログ URI) に保存されます。 エージェントを使って CloudWatch Logs に送ることもできます。
/ CloudWatch エージェントを入れ、送るログファイルを設定ファイルで指定します。設定ファイルは Parameter Store に置いて、多数のサーバーへ配れます。
自前のアプリケーション の PutLogEvents でログを書きます。

ログは JSON などの構造化した形で出すと、 で項目ごとに検索・集計しやすくなります。ジョブ名、実行 ID、処理件数、エラーの種類を項目として含めると、後から処理の経緯をたどれます。


③メトリクスフィルター

フィルターは、ログの中のパターン (例: ERROR という文字、 の status が FAILED) に合う行を数えたり、ログの中の数値を取り出したりして、 のメトリクスに変換します。メトリクスになれば、で に通知できます。

例内容
エラーの件数ERROR を含む行を数え、5 分間に 10 件を超えたら通知します。
処理件数JSON のログの records_processed の値をメトリクスにし、急減を検知します。

メトリクスフィルターは、フィルターを作った後に届いたログにだけ適用されます。過去のログを集計したい場合は を使います。


④サブスクリプションフィルター ⚠️ 頻出

は、条件に合うログをリアルタイムでほかのサービスへ送り続けます。送り先は次の4つです。

送り先向く場面
ログを に集めて長期保管し、 で分析する。 や へも届けられます。
複数のコンシューマーで独自のリアルタイム処理をする
条件に合うログを受けて、通知や加工をすぐに行う
Amazon OpenSearch Serviceログを全文検索とダッシュボードで分析する

送られるデータは gzip で圧縮され、base64 で符号化されています。複数のアカウントのログを1つのアカウントに集めるには、送り先のアカウントに「宛先 (destination)」を作り、送り元のアカウントからサブスクリプションフィルターを設定します。アカウント単位のサブスクリプションフィルターで、アカウントのすべてのロググループにまとめて設定することもできます。

を使っている場合は、 Logs の集約ルール (centralization rule) で、メンバーアカウントと複数ののロググループを、1つの集約先のアカウント・リージョンへ自動で複製することもできます。ルールは管理アカウント (または委任管理者) で作り、ルールを作った後に届いたログだけが対象です (過去のログは複製されません)。集約先では で全アカウントのログをまとめてクエリできます。

⚠️ 頻出: 「CloudWatch Logs のログを、ほぼリアルタイムに S3 へ集めて Athena で分析したい」は、サブスクリプションフィルター → Firehose → S3 です。


⑤S3 へのエクスポートと Logs Insights

方法動き向く場面
へのエクスポート (CreateExportTask)指定した期間のログを、まとめて S3 にコピーします。リアルタイムではなく、完了まで時間がかかることがあります過去のログを一度だけ、または定期的にまとめて長期保管する
+ 届いたログを継続的に S3 へ送りますほぼリアルタイムに S3 へ集めたい
ログに対してクエリを実行します (#65) Logs にあるログをその場で調べる

⑥ログ記録の設定の自動化

ログの設定を手作業で行うと、新しく作られたロググループに保持期間や暗号化が付かないまま放置されがちです。

自動化の方法内容
でロググループを作る、、 でロググループを明示的に定義し、保持期間と キーを指定します (#28)。 が自動で作るロググループは保持期間が「期限なし」になるため、先に IaC で作っておきます。
+ Lambdaロググループの作成イベント (CreateLogGroup の 呼び出し) を受けて、Lambda で保持期間を設定します。
のルール保持期間を検査し、自動修復で設定します (#76)。ただし、マネージドルールの cw-loggroup-retention-period-check は「期限なし」のロググループを準拠と判定するため、期限なしを見つけるにはカスタムルールが要ります。
アカウント単位のポリシーデータ保護 (マスキング) やを、アカウントのロググループにまとめて適用します。
エージェントの設定の配布 で、エージェントの設定を多数のサーバーへ配ります。

試験対策

①判断マトリクス

問題文のキーワード選ぶもの理由
ログの保存コストが増え続けているロググループの保持期間を設定既定は期限なしです。
監査用にログを長期保管、安く へ送り、ライフサイクルで安いクラスへ Logs より安く長期保管できます。
ログの中の ERROR の件数で通知フィルター + + ログをメトリクスに変えて監視します。
ログをほぼリアルタイムに S3 / へ ( / OpenSearch)継続的に転送します。
複数アカウントのログを1つのアカウントに集約送り先アカウントの宛先 + サブスクリプションフィルターアカウントをまたいで転送できます。
過去の期間のログを一度にまとめて S3 へS3 へのエクスポート指定期間をコピーします。
のアプリケーションのログを集めたいCloudWatch エージェント指定したログファイルを送ります。
ログの中のを隠したいデータ保護ポリシー (マスキング)機密データを検出してマスクします。
新しいロググループに必ず保持期間を付けたい で作成 / のルールと自動修復手作業の漏れを防ぎます。
ほとんど見ないログを安く集めたいInfrequent Access のログクラス取り込みの料金が安くなります。

②よくある誤答

  • フィルターで過去のログも集計できると考えること。作成後に届いたログだけが対象です。
  • へのエクスポートでリアルタイムに転送できると考えること。継続的な転送はです。
  • Infrequent Access のログクラスで、メトリクスフィルターやサブスクリプションフィルターを使おうとすること。使えません。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください