[アップデート]CloudWatch Logsに異常検出とパターン分析の機能が3つ追加されました! #AWSreInvent

CloudWatch Logs/Logs Insightsに過去データの比較や異常検出機能が3つ追加されました!
2023.11.28

はじめに

CX事業本部の佐藤智樹です。

今回はCloudWatch Logsに異常検出とパターン分析のための機能が3つ追加されたため、それぞれを紹介いたします。CloudWatch Logsを見る際は基本開発中に正常動作しているかの確認や本番稼働中に不審な動作が起きているか確認する際の2パターンが多いかと思います。今回の機能は後者の通常とは異なるパターンが出た際に、障害箇所の特定や原因調査のために役立つ機能になるかと思います。

結論

今回のアップデートではCloudWatch Logs Insightsに1,2の機能が、CloudWatch Logsに3の機能が追加されたことだけ認識すれば大丈夫です。開発中や障害対応の訓練や発生時などに試してみて下さい。

  1. パターンビュー
    • 似たようなパターンのログを集約して何が、いつ発生しているかをまとめて表示し、エラー傾向の分析などができる
  2. 比較モード
    • 検索している期間と昨日、前週、前月のログの出方を比較することができる
  3. ログ異常検出
    • ログに異常検出ディテクターを設定し、急なログ記録数の上昇や想定外のログ出力を検出できる

アップデート記事

設定の詳細

追加された3つの機能

本章では、追加された3つの機能について1つずつ紹介し、実際にコンソール上で動作確認を行ってみます。

1.パターンビュー

現在のログの状態からパターンを抽出し、どのようなログが普段出力されているのかサマリーで確認することができます。画面コンソール上ではCloudWatch Insightsの画面下のタブから「パターン」を選ぶことで選択できます。

実際に動作確認してみます。以下のようなコードを含むLambdaを作成して、何度か実行してログを残します。

import os
def lambda_handler(event, context):
    print('## ENVIRONMENT VARIABLES')
    print(os.environ['AWS_LAMBDA_LOG_GROUP_NAME'])
    print(os.environ['AWS_LAMBDA_LOG_STREAM_NAME'])
    print('## EVENT')
    print(event)

その後、CloudWatch Insightでデフォルトのクエリを実行するとパターンが抽出できました。

公式ブログのように虫眼鏡を押すと、どのタイミングでこのログが出力されたのかが分かります。これにより、ログがいつ、どの程度出ていたのか、現在はエラーは収束しているのかなど運用中の問題分析、解決後の確認などに使えることが分かります。

2.比較モード

次に比較モードです。この機能では指定した期間(昨日、前週、前月、前の期間)と比較して、現在の検索範囲にどのような際があるか確認できるものです。今回は「前の期間」との比較を試してみます。

以降の手順で比較が実施できます。比較する際の操作の例をご紹介します。画面右上の「比較」から「前の期間」を設定し、絶対値で比較範囲を設定して有効化します。有効化するとdiff文が追加で生成されます。その後、比較したい期間を設定すると前の期間との差分が確認できます。

fields @timestamp, @message, @logStream, @log
| sort @timestamp desc
| limit 20
| pattern @message
| diff 2023-11-27T08:00:00.000Z to 2023-11-27T08:30:00.000Z

実際に先程作成したLambdaのコードにErrorを書き加えて、比較前と比較後に差分が出るようにすると以下のような結果になります。

3.ログ異常検出

最後に、ログ異常検出です。本機能はCloudWatch Logsへの追加機能になります。左サイドバーの「異常をログ記録」から設定が行なえます。

「異常ディテクターを作成」から設定を作成し、評価期間やフィルター条件などが設定できます。

現状は、トレーニング中でまだ結果はでないため、結果が出次第追記していきます。公式記事を確認すると特定のパターンの通知量の増大や想定外のパターンが出た時に検出してくれるようです。

所感

CloudWatch周りの機能がどんどん強化されて、人間が行う際のログ調査が手軽になるというアップデートでした。今までは、過去の傾向などを把握するのに別の画面で抽出して比較などが必要だったのが簡易になり、人が見ていない場合も異常を検知しやすくなりました。まずは開発される際に是非試してみて下さい。