マイクロサービス?(AWS Lambda)のログの運用監視する際のツール ※Node.jsの場合
便利なツールは以下の通り
- DAZN Lambda Powertools
関連性のあるLambda同士を紐づけるIDをログに出力してくれます。
LambdaからLambdaの呼び出しが複雑になる場合に、関連性のあるログを一括して検索した場合に活用できます。
参考URL:https://dev.classmethod.jp/articles/dazn-lambda-powertools/
- AWS X-Ray
AWSのサービス(Lambdaもできる)の関連性を可視化でき、分析もできます。
※画面イメージ的には、JP1とか、Jenkinsのパイプライン的な感じ。Lambdaのジョブフローが見える感じ。
※内部的には、上記で紹介した「DAZN Lambda Powertools」と同じようなことしてます。
参考URL:https://docs.aws.amazon.com/xray/index.html
DAZN Lambda Powertools&AWS X-Rayどちらも使う場合の実装サンプルは以下。
varAWSXRay=require('aws-xray-sdk-core');constclient=require('@dazn/lambda-powertools-lambda-client');varLambda=AWSXRay.captureAWSClient(client);constLog=require('@dazn/lambda-powertools-logger');constwrap=require('@dazn/lambda-powertools-pattern-basic');exports.handler=wrap(async(event,context)=>{Log.info('start');constrequest={FunctionName:'次の関数名',InvokeArgs:JSON.stringify({message:'hello lambda'})};awaitLambda.invokeAsync(request).promise();});
※アクティブトレースにチェック必要(X-RAY使う為)
※レイヤーに、xrayとdaznのライブラリ追加が必要
※起点のLambdaから複数のLambdaを非同期的に呼び出す場合は、AWSXRay.captureAsyncFuncを使った方が良さげ。
※本番環境で運用する場合は、エラーハンドリングはちゃんと書いてね。
なお、X-RAYの機能は、性能分析(Lambdaの実行時間分かる)に使えるのですが、
Lambdaの中の一部分の性能をはかりたい場合には、サブセグメント(beginとend)を決め、
サブセグメントの実行時間を計測できます。
詳細は以下URL
https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-sdk-nodejs-subsegments.html
概念的にはJavaの実装のが理解しやすい。以下の通り
https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-sdk-java-subsegments.html
※Node.jsでも、Java的な書き方は可能。