我有一个在EC2上运行的Java进程我希望在进程停止或处于错误状态时在Cloudwatch中设置警报(例如,在过去10秒左右不向Cloudwatch发送心跳)。
最好的方法是什么?我认为我需要自定义指标,但没有找到专门监控流程的任何文档。
如果需要,我可以使用AWS SDK。
答案 0 :(得分:2)
您可以使用ps
或jps
编写自定义脚本,并将该指标推送到Cloudwatch。 但是如果您正在寻找10秒粒度,那么Cloudwatch不是正确的解决方案,因为它的最小粒度为60秒。
来自:AWS Resource and Custom Metrics Monitoring
问:Amazon CloudWatch的数据的最小粒度是多少 收到并汇总?
CloudWatch支持的最小粒度为1分钟数据 点。在1分钟内收到并汇总了许多指标 间隔。有些是以3分钟或5分钟的间隔收到的。
虽然可以使用CLI和SDK创建警报,但我建议您使用AWS Cloudwatch仪表板。等待您的自定义指标显示在Cloudwatch信息中心中。在Cloudwatch中查看自定义指标后,单击CreateAlarm并选择指标。之后定义你的警报。 附加的图像显示应用程序作为指标。在您的情况下,它将是您选择称呼它的任何名称。在“操作”下,创建新通知并指定您的电子邮件。现在,如果计数在一段时间内低于1,您将收到警报。
答案 1 :(得分:0)
AWS自定义指标可用于发布程序的运行状况。
以下Java代码可用于发布心跳。使用自定义指标可以在CloudWatch中配置警报。
AmazonCloudWatch amazonCloudWatch = AmazonCloudWatchClientBuilder.standard().
withEndpointConfiguration(new AwsClientBuilder.
EndpointConfiguration("monitoring.us-west-1.amazonaws.com","us-west-1")).build();
PutMetricDataRequest putMetricDataRequest = new PutMetricDataRequest();
putMetricDataRequest.setNamespace("CUSTOM/SQS");
MetricDatum metricDatum1 = new MetricDatum().withMetricName("MessageCount").withDimensions(new Dimension().withName("Personalization").withValue("123"));
metricDatum1.setValue(-1.00);
metricDatum1.setUnit(StandardUnit.Count);
putMetricDataRequest.getMetricData().add(metricDatum1);
PutMetricDataResult result = amazonCloudWatch.putMetricData(putMetricDataRequest);