Lambda関数(Python)内でのCloudWatch Logs Insightのqueryについて

0

Lambda関数(Python3.12)からCloudWatch Logs Insightのqueryを実行したいのですが、どうにも理解しがたい現象が発生したので質問させていただきます。 ある時間範囲内で特定の文字列を含む行を取得したく、以下のようにしました。 now = datetime.datetime.utcnow() # 開始時刻 start_time = now - datetime.timedelta(minutes=1) # 1分前からのログを対象にする start_time_epoch = int(start_time.timestamp()) (数秒待機) now = datetime.datetime.utcnow() # 終了時刻 now_epoch = int(now.timestamp()) query_result = logs_client.start_query( logGroupName=log_group_name, startTime=start_time_epoch, endTime=now_epoch, queryString=query_string, limit=1 ) これでは、結果が取れず、{'results': [] (以下省略)....のようになります。 ところが、この時のstart_time_epoch、now_epochの値をLambdaのログに書き出して、以下のようにその時の値を直接入れると、正常な結果が返ってきます。 start_time_epoch = 1707184457 now_epoch = 1707184519 結果は、{'results': [[{'field': '@timestamp', 'value': (以下省略)...と取得したい結果が返ってきます。

この違いがなぜ起こるのか、また(直接数値指定しないで)正しい結果を得るにはどうすればいいのか? ご教示いただきたく、よろしくお願いします。

質問済み 3ヶ月前357ビュー
2回答
0

開始時刻を5分前からのものに変更してみてください。
おそらく1分だと早すぎるのではないかと思います。(私の環境で試したところ5分の場合はログの確認が出来ました)
直接数値を指定したときに動いたのは時間が経っていたからだと思います。

start_time = now - datetime.timedelta(minutes=5)
profile picture
エキスパート
回答済み 3ヶ月前
0

早速のご回答ありがとうございます。 5分前にしてテストしたところ、前のエラーを拾ってしまいました(立て続けにテストしていましたので)。ですが、お陰様でこれがヒントになり、解決することができました。 トリガによりLambda関数が起動される時刻に対して、実際にログが書き込まれるまでの時刻遅延が想定(10秒程度)より非常に大きく、処理開始を120秒遅らせることにより期待した結果を得ることができました。実際、メッセージを流して直ぐに手動でLogs Insightを動かしても、取ることができませんでしたので、かなり時間がかかるのですね。

この度は、迅速に回答いただけたお陰で、早期に解決することができました。 本当に、ありがとうございました。

回答済み 3ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン