Python: CloudWatch のメトリクスデータを全て出力するスクリプト
概要
1. 特定リージョンの AWS CloudWatch からメトリクスの一覧を取得し、
2. その全てのメトリクスに対して、ある期間を一定の単位時間で「平均」「合計」の統計値を取得し、
3. その結果(メトリクス、数値、タイムスタンプ)を Graphite に投入可能な形式で出力する
そんな Python スクリプトを作成。
モチベーション
やりたいことは、CloudWatch のデータを Grafana で見たいだけ。
はじめは Fluentd + fluent-plugin-cloudwatch + fluent-plugin-graphite を使って流し込んでいたのだが、
- メトリクスと統計方法(Average, Sum, Maximum)を1個1個指定しなければいけなかったり (将来にわたってメンテが必要)
- ちらほらデータの欠落が見られたり
- バッファリングの関係か、データが更新されるタイミングを制御しづらかったり
- 特定期間だけリトライしたい場合に難しかったり
といったことがあったので、1時間おきのバッチ処理で一括インポートをすることにした。
とはいえ悩みどころなのが統計方法。
CloudWatch では各サービス・各メトリクスごとに推奨の(意味のある)統計方法が異なっている。
CloudWatch では各サービス・各メトリクスごとに推奨の(意味のある)統計方法が異なっている。
しかし今回は割り切って、全メトリクスについて 平均(Average)、合計(Sum) を取得することにした。
物によっては Maximum を得たい場合もあるが、一旦は目を瞑る。
今後の課題
- CloudWatch の APIリクエストも決して無制限で使えるわけではないので、極力無駄なリクエストは減らしたい。
(現時点では100万件/月まで無料, それ以降は1,000件ごとに0.01USDの課金)
CPU使用率の Sum など、結局個別に指定する他ないのか。 - 個別のメトリクス統計方法の指定 (DynamoDB の ItemCount の Maximum など) をできるようにするか
- 並列化をして高速に
- ユニットテストを充実させる
導入方法、注意事項についてはリポジトリの README参照。
0 件のコメント:
コメントを投稿