Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当AWS Cloudwatch在一段时间内没有日志时,如何获取警报?_Java_Amazon Web Services_Amazon Ecs_Amazon Cloudwatchlogs_Cloudwatch Alarms - Fatal编程技术网

Java 当AWS 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

我有一个在AWS弹性容器服务中运行的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警报来实现这一点。我为此设置了一个测试Lambda函数,它每分钟运行一次,并记录到CloudWatch

  • 转到CloudWatch并单击左侧菜单中的报警
  • 单击橙色的“创建报警”按钮
  • 单击选择度量
  • 然后选择Logs,然后选择Log Group Metrics,并为相关日志组(应用程序正在记录的日志组)选择
    IncomingLogEvents
    指标。在我的例子中,它是
    /aws/lambda/test log silent
  • 单击选择度量值
  • 现在,您可以指定要如何测量度量。我选择了5分钟内的平均日志条目,因此5分钟后如果没有日志条目,该值将为零。
  • 向下滚动,将支票设置为“小于或等于”零。这将在5分钟内没有日志条目时触发警报(或您决定将其设置为什么)。
  • 现在单击next,您可以指定要将通知推送到的SNS主题。您可以设置一个SNS主题,通过电子邮件、SMS、AWS Lambda和其他方式通知您
  • 关于的答案,如果您使用的是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,
        });
    

    这也可以解决忽略丢失数据的问题。

    很抱歉,我要打断一下这个问题。我有一个类似的要求,我必须检查6小时内是否没有日志消息,然后我必须触发报警状态。我实现了与上面相同的配置。但这种行为仍然不一致。即使超过6小时,也不会进入报警状态。似乎在没有日志的情况下,数据可能会不足。这里需要一些输入。@SwapnilMhaske创建报警时,页面底部有其他配置。根据您的要求选择“处理缺失数据是好是坏”。默认设置为将缺少的数据视为缺少。这就是为什么它会变得不充分。