CloudWatchとRDSを組み合わせてRDSのディスク使用率(パーセント)を調べる
こんにちは。
SDKやCommand Line Toolsを使ってCloudWatchからRDSの情報を取得して、リソース監視する事は良くあると思います。
監視サーバと組み合わせて使用する方も多いと思いますが、そんな時にRDSのディスクリソース監視は少し工夫をしても良さそうです。
というのも、CloudWatchで取得できるRDSのStorage情報はFreeStorageSpace(Byte)だからです。
以下の2つの状況はどちらもFreeStorageSpaceが10GBですが、緊急度は違ってくると思います。
RDSに割り当てたディスクサイズ | FreeStorageSpace(残り空き容量) |
---|---|
500GB | 10GB |
20GB | 10GB |
個人的にディスク容量の監視は何パーセント使用中という形式が見やすいので、そんな形式で出力するスクリプトを作ってみました。
ザッと作ったのできちんと最適化しないとですが、忘れないように一旦こちらに残しておきます。
スクリプト
こんな感じです、スクリプトの引数にアクセスキーID、シークレットキー、各種リージョン、DB Instance Identifierを指定します。
#!/bin/env ruby # -*- coding: utf-8 -*- require 'aws-sdk' require 'time' access_key = "#{ARGV[0]}" secret_key = "#{ARGV[1]}" cw_region = "#{ARGV[2]}" rds_region = "#{ARGV[3]}" db_instance_identifier = "#{ARGV[4]}" start_time = Time.now - 300 end_time = Time.now ## CloudWatchへの認証を行います cw = AWS::CloudWatch.new( :access_key_id => access_key, :secret_access_key => secret_key, :cloud_watch_endpoint => cw_region ).client ## RDSへの認証を行います rds = AWS::RDS.new( :access_key_id => access_key, :secret_access_key => secret_key, :rds_endpoint => rds_region ).client ## メトリクスのオプションを指定してFreeStorageSpaceを取得します free_storage_space = cw.get_metric_statistics( :namespace => 'AWS/RDS', :metric_name => 'FreeStorageSpace', :statistics => ['Minimum'], :dimensions => [ { :name => "DBInstanceIdentifier", :value => db_instance_identifier } ], :period => 60, :start_time => start_time.iso8601, :end_time => end_time.iso8601, )[:datapoints][0][:minimum] ## 対象のRDSインスタンスに割り当てられているディスクサイズ(バイト)を取得します storage_space = rds.describe_db_instances( :db_instance_identifier => db_instance_identifier )[:db_instances][0][:allocated_storage] * 1024 * 1024 * 1024 ## 計算します value = free_storage_space.to_f / storage_space.to_f * 100 puts 100 - value.truncate
まとめ
書き終わって気づきましたが、FreeableMemoryとかも同じようにしてあげると良い感じです。
このデータを監視サーバに入れてあげれば、閾値の設定とかもやりやすくなりそうです。
CloudWatchのデータはそのまま使うのも良いけど、ちょっと加工して使うと見やすくなったりさらに有益なデータになったりするのかも。