Ash*_*ndu 5 java amazon-web-services amazon-ecs amazon-cloudwatchlogs cloudwatch-alarms
我有一个在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*van 10
您可以使用 CloudWatch 警报来执行此操作。我为此设置了一个测试 Lambda 函数,该函数每分钟运行一次并记录到 CloudWatch。


IncomingLogEvents相关日志组(您的应用程序正在记录的日志组)的指标。就我而言是/aws/lambda/test-log-silence



参考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,
});
Run Code Online (Sandbox Code Playgroud)
这也应该解决忽略丢失数据的问题。