Lambda の Errors メトリクスが上昇したがログにエラーがないときに確認すべき内容を教えてください
困っていた内容
監視システムから Lambda の Errors メトリクスの上昇通知を受けました。
CloudWatch Logs に出力された該当時間帯のアプリケーションログを確認しましたが、ERROR
のメッセージは記録されていませんでした。
他に調査すべき内容を教えてください。
どう対応すればいいの?
Duration メトリクスをご確認ください。
※ Lambda コンソールの場合は「Error count and success rate」の左横に表示されます。
Errors メトリクスの上昇は、関数でエラーが発生したことを表します。エラーには、アプリケーションからスローされた例外のほか、Lambda からスローされる例外も含まれます。
Lambda からスローされる例外のひとつに、関数のタイムアウトがあり、タイムアウトの場合は次のようなメッセージが記録されます。
2024-01-02T03:04:05.006Z abcdb8c8-463f-4394-96d5-ee064de2788b Task timed out after 3.00 seconds
そのため、ERROR
等の文字列でログを確認した場合、タイムアウトを検知できない場合があります。
従って、Task timed out after
の文字列でログを調査するか、処理時間を示す Duration メトリクスが Lambda のタイムアウト設定まで上昇していないか確認してください。
なお、Duration メトリクスはミリ秒単位のため、例えば 3 秒の場合は、3.00 k
となります。
また、Lambda のタイムアウト設定は、「一般設定」から確認できます。
参考資料
- Lambda 関数がタイムアウトしているかどうかを確認する | AWS re:Post
注:Lambda 関数の呼び出しがタイムアウトすると、失敗した呼び出しの CloudWatch ログにエラーメッセージではなく、 Task timed out エラーメッセージが表示されます。関数の CloudWatchログでエラーメッセージのみを検索すると、呼び出しタイムアウトエラーではなく、コード関連のランタイムエラーのみが返されます。詳細については、「Amazon CloudWatch を使用した AWS Lambda エラーのモニタリング」を参照してください。