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 個月前檢視次數 363 次
2 個答案
0

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

start_time = now - datetime.timedelta(minutes=5)
profile picture
專家
已回答 3 個月前
0

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

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

已回答 3 個月前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南