AWS Lambdaのロギング設定を試してみた
Lambdaのログ設定に関する検証
こんばんは!DELTAの馬場です。
クラスメソッドさんのこの記事を見て、Lambda側で出力するシステムログについても制御できないかと思い検証してみました!
目指したこと
Lambdaのログはアプリケーションで設定しているログ以外にもLambdaで定義されたシステムログも出力されることがあり、ノイズになってしまうことがあります。
そのためLambdaのシステムログは出力せず、アプリケーションのログのみ出てくるようにしたいと考えました。
試してみる
Pythonでササっと試してみます。以下がサンプルコードです。
import json
import logging
logger = logging.getLogger()
def lambda_handler(event, context):
logger.debug("debug log")
logger.info("info log")
logger.warn("warn log")
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
設定等はクラスメソッドさんの記事を参照していきます。
設定 > モニタリングおよび運用ツール > ロギング設定 > 「編集」ボタン
まずは記事と同様にアプリケーションログレベル側の変更を行います。
アプリケーションログレベルの検証
アプリケーションログレベルをINFOに設定し、出力内容について確認していきます。
検証観点
1.コードに記載したinfo,warnのログのみが出てくるか?
2.Lambdaのログが出力されるか?
結果
1.意図したとおり、debugのログは出力されずinfo,warnのログは出力された。
2.Lambdaのログは出力されています。
- アプリケーション側のログレベルを変更するだけでは意図した結果になりませんでした。
システムログレベルの検証
ここで再度ロギング設定の画面を見てみると、 "システムログレベル" という項目があり
システムログは、Lambda が生成するログであり、プラットフォームログとも呼ばれます。より詳細なログレベルを選択すると、CloudWatch ログから追加のコストが発生することがあります。
と記載されています。
まさしく意図していたものっぽいので、これをWARNにして動作を確認してみます。
(ノリでアプリ側もWARNにしてみました)
期待値
1.コードに記載したwarnのログのみ出力される。
2.Lambdaのログが出力されない
結果
1.コードに記載したwarnのログのみ出力される。
2.Lambdaのログが出力されない
まとめ
Lambdaの追加されたロギング設定を活用することで、意図したログのみを出力させ、ログ監視やログ確認を容易にすることが可能だということが確認できました!
Discussion