如何在 AWS Cloudwatch 中的某个时间段内没有日志时收到警报?

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。

  1. 转到 CloudWatch 并单击左侧菜单中的警报
  2. 单击橙色的“创建警报”按钮 创建警报
  3. 单击选择指标 选择指标
  4. 然后选择Logs,然后选择Log Group Metrics并选择IncomingLogEvents相关日志组(您的应用程序正在记录的日志组)的指标。就我而言是/aws/lambda/test-log-silence 选择日志组指标
  5. 单击选择指标
  6. 现在您可以指定如何衡量指标。我选择了 5 分钟内的平均日志条目,因此 5 分钟后,如果没有日志条目,该值将为零。 指定公制测量
  7. 向下滚动,并将检查设置为“低于或等于”零。当 5 分钟内没有日志条目(或您决定设置的任何值)时,这将触发警报。 指定条件
  8. 现在单击“下一步”,您可以指定要推送通知的 SNS 主题。您可以设置 SNS 主题以通过电子邮件、短信、AWS Lambda 等方式通知您。

  • @SwapnilMhaske 当您创建警报时,页面底部有附加配置。根据您的要求选择处理缺失数据是好还是坏。默认设置是将缺失数据视为缺失。这就是为什么它会进入不足状态。 (2认同)

som*_*pnd 5

参考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)

这也应该解决忽略丢失数据的问题。