ログレベルのフィルタリング
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 は、マネージドランタイムで使用されるほとんどの一般的な命名規則をサポートしています。
注記
ログレベルのフィルタリングを使用するには、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) を使用できます。CreateFunction と UpdateFunctionConfiguration Lambda API コマンド、AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function リソース、および AWS CloudFormation AWS::Lambda::Function リソースを使用して、関数のログレベルを設定することもできます。
関数のログレベルをコード内で設定した場合、この設定は他のログレベル設定よりも優先されることに注意してください。例えば、Python logging
setLevel()
メソッドを使用して関数のログレベルを INFO に設定した場合、この設定は Lambda コンソールを使用して設定した WARN の設定よりも優先されます。
既存の関数のアプリケーションまたはシステムログレベルを設定するには (コンソール)
Lambda コンソールの [関数ページ]
を開きます。 -
関数を選択します。
-
関数設定ページで、[モニタリングおよび運用ツール] を選択します。
-
[ログ記録設定] ペインで、[編集] を選択します。
-
[ログの内容] の [ログ形式] で [JSON] が選択されていることを確認します。
-
ラジオボタンを使用して、関数に必要な [アプリケーションログレベル] と [システムログレベル] を選択します。
-
[保存] を選択します。
既存の関数のアプリケーションまたはシステムログレベルを設定するには (AWS CLI)
-
既存の関数のアプリケーションログレベルまたはシステムログレベルを変更するには、update-function-configuration
コマンドを使用します。 --logging-config
を使用して、DEBUG
、INFO
またはWARN
のいずれかにSystemLogLevel
を設定します。ApplicationLogLevel
をDEBUG
、INFO
、WARN
、ERROR
、またはFATAL
のいずれかに設定します。aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN
関数の作成時にログレベルのフィルタリングを設定するには
-
新しい関数を作成するときにログレベルのフィルタリングを設定するには、
--logging-config
を使用して create-functionコマンドの SystemLogLevel
およびApplicationLogLevel
キーを設定します。SystemLogLevel
をDEBUG
、INFO
、またはWARN
のいずれかに設定します。ApplicationLogLevel
をDEBUG
、INFO
、WARN
、ERROR
、または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 でカスタムランタイムを使用して関数のログ記録設定を設定できるようにするには、これらの環境変数の値をチェックするようにカスタムランタイムを設定します。その後、選択したログ形式とログレベルに従ってランタイムのロガーを設定できます。