LoginSignup
7
8

More than 5 years have passed since last update.

MackerelでRDSの情報をサービスメトリクスを使って取得する

Posted at

Mackerelでは、RDSの情報を取得するためのプラグインが提供されていますが、それを使うとサーバメトリクスとして実行しているサーバに紐付いて情報が表示されます。
それになんかすごく違和感を感じたので、サービスメトリクスとしてAWSのAPIを叩いてデータを取得するスクリプトを作りました。

個人的に工夫した点は以下のとおり:
* CloudwatchのAPIも使って、残りだけじゃなくてディスクサイズも見れるように
* やっぱパーセントでも見たいなーと思って、パーセントのデータも送信
* RDS複数あったら面倒なので引数でRDSのidentity?を指定
* 無料枠で引っかかるの嫌なのでデータ容量関連だけ送る
位です。コレをいじれば全部のデータもMackerelで見れるようになります。
※エラーハンドリングをしていないのはご愛嬌ということで…。

get_rds_data.rb
#!/usr/bin/env ruby

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)

というファイルを適当に置いて、

mackerel-agent.conf
[plugin.metrics.rds]
command = "/path/to/ruby /path/to/get_rds_data.rb <RDS_NAME>"

と設定ファイルに書けば、サービスメトリクスとして管理画面から見れるようになります。

公式プラグインもサービスメトリクスで送信できるといいな!

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8