我有一个每2小时运行一次的备份脚本。我想使用CloudWatch跟踪此脚本的成功执行情况以及CloudWatch的警报,以便在脚本遇到问题时得到通知。
每次成功备份后,脚本都会在CloudWatch指标上放置一个数据点:
mon-put-data --namespace Backup --metric-name $metric --unit Count --value 1
只要指标上的统计“总和”在6小时内小于2,我就会发出警报进入警报状态。
为了测试这个设置,一天后,我停止将数据放入度量标准中(即,我注释掉了mon-put-data命令)。很好,最终警报进入警报状态,我收到了电子邮件通知,正如预期的那样。
问题在于,一段时间之后,警报又恢复到OK状态,但是没有新的数据添加到指标中!
已记录两个转换(OK => ALARM,然后是ALARM => OK),并在此问题中重现日志。请注意,虽然两者都显示“period:21600”(即6h),但第二个显示startDate和queryDate之间的12小时时间跨度;我看到这可能解释了转换,但我无法理解为什么CloudWatch正在考虑12小时的时间跨度来计算6小时的统计数据!
我在这里缺少什么?如何配置警报以实现我想要的(即,如果没有进行备份,则会收到通知)?
{
"Timestamp": "2013-03-06T15:12:01.069Z",
"HistoryItemType": "StateUpdate",
"AlarmName": "alarm-backup-svn",
"HistoryData": {
"version": "1.0",
"oldState": {
"stateValue": "OK",
"stateReason": "Threshold Crossed: 1 datapoint (3.0) was not less than the threshold (3.0).",
"stateReasonData": {
"version": "1.0",
"queryDate": "2013-03-05T21:12:44.081+0000",
"startDate": "2013-03-05T15:12:00.000+0000",
"statistic": "Sum",
"period": 21600,
"recentDatapoints": [
3
],
"threshold": 3
}
},
"newState": {
"stateValue": "ALARM",
"stateReason": "Threshold Crossed: 1 datapoint (1.0) was less than the threshold (2.0).",
"stateReasonData": {
"version": "1.0",
"queryDate": "2013-03-06T15:12:01.052+0000",
"startDate": "2013-03-06T09:12:00.000+0000",
"statistic": "Sum",
"period": 21600,
"recentDatapoints": [
1
],
"threshold": 2
}
}
},
"HistorySummary": "Alarm updated from OK to ALARM"
}
第二个,我简单无法理解:
{
"Timestamp": "2013-03-06T17:46:01.063Z",
"HistoryItemType": "StateUpdate",
"AlarmName": "alarm-backup-svn",
"HistoryData": {
"version": "1.0",
"oldState": {
"stateValue": "ALARM",
"stateReason": "Threshold Crossed: 1 datapoint (1.0) was less than the threshold (2.0).",
"stateReasonData": {
"version": "1.0",
"queryDate": "2013-03-06T15:12:01.052+0000",
"startDate": "2013-03-06T09:12:00.000+0000",
"statistic": "Sum",
"period": 21600,
"recentDatapoints": [
1
],
"threshold": 2
}
},
"newState": {
"stateValue": "OK",
"stateReason": "Threshold Crossed: 1 datapoint (3.0) was not less than the threshold (2.0).",
"stateReasonData": {
"version": "1.0",
"queryDate": "2013-03-06T17:46:01.041+0000",
"startDate": "2013-03-06T05:46:00.000+0000",
"statistic": "Sum",
"period": 21600,
"recentDatapoints": [
3
],
"threshold": 2
}
}
},
"HistorySummary": "Alarm updated from ALARM to OK"
}
答案 0 :(得分:5)
此行为(您的监视器未转换到INSFUCCIENT_DATA状态是因为Cloudwatch会考虑'预先加上时间戳'的指标数据点,因此(如果在当前的6个小时窗口中没有数据,则为6小时警报)...将从前6小时窗口中获取数据(因此您在上面看到的12小时时间戳)。
要提高警报的“保真度”,请将警报周期缩短至1小时/ 3600秒,并将评估周期数增加到您想要在失败时报警的周期数。这将确保您的警报按预期转换为INSFUCCIENT_DATA。
如何配置警报以实现我想要的功能(即,如果没有进行备份,会收到通知)?
如果您的工作成功,您的警报的可能架构将发布1,如果失败则为0。然后创建一个阈值为< 1 - 3 - 3600s时段意味着如果作业失败(即正在运行......但失败),您的警报将进入警报状态。如果您还对该警报设置了INSFUCCIENT_DATA操作,那么如果您的工作根本没有运行,您也会收到通知。
希望这是有道理的。