2013-03-06 98 views
5

我有一個每2小時運行一次的備份腳本。我希望使用CloudWatch跟蹤此腳本和CloudWatch的警報的成功執行情況,以便在腳本遇到問題時得到通知。奇怪的CloudWatch警報行爲

腳本把一個數據點上的CloudWatch指標的所有備份成功後:

mon-put-data --namespace Backup --metric-name $metric --unit Count --value 1 

我有去報警狀態時的指標統計「總和」小於2的警報6小時。

爲了測試這個設置,在一天之後,我停止了將數據放入度量標準(即,我註釋掉了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" 
} 

回答

5

這種行爲(即您的顯示器沒有過渡到INSFUCCIENT_DATA狀態是因爲CloudWatch的考慮「前時間戳」指標數據點等(6小時報警),如果在當前的6個開放時間窗口中沒有數據存在,它將從之前的6個小時窗口獲取數據(因此,您將在上面看到12小時時間戳)

爲了提高'保真度'你的鬧鐘,降低鬧鐘時間t o 1小時/ 3600s,並將您的評估時間段數量增加到您希望在發生故障時報警的時間段。這將確保您的警報按照您的期望過渡到INSFUCCIENT_DATA。

如何配置鬧鐘以實現我想要的功能(例如,在沒有進行備份時會收到通知)?

如果您的工作成功,您的警報可能的體系結構將發佈1,如果失敗,則發佈0。然後創建一個門檻值爲< 1的鬧鐘,時間爲3 - 3600s,這意味着如果工作失敗(即正在運行但失敗),您的鬧鐘將進入鬧鐘。如果您還對該警報設置了INSFUCCIENT_DATA操作,那麼如果您的工作完全沒有運行,您也會收到通知。

希望是有道理的。

+0

有趣。但是我不覺得這個「功能」不是文檔的任何地方(或者是它,我根本無法找到它)。另外,您提出的架構聽起來不太好:在沒有數據點的情況下收到通知的整個想法是在通知失敗的情況下發出警報(例如,假設導致備份的服務器死亡,或者存在網絡問題等)。感謝您的答覆!考慮到這一點,我會看看我能做些什麼。 – 2013-03-07 18:09:31

+0

因此,在沒有度量數據點的情況下,警報將轉換爲INSUFFICIENT_DATA狀態,而不是ALARM狀態。因此,如果您希望在您的工作未運行時收到通知..您需要在INSFUCCIENT_DATA上指定一項操作。如果有數據點可用於比較閾值,警報將只轉換到ALARM狀態。 – Wal 2013-03-07 23:02:48

+0

因此,我建議發佈工作成功時的值爲1,工作失敗時發佈值爲0(即作業正在運行但未成功完成),並最終讓INSFUCCIENT_DATA狀態處理缺少發佈的度量標準(即,運行作業的主機已經死亡) – Wal 2013-03-07 23:05:39