我有一个在AWS Elastic Container Service中运行的Java应用程序。应用程序定期轮询队列。有时,队列没有响应,并且应用程序永远挂起。 我已经用try-catch块将这些方法包含在日志记录异常中了。即使之后,Cloudwatch中也没有日志。没有例外或错误。 有没有一种方法可以识别这种情况。 ? (在Cloudwatch中没有日志)。就像过滤错误日志模式一样。 因此,我可以重新启动服务。任何技巧或解决方案将不胜感激。
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;
}
}
答案 0 :(得分:2)
您可以使用CloudWatch Alarms执行此操作。我为此设置了一个测试Lambda函数,该函数每分钟运行一次并登录到CloudWatch。
IncomingLogEvents
度量标准。就我而言,它是/aws/lambda/test-log-silence
答案 1 :(得分:2)
参考 brads3290 的回答,如果您使用的是 AWS CDK:
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,
});
这也应该可以解决忽略缺失数据的问题。