Java 当AWS Cloudwatch在一段时间内没有日志时,如何获取警报?
我有一个在AWS弹性容器服务中运行的Java应用程序。应用程序定期轮询队列。有时,队列没有响应,应用程序永远挂起。 我已经用try-catch块和日志异常将这些方法封装起来。即使此后Cloudwatch中没有日志。没有例外或错误。 有没有办法让我确定这种情况?(Cloudwatch中没有日志)。就像过滤错误日志模式一样。 这样我就可以重新启动服务了。任何诡计或解决办法都将不胜感激Java 当AWS Cloudwatch在一段时间内没有日志时,如何获取警报?,java,amazon-web-services,amazon-ecs,amazon-cloudwatchlogs,cloudwatch-alarms,Java,Amazon Web Services,Amazon Ecs,Amazon Cloudwatchlogs,Cloudwatch Alarms,我有一个在AWS弹性容器服务中运行的Java应用程序。应用程序定期轮询队列。有时,队列没有响应,应用程序永远挂起。 我已经用try-catch块和日志异常将这些方法封装起来。即使此后Cloudwatch中没有日志。没有例外或错误。 有没有办法让我确定这种情况?(Cloudwatch中没有日志)。就像过滤错误日志模式一样。 这样我就可以重新启动服务了。任何诡计或解决办法都将不胜感激 public void handleProcess() { try { while(true
public void handleProcess() {
try {
while(true) {
Response response = QueueUitils.pollQueue(); // poll the queue
QueueUitils.processMessage(response);
TimeUnit.SECONDS.sleep(WAIT_TIME); // WAIT_TIME = 20
}
} catch (Exception e) {
LOGGER.error("Data Queue operation failed" + e.getMessage());
throw e;
}
}
您可以使用CloudWatch警报来实现这一点。我为此设置了一个测试Lambda函数,它每分钟运行一次,并记录到CloudWatch
IncomingLogEvents
指标。在我的例子中,它是/aws/lambda/test log silent
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';
// ...
const metric = new cloudwatch.Metric({
namespace: 'AWS/Logs',
metricName: 'IncomingLogEvents',
dimensions: { LogGroupName: '/aws/lambda/test-log-silence' },
statistic: "Average",
period: cdk.Duration.minutes(5),
});
const alarm = new cloudwatch.Alarm(this, 'Alarm', {
metric,
threshold: 0,
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD,
evaluationPeriods: 1,
datapointsToAlarm: 1,
treatMissingData: cloudwatch.TreatMissingData.BREACHING,
});
这也可以解决忽略丢失数据的问题。很抱歉,我要打断一下这个问题。我有一个类似的要求,我必须检查6小时内是否没有日志消息,然后我必须触发报警状态。我实现了与上面相同的配置。但这种行为仍然不一致。即使超过6小时,也不会进入报警状态。似乎在没有日志的情况下,数据可能会不足。这里需要一些输入。@SwapnilMhaske创建报警时,页面底部有其他配置。根据您的要求选择“处理缺失数据是好是坏”。默认设置为将缺少的数据视为缺少。这就是为什么它会变得不充分。