当我在调试模式下运行下面的代码并在该行上设置断点并单步执行该行时,它会返回记录。但是当我在常规运行中运行它并且不进入这一行时,它会产生 0 结果。 我究竟做错了什么?谢谢
GetQueryResultsResult getQueryResultsResult = awslogs.getQueryResults(getQueryResultsRequest);
在该行代码之前添加以下代码行已解决问题:
TimeUnit.SECONDS.sleep(2);
谢谢
查询不是通过
getQueryResults
的方法CloudWatchLogsClient
执行的,而是在调用startQuery
时执行。
startQuery
可能需要很长时间才能完成执行,因此如果您在 getQueryResults
之后立即调用 startQuery
,它将不会获得结果,因为查询可能仍在运行。
因此,要获取结果,您可以通过检查
GetQueryResultsResponse
的状态来验证查询是否仍在运行,如下所示:
GetQueryResultsResponse getQueryResultsResponse = null;
do {
getQueryResultsResponse = awslogs.getQueryResults(getQueryResultsRequest);
} while ("Running".equals(getQueryResultsResponse.status().toString()));
使用迭代“DescribeQueriesCommand”检查并等待查询处于“Complete”状态,然后调用“GetQueryResultsCommand”。
迭代调用“GetQueryResultsCommand”只会浪费 AWS CloudWatch Insights 查询限制。