こんばんわ!
まさかのベトナムからの投稿と相成りました、さげはしです。
こちらは今日は30度に迫ろうかという気温(と高い湿気)でアツアツです!
今回は弊社でも利用しているMackerelを使った監視のお話をば。
Mackerelでは、RDSの情報を取得するためのプラグインが提供されていますが、それを使うとサーバメトリクスとして実行しているサーバに紐付いて情報が表示されます。
それになんかすごく違和感を感じたので、サービスメトリクスとしてAWSのAPIを叩いてデータを取得するスクリプトをとりあえず作りました。
個人的に工夫した点は以下のとおり:
- CloudwatchのAPIも使って、残りだけじゃなくてディスクサイズも見れるように
- やっぱパーセントでも見たいなーと思って、パーセントのデータも送信
- RDS複数あったら面倒なので引数でRDSのidentity?を指定
- 無料枠で引っかかるの嫌なのでデータ容量関連だけ送る
位です。コレをいじれば全部のデータもMackerelで見れるようになります。
※エラーハンドリングとかなかったり、内容が拙いのはご愛嬌ということで…。
#!/usr/bin/env ruby # file:get_rds_data.rb require 'aws-sdk' require 'mackerel/client' ACCESS_KEY = '' # AWS ACCESS KEY SECRET_KEY = '' # AWS SECRET KEY RDS_REGION = '' # RDS Region(ex:ap-northeast-1) MACKEREL_KEY = '' # Mackerel API KEY base_url = "https://mackerel.io/api/v0/services/" rds_name = ARVG[0] service_name = "RDS" end_time = Time.now start_time = end_time - 300 # RDS rds = Aws::RDS::Client.new( region: RDS_REGION, access_key_id: ACCESS_KEY, secret_access_key: SECRET_KEY ) resp = rds.describe_db_instances( db_instance_identifier: rds_name ) total = resp[:db_instances][0][:allocated_storage] * 1024 * 1024 * 1024 # CloudWatch cw = Aws::CloudWatch::Client.new( region: RDS_REGION, access_key_id: ACCESS_KEY, secret_access_key: SECRET_KEY ) free = cw.get_metric_statistics( namespace: 'AWS/RDS', metric_name: 'FreeStorageSpace', statistics: ['Minimum'], dimensions: [ { name: "DBInstanceIdentifier", value: rds_name } ], period: 60, start_time: start_time, end_time: end_time )[:datapoints][0][:minimum].to_i used = total - free free_p = sprintf("%.4f", free/total.to_f).to_f*100 used_p = sprintf("%.2f", 100-free_p.to_f) # Create metrics data metrics = [ {'name' => "#{rds_name}.Disk.Used", 'time' => end_time.to_i, 'value' => used }, {'name' => "#{rds_name}.Disk.Free", 'time' => end_time.to_i, 'value' => free }, {'name' => "#{rds_name}.DiskPercent.Used", 'time' =>end_time.to_i, 'value' => used_p.to_f }, {'name' => "#{rds_name}.DiskPercent.Free", 'time' =>end_time.to_i, 'value' => free_p.to_f } ] # send to Mackerel @mackerel = Mackerel::Client.new(:mackerel_api_key => MACKEREL_KEY) ret = @mackerel.post_service_metrics(service_name, metrics)
というファイルを適当に置いて、
[plugin.metrics.rds] command = "/path/to/ruby /path/to/get_rds_data.rb <RDS_NAME>"
と設定ファイルに書けば、サービスメトリクスとして管理画面から見れるようになります。
※本文はhttp://qiita.com/sagehash/items/68fa4877a5037811e25cからの転載です。