Backup AWS CloudWatch To Graphite

AWS 某些自動化程序,其實都是透過 CloudWatch 去觸發,譬如最常見的 Auto-Scale;而Open Source 收集資料做成 Metric 的並不少,最常見的便是 StatsD+Graphite,要做到根據收到的資料發通知給 Service Owner 的 Tool 其實也有,但是要做到有UI,並且讓沒有工程師背景的人簡單使用的話,CloudWatch或許是一個最不花時間的 Solution (因為花錢請 AWS 工程師解決好了XD)

但是 CloudWatch 有一個缺點,就是資料只能保存兩個禮拜而已,但是有些人可能會想要根據更久以前的資料來做統計分析啊,因此我就上網找到有人實作把 CloudWatch 的資料備份到 Graphite的程式,去 GitHub Fork 回來後,把原來不能動的 Node.js,小做一下修改,發現可行之後我越改越起勁,改到後來跟原作者的 Code 相差超級多的,看來應該是不用想要 Merge 回去了XD大家照著底下的步驟做,就可以把 CloudWatch 的資料備份到 Graphite 了

把 Code 複製到你的機器上

git clone https://github.com/smalltown/cloudwatch2graphite

安裝必要的 Package

$ yum npm # 因為是用 Node.JS 寫的,所以需要把 npm 安裝好
$ yum nc # 用來把資料傳送到 Graphite 的 Carbon 內

$ npm install dateformat
$ npm install datejs
$ npm install aws2js
$ npm install nconf

修改適合自己的 Configuration

config/credentials.json

{
    "accessKeyId": "",
    "secretAccessKey": ""
}

有用過 AWS 的人應該都知道這個東東,透過 Access Key 才能夠讓你的程式去使用 AWS 的內部功能

config/metric.json

{
  "interval" : 1440,
  "PeriodOthers" : 60,
  "PeriodBilling" : 28800,
  "Statistics" : "Sum",
  "region" : "us-east-1",
  "carbonNameSpacePrefix" : "cloudwatch",
  "numberOfOverlappingPoints" : 3,
  "Namespace": [
    "Namespace1",
    "Namespace2",
        ...
    "NamespaceN"
  ]
}
  • interval: 代表你要一次從抓取幾分鐘的資料回來,填了5的話就是把現在到 5 分鐘前的資料抓回來,共會抓到5個點 P.S. 最多只能拿到1440個點,也就是一天的分鐘數
  • PeriodOthers: 資料的最小時間取樣單位,最小為 60 秒
  • PeriodBilling: Billing 資料的最小時間取樣單位
  • Statistics: 取樣的資料類型有 SampleCount, Average, Sum, Minimum, Maximum,不過這邊我偷懶,因為我不想要去設定每一個 Namespace 的 Statistics,所以我的Code寫成全部的 Namesapce 都使用同樣的 Statistics
  • region: 填寫你的 CloudWatch 所在地 region
  • carbonNameSpacePrefix: 看你希望在Graphite內顯示什麼Prefix就填什麼
  • numberOfOverlappingPoints: 因為 CloudWatch的資料一分鐘才取樣一次,所以可能你在第1秒和第30秒取到的數字並不一樣,因為可能陸陸續續還會有其他的資料被送進去 CloudWatch,所以這邊可以設定一下有幾個點的資料要先被忽略不計
  • Namespace: 當然就是把你想要備份的Namespace都填進來,程式會自動把裡面所有的Metric都抓回來

執行!!

$ node cw2graphite.js | nc #{HostName} 2003

執行完後應該就可以在 Graphite 看到從 CloudWatch 倒進去的資料了,也可以只執行 “node cw2graphite.js" 在 Stdout 先看取樣出來的資料對不對, 再倒進去 Graphite

跟原作者最大的不同之處在於,原作者的 Configuraiton 需要去設定每一個單一的 Metric,但是我的 Project 有超級多的 Metric,假如要我一個一個填的話,我可能還沒有填完就被資遣了XD

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s