Amazon RDS for PostgreSQLのキャッシュヒット率, セッション数等をCloudWatchで監視するスクリプトを作ってみた

前回はEC2のLinuxインスタンスのCPU, メモリ, ディスク, ロードアベレージ等を監視するスクリプトを作った話でした。
今回はEC2以外の監視ということで、Amazon RDS for PostgreSQLのキャッシュヒット率, セッション数, トランザクション数等をCloudWatchのカスタムメトリクスで監視するスクリプト、aws-mon-pgsqlを作ってみました。

こちらもGitHubで公開しました。バグ報告、Pull Request、大歓迎です。

以下で詳細について説明していきます。


どんな環境で使えるの?

Amazon RDS for PostgreSQLのPostgreSQL 9.3.3でテスト済みです。

なお、本スクリプトはAmazon RDS for PostgreSQLを監視するために作ったものですが、スクリプトを実行するノードとしてAmazon EC2のLinuxインスタンスが必要となります。
こちらについては、下記のOSでテスト済みです。

  • Amazon Linux 2014.3
  • Red Hat Enterprise Linux 6.4
  • Ubuntu Server 13.10

Amazon CloudWatch Command Line Toolのインストールが必要です。
(Amazon Linuxではデフォルトでインストールされています。)


何ができるの?

まず、CloudWatchの標準メトリクスでRDS for PostgreSQLについて監視できるのは下記の項目です。

  • BinLogDiskUsage(B) : バイナリログが占有するディスク領域量
  • CPUUtilization(%) : CPU使用率
  • DatabaseConnections(Count) : 使用中のコネクション数
  • DiskQueueDepth(Count) : 未処理のディスク I/O アクセス
  • FreeableMemory(B) : 使用可能メモリ量
  • FreeStorageSpace(B) : 使用可能ストレージ領域量
  • ReplicaLag(Seconds) : リードレプリカまでのタイムラグ
  • SwapUsage(B) : スワップ領域量
  • ReadIOPS(Count/s) : ディスク I/O(読み取り) 回数
  • WriteIOPS(Count/s) : ディスク I/O(書き込み) 回数
  • ReadLatency(Seconds) : ディスク I/O(読み取り) 時間
  • WriteLatency(Seconds) : ディスク I/O(書き込み) 時間
  • ReadThroughput(B/s) : 読み取りバイト数
  • WriteThroughput(B/s) : 書き込みバイト数

参考:Amazon RDS Dimensions and Metrics

このスクリプトを使うと、CloudWatchの標準メトリクスで監視できる上記の項目に加え、下記の項目を監視できます。

  • status(Count) : ステータス (EC2から利用できるかどうか)
  • cache hit(Percent) : キャッシュヒット率
  • session(Count) : セッション数 (Active/Idle/Wait)
  • transaction(Count) : トランザクション数 (Commit/Rollback)
  • lock(Count) : ロック数(Acquired/Wait)
  • tupple read(Count/s) : タプル読み取り (Return/Fetch)
  • tupple write(Count/s) : タプル書き込み (Insert/Update/Delete)
  • block read(Count/s) : ブロック読み取り (Read/Hit)
  • buffer write(Count/s) : バッファ書き込み (Checkpoint/Clean/Backend)

どうやって使うの?

単なるシェルスクリプトなので、オプションつけて叩くだけです。

ステータスを監視する(データは送信せずにテストする)

./aws-mon-pgsql.sh --id postgres -h postgres.xxx.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres --status-check-failed --verify --verbose

セッション数 (Active/Idle/Wait)を監視する

./aws-mon.sh --mem-util --mem-used --mem-avail

キャッシュヒット率を監視する

./aws-mon-pgsql.sh --id postgres -h postgres.xxx.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres --cache-hit --verbose

タプル読み取り/書き込み数(Return/Fetch/Insert/Update/Delete)を監視する

./aws-mon-pgsql.sh --id postgres -h postgres.xxx.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres --tup-inserted --tup-updated --tup-deleted --tup-returned --tup-fetched --verbose
(wait a few seconds...)
./aws-mon-pgsql.sh --id postgres -h postgres.xxx.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres --tup-inserted --tup-updated --tup-deleted --tup-returned --tup-fetched --verbose

詳細な使い方、オプション等の仕様はGitHubに書いておきました。


マネジメントコンソールでどういうふうに見えるの?

監視結果をマネジメントコンソールから確認します。
CloudWatchのマネジメントコンソールを開き、左側メニューのCustum Metrics…プルダウンからaws-mon-pgsqlを選択すると、aws-mon-pgsqlで取得した項目が一覧表示されます。

こんな感じです。
aws-mon-pgsql-management-console


おわりに

CloudWatchのカスタムメトリクスでEC2以外を監視する例があんまり見当たらなかったので、とりあえず勢いで作って公開してみました。
CloudWatchシリーズは今回で一段落とします。次は何しようかな。

参考:
Hinemos PostgreSQL性能監視オプション – Uptime Technologies
PostgreSQL monitoring template for Zabbix (pg_monz)

広告
  1. 2014年 12月 15日

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。