ログレベルのフィルタリング - AWS Lambda

ログレベルのフィルタリング

Lambda は関数のログをフィルタリングして、特定の詳細レベル以下のログのみが CloudWatch Logs に送信されるようにすることができます。関数のシステムログ (Lambda が生成するログ) とアプリケーションログ (関数コードが生成するログ) には、ログレベルのフィルタリングを個別に設定できます。

サポートされているランタイムとログ記録メソッド では、Lambda が関数のアプリケーションログをフィルタリングするために、関数コードに変更を加える必要はありません。

その他のすべてのランタイムとログ記録メソッドでは、関数コードはキー "level" とキー値のペアを含む JSON 形式のオブジェクトとして stdout または stderr にログイベントを出力する必要があります。例えば、Lambda は以下の stdout への出力を DEBUG レベルのログとして解釈します。

print('{"level": "debug", "msg": "my debug log", "timestamp": "2024-11-02T16:51:31.587199Z"}')

"level" 値フィールドが無効または欠落している場合、Lambda はログ出力にレベル INFO を割り当てます。Lambda がタイムスタンプフィールドを使用するには、有効な RFC 3339 タイムスタンプ形式で時間を指定する必要があります。有効なタイムスタンプを指定しない場合、Lambda はログに INFO レベルを割り当ててタイムスタンプを追加します。

タイムスタンプキーに名前を付ける場合は、使用しているランタイムの規則に従ってください。Lambda は、マネージドランタイムで使用されるほとんどの一般的な命名規則をサポートしています。

注記

ログレベルのフィルタリングを使用するには、JSON ログ形式を使用するように関数を設定する必要があります。現在、すべての Lambda マネージドランタイムのデフォルトのログ形式はプレーンテキストです。関数のログ形式を JSON に設定する方法については、「関数のログ形式の設定」を参照してください。

アプリケーションログ (関数コードによって生成されるログ) については、以下のログレベルから選択できます。

ログレベル 標準的な使用状況
TRACE (最も詳細) コードの実行パスを追跡するために使用される最も詳細な情報
DEBUG システムデバッグの詳細情報
情報 関数の通常の動作を記録するメッセージ
WARN 対処しないと予期しない動作を引き起こす可能性がある潜在的なエラーに関するメッセージ
ERROR コードが期待どおりに動作しなくなる問題に関するメッセージ
FATAL (詳細度が最も低い) アプリケーションの機能停止を引き起こす重大なエラーに関するメッセージ

ログレベルを選択すると、Lambda はそのレベル以下のログを CloudWatch Logs に送信します。例えば、関数のアプリケーションログレベルを WARN に設定した場合、Lambda は INFO レベルと DEBUG レベルでログ出力を送信しません。ログフィルタリングのデフォルトのアプリケーションログレベルは INFO です。

Lambda が関数のアプリケーションログをフィルタリングすると、レベルのないログメッセージにはログレベル INFO が割り当てられます。

システムログ (Lambda サービスによって生成されるログ) については、以下のログレベルから選択できます。

ログレベル 使用方法
DEBUG (詳細度が最も高い) システムデバッグの詳細情報
情報 関数の通常の動作を記録するメッセージ
WARN (詳細度が最も低い) 対処しないと予期しない動作を引き起こす可能性がある潜在的なエラーに関するメッセージ

ログレベルを選択すると、Lambda はそのレベル以下のログを送信します。例えば、関数のシステムログレベルを INFO に設定した場合、Lambda は DEBUG レベルでログ出力を送信しません。

デフォルトでは、Lambda はシステムログレベルを INFO に設定します。この設定では、Lambda は自動的に CloudWatch に "start" および "report" ログメッセージを送信します。詳細度がより高いシステムログまたは詳細度がより低いシステムログを受信するには、ログレベルを DEBUG または WARN に変更します。Lambda がさまざまなシステムログイベントをマッピングするログレベルのリストを確認するには、「システムログレベルのイベントマッピング」を参照してください。

ログレベルフィルタリングの設定

関数にアプリケーションとシステムログレベルのフィルタリングを設定するには、Lambda コンソールまたは AWS Command Line Interface (AWS CLI) を使用できます。CreateFunctionUpdateFunctionConfiguration Lambda API コマンド、AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function リソース、および AWS CloudFormation AWS::Lambda::Function リソースを使用して、関数のログレベルを設定することもできます。

関数のログレベルをコード内で設定した場合、この設定は他のログレベル設定よりも優先されることに注意してください。例えば、Python logging setLevel() メソッドを使用して関数のログレベルを INFO に設定した場合、この設定は Lambda コンソールを使用して設定した WARN の設定よりも優先されます。

既存の関数のアプリケーションまたはシステムログレベルを設定するには (コンソール)
  1. Lambda コンソールの [関数ページ] を開きます。

  2. 関数を選択します。

  3. 関数設定ページで、[モニタリングおよび運用ツール] を選択します。

  4. [ログ記録設定] ペインで、[編集] を選択します。

  5. [ログの内容][ログ形式][JSON] が選択されていることを確認します。

  6. ラジオボタンを使用して、関数に必要な [アプリケーションログレベル][システムログレベル] を選択します。

  7. [保存] を選択します。

既存の関数のアプリケーションまたはシステムログレベルを設定するには (AWS CLI)
  • 既存の関数のアプリケーションログレベルまたはシステムログレベルを変更するには、update-function-configuration コマンドを使用します。--logging-config を使用して、DEBUGINFO または WARN のいずれかに SystemLogLevel を設定します。ApplicationLogLevelDEBUGINFOWARNERROR、または FATAL のいずれかに設定します。

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN
関数の作成時にログレベルのフィルタリングを設定するには
  • 新しい関数を作成するときにログレベルのフィルタリングを設定するには、--logging-config を使用して create-function コマンドの SystemLogLevel および ApplicationLogLevel キーを設定します。SystemLogLevelDEBUGINFO、または WARN のいずれかに設定します。ApplicationLogLevelDEBUGINFOWARNERROR、または FATAL のいずれかに設定します。

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs22.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN

システムログレベルのイベントマッピング

Lambda によって生成されるシステムレベルのログイベントについて、以下の表は各イベントに割り当てられるログレベルを定義しています。表に記載されているイベントの詳細については、「Lambda Telemetry API Event スキーマリファレンス」を参照してください。

イベント名 条件 割り当てられたログレベル
initStart runtimeVersion が設定されている 情報
initStart runtimeVersion が設定されていない DEBUG
initRuntimeDone status=success DEBUG
initRuntimeDone status!=success WARN
initReport initializationType!=on-demand 情報
initReport initializationType=on-demand DEBUG
initReport status!=success WARN
restoreStart runtimeVersion が設定されている 情報
restoreStart runtimeVersion が設定されていない DEBUG
restoreRuntimeDone status=success DEBUG
restoreRuntimeDone status!=success WARN
restoreReport status=success 情報
restoreReport status!=success WARN
開始 - 情報
runtimeDone status=success DEBUG
runtimeDone status!=success WARN
レポート status=success 情報
レポート status!=success WARN
拡張子 state=success 情報
拡張子 state!=success WARN
logSubscription - 情報
telemetrySubscription - 情報
logsDropped - WARN
注記

Telemetry API を使用して拡張機能のリアルタイムテレメトリデータにアクセスする は常にプラットフォームイベントの完全なセットを出力します。Lambda が CloudWatch に送信するシステムログのレベルを設定しても、Lambda Telemetry API の動作には影響しません。

カスタムランタイムによるアプリケーションログレベルのフィルタリング

関数にアプリケーションログレベルのフィルタリングを設定すると、バックグラウンドで Lambda は AWS_LAMBDA_LOG_LEVEL 環境変数を使用してランタイムのアプリケーションログレベルを設定します。また、Lambda は AWS_LAMBDA_LOG_FORMAT 環境変数を使用して関数のログ形式を設定します。これらの変数を使用して、Lambda の高度なログ記録コントロールをカスタムランタイムに統合できます。

Lambda コンソール、AWS CLI、および Lambda API でカスタムランタイムを使用して関数のログ記録設定を設定できるようにするには、これらの環境変数の値をチェックするようにカスタムランタイムを設定します。その後、選択したログ形式とログレベルに従ってランタイムのロガーを設定できます。