[blackbird-rds] Monitoring AWS RDS

blackbird RDS plugin
--------------------

ソースコードは[こちら](https://github.com/Vagrants/blackbird-rds)

このプラグインはCloudWatchからRDSのMetricをいい感じに取得します。正直[MySQL プラグイン](http://qiita.com/makocchi/items/bf02443ab0e73f5f8ff3)とかぶってる感は否めないんですが、それをSummaryしたような内容が取得できます。

You Can Get Following Metrics
-----------------------------

では早速このプラグインで取得できるものから。

| CloudWatch Metric          | Statistics | Detail |
|----------------------------|------------|--------|
| BinLog Disk Usage          | Average    | binlogが使用しているディスク容量(bytes) |
| CPU Utilization            | Average    | CPU使用率(%) |
| Database Connections       | Average    | 現在のDBへのConnection数 |
| Disk Queue Depth           | Average    | Queueにたまっている(未処理の)I/O処理の数 |
| FreeStorageSpace           | Average    | ディスクの空き容量(bytes) |
| Feeable Memory             | Average    | 使用可能なメモリ容量(bytes) //InnodbBufferPoolで結構使うので、少ないからといって問題でもない |
| NetworkReceiveThroughput   | Average    | RDSなserverのInboundなnetwork traffic |
| NetworkTransmitThroughput  | Average    | RDSなserverのOutgoingなnetwork traffic |
| ReplicaLag                 | Average    | Slaveのレプリ遅延、いわゆるseconds behind master(seconds) |
| SwapUsage                  | Average    | メモリからあふれちゃってSwapしている量(bytes) |
| ReadIOPS                   | Average    | ReadのIOPS(Provisionedしてるとぴったりその数値で止まります) |
| WriteIOPS                  | Average    | WriteのIOPS(Provisionedしてるとぴったりその数値で止まります) |
| ReadLatency                | Average    | ReadのLatency(単位はms) |
| WriteLatency               | Average    | WriteのLatency(単位はms) |
| ReadThroughput             | Average    | ReadのThroughput、秒間何byte読み込んだか |
| WriteThroughput            | Average    | WriteのThroughput、秒間何bytes書き込んだか |

書いてて思いましたが本当に`SHOW GLOBAL STATUS`とか`SHOW ENGINE INNODB STATUS`とかをSummaryした感じですね。ただQueryPerSecondとかInnodb Cache Hit Rate的なのが取得できないのが残念です(そこはMySQLプラグインですね)。


Zabbix Template
---------------

### Items

上記のMetricだけでは監視に厳しいものがあったので、計算アイテムとplugin側で頑張って以下の値も取れるようにしました。

| Item Name Outline           | Detail |
|-----------------------------|--------|
| Total Memory Size           | インスタンスタイプとMemoryのマッピングからTotal Memory Sizeを算出 |
| Used Memory Size            | `Total Memory Size - Freeable Memory`によって算出 |
| Percent of Memory Available | メモリの空き容量% |
| Total Disk Size             | インスタンスタイプとDisk容量のマッピングから算出 |
| Used Disk Size              | `Total Disk Size - Free Storage Space`によって算出 |
| Percent of Disk Available   | ディスクの空き容量% |

//正直、Amazonさん、インスタンスタイプとCPU、Memory、Diskのマッピングを取得できるAPIを用意して欲しかったです...

### Triggers

* CPU Utilizationが一定数を超えていないか
* Diskの使用率が一定数を超えていないか
* DiskがSwapInしているかどうか

今のところ、このみっつだけなんですが、正直Memoryの残量はInnodbBufferPoolのこと考えるとあんましアラートにする意味ないし、Slaveの遅延くらいですかね?ぜひみなさん、他にこんなTriggerが欲しいみたいなのあったら教えて欲しいです！

### Graphs

#### Disk Usage

![スクリーンショット_2014-12-05_23_26_25.png](https://qiita-image-store.s3.amazonaws.com/0/26256/608cff62-ecb9-3711-d10b-61f800868ea0.png)

#### Memory Usage

![スクリーンショット_2014-12-05_23_26_46.png](https://qiita-image-store.s3.amazonaws.com/0/26256/64e0a767-92fe-31e1-8a8f-1ccb57900cd9.png)

#### Database Connections

普通の棒グラフのため省略

#### NetworkTraffic

![スクリーンショット_2014-12-05_23_26_57.png](https://qiita-image-store.s3.amazonaws.com/0/26256/1f0d12b3-3fb8-2801-e06f-5346d98e1004.png)

#### CPU Utilization

普通の棒グラフのためry

#### Disk I/O Latency

![スクリーンショット_2014-12-05_23_27_13.png](https://qiita-image-store.s3.amazonaws.com/0/26256/86978424-eeb4-969f-79b3-ecea87a00862.png)

#### Disk I/O Queue Depth

普通の棒グラフのためry

#### Disk I/O Throughput

Disk I/O Queue Depthのグラフと酷似しているためry

#### IOPS

Disk I/O Queue Depthのグラフと酷似しているためry

#### Replica Lag (Seconds Behind Master)

普通の棒グラフのためry

ZabbixのTemplateとしてはこんな感じです。これをScreenにずらーっとならべるとどのRDSが忙しいか一目瞭然でござる(ちなみに僕はその方式で監視してます。)。

How to Install
--------------

### Case of `pip`

```bash
pip install blackbird-rds
```

以上です。

### Case of `yum`

blackbirdのRPM repositoryについては[こちら](http://qiita.com/JumpeiArashi/items/849281083b6c7888f25d#case-of-using-yum)参考にしてください。

```bash
yum install blackbird-rds --enablerepo=blackbird
```

### Configuration Your blackbird

```ini
# セクション名は内部的にはThread名に使わているので、なんでもおｋですがかぶらないほうが無難です
[ANYTHING_OK]
# 取得間隔、最小値は60秒で、1秒に設定しても60秒になります。
interval = 60

# AWSのregion
region_name = ap-northeast-1

# AWSのcredentialです
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACESS_KEY

# RDSのインスタンス作成時につけたDB名です
db_instance_identifier = YOUR_RDS_INSTANCE_NAME

# zabbix server上のHost名です。先に作るのをお忘れなく。
hostname = prod-dbidm01
module = rds

# この値はdefaultでは空です。ただ、CloudWatchのAPI Call回数を減らしてお金を節約したい的な用途があれば、以下のようにカンマ区切りで書いてください。そうすると指定したMetricに関しては取得しなくなります。
ignore_metrics = ReplicaLag,BinLogDiskUsage
```