[blackbird-elasticache] Monitoring AWS ElastiCache(redis)

[このプラグイン](https://github.com/Vagrants/blackbird-elasticache)はAWS ElastiCacheのMetricをCloudWatch APIを使って取得するプラグインです。
今のところ(今後memcachedについても実装予定です)、redisしか対応してない(ってか僕が所属しているプロジェクトがredisしか使ってないｗ)いませんが、
blackbird-elasticacheのご紹介です。

What metric does it get?
------------------------

まずは、取得できるMetricの一覧からです。
Statisticsは毎度の通り、AverageとかSumとかMaxとかMinとかどの計算方法で値を取得するかです。
ElastiCacheのCloudWatchはミドルウェア自身(ここで言うと、redisかmemcachedか)のMetricと
そのミドルウェアがインストールされているホスト側のMetricが存在します。

### Host Side Metrics(Called Host-level metrics by Amazon)

| Metric Name     | Statistics | Detail |
|-----------------|------------|--------|
| CPUUtilization  | Average    | CPU使用率です。KVSを使ってるとそんなに高くはならなさそうですね。 |
| SwapUsage       | Average    | Swapの使用率です。 |
| FreeableMemory  | Average    | ホスト側の利用可能なmemory容量です |
| NetworkBytesIn  | Average    | このホストのTraffic量(in) です。 |
| NetworkBytesOut | Average    | このホストのTraffic量(out) です。 |

#### about SwapUsage and FreeableMemory

フルマネージドとかいいながら、ElastiCacheに関しては結構redisを直に使っている印象があります。

FreeableMemoryとSwapUsageは特に気をつけたい項目なんですが、
フルマネージドという言葉に乗っかって、がんがんKeyを追加していると以外に多くのMemoryを消費していることがあります。
KVSなのでMemoryは極限まで使用していいかとは思うのですが、Swapしていると非常に危険です。

僕が経験した内容で恐縮なんですが、特定の時間だけやけにredisのresponseが遅いって問題があって、
結果としては書き込みすぎて、bgsaveするタイミングでswap inしてたせいでswapしている時間帯だけ
超遅くなってました。そこでSwapUsageを定期的に取得しておくってのは以外に大事かもと思います。

### Redis Metrics

| Metric Name | Statistics | Detail |
|-------|-----|------|
| CurrConnections | Average, Maximum | 現在のconnection数。max_connectionsにあたっていないか注意!! |
| Evictions | Average, Maximum | LRUの期限前にevictionされたvalueの数 |
| Reclaimed | Average, Maximum | すべてのLRUの期限切れと、memoryの上限数に達して削除されたvalueの合計 |
| NewConnections | Average, Maximum | 取得時間間隔内にacceptされたconnection数 |
| BytesUsedForCached | Maximum | redisによってallocateされたメモリ量 |
| CacheHits | Average, Maximum | cacheとしてhitした回数 |
| CacheMisses | Average, Maximum | cacheとしてmissした回数 |
| LepricationLag | Average, Maximum | read replicaの遅延してる秒(Only read reolica) |
| GetTypeCmds | Maximum | Get系クエリの合計数 |
| SetTypeCmds | Maximum | Set系クエリの合計数 |
| KeyBasedCmds | Maximum | - |
| StringBasedCmds | Maximum | - |
| HashBasedCmds | Maximum | - |
| ListBasedCmds | Maximum | - |
| SetBasedCmds | Maximum | - |
| SortedSetBasedCmds |  Maximum | - |


#### about Evictions and Reclaimed

Evictionsは`maxmemory`の上限にあたって、expireよりも先に削除されたKeyの数です。
対してReclaimedは削除されたValueの数の合計です。
なので、`Reclaimed - Evictions`の数が大きくなるとホスト側のmemoryが足りてないか、無駄なobjectがいっぱい入ってるかのどっちかです。


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

### Items

上記のCloudWatch APIで取得できる値のみです。(急ごしらえですみません。)

### Graphs

グラフは以下のものがあって、一部おもしろそうなグラフの描画だけキャプチャしてます。(通常の折れ線グラフや要素がひとつだけのものは省略でござる)

#### CPU Utilization

ホスト側のCPU使用率です。

#### Memory Usage

ホスト側のFreeable MemoryとRedis側のUsed Memoryを積み上げてます。
![スクリーンショット_2014-12-22_2_42_15.png](https://qiita-image-store.s3.amazonaws.com/0/26256/09ff420d-c9f6-a938-ed70-10d381489d39.png)

#### Network Traffic

ネットワークのInとOutです。
![スクリーンショット_2014-12-22_2_42_29.png](https://qiita-image-store.s3.amazonaws.com/0/26256/f025fd4b-137c-31bc-7190-ecfef09d3d00.png)

#### Cache Hits/Miss

CacheのHitsとMissesの積み上げグラフです。

#### Current Items

現在のアイテム(KeyとValueのセット)数です。

#### Evictions

Evictionsされたアイテムの数です。

#### Reclaimed

Reclaimedなアイテムの数です。

#### New Connections

単位時間あたりに張られたConnectionの数です。

#### CMDs

コマンドの一覧を積み上げグラフにしたものです。
![スクリーンショット_2014-12-22_2_42_49.png](https://qiita-image-store.s3.amazonaws.com/0/26256/d25a85be-d83b-240b-fb57-e03a2f29af0e.png)

まとめ
------

このプラグインはあくまでCloudWatchのMetricを取ってますが、ElastiCacheは素のredisや素のmemcachedなので、[blackbird-redis](http://qiita.com/makocchi/items/02d724df1a3668ce7f20)や[blackbird-memcached](http://qiita.com/makocchi/items/d178038588465ec8ba07)の方が直接いろんな値を見れていいかもしれません。どちらかというと、両方のプラグインを使っておいしいどこどりする方がいいかも(ってか僕がそれやりたいですね)。