如何解决AWS Cloudwatch在一段时间内没有日志时,如何发出警报?
我有一个在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;
}
}
解决方法
您可以使用CloudWatch Alarms执行此操作。我为此设置了一个测试Lambda函数,该函数每分钟运行一次并登录到CloudWatch。
- 转到CloudWatch并单击左侧菜单中的警报
- 点击橙色的创建警报按钮
- 点击选择指标
- 然后选择 Logs ,然后选择 Log Group Metrics ,然后为相关日志组(应用程序要记录到的日志组)选择
IncomingLogEvents
度量标准。就我而言,它是/aws/lambda/test-log-silence
- 点击选择指标
- 现在,您可以指定度量的度量方式。我选择了5分钟内的平均日志条目,因此5分钟后如果没有日志条目,则该值为零。
- 向下滚动,并将检查设置为“小于或等于”零。 5分钟内没有日志条目(或您决定将其设置为任何值)时,将触发警报。
- 现在单击下一步,您可以指定将通知推送到的SNS主题。您可以设置一个SNS主题,以通过电子邮件,SMS,AWS Lambda等通知您。
参考 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,});
这也应该可以解决忽略缺失数据的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。