このプラグインではKinesis StreamのCloudWatch Metricsを取得します。
What Metrics does this plugin get?
Metric NameカラムはMetricName.Statisticsで、メトリック名.どの取り方(SumとかAvgとか)です。Unitは単位(バイトとかmsとか)です。
Metric Name | Unit | Detail |
---|---|---|
PutRecord.Bytes | Bytes | Streamに入れたアイテムのバイト数 |
PutRecord.Latency | milliseconds | Streamに入れた時のLatency(PutRecord APIのresponse time) |
PutRecord.Success | Count | PutRecord APIの成功回数 |
GetRecords.Bytes | Bytes | Streamから取得されたバイト数 |
GetRecords.IteratorAgeMilliseconds | milliseconds | - |
GetRecords.Latency | milliseconds | Streamから取得した時のLatency(GetRecords APIのresponse time) |
GetRecords.Success | Count | GetRecords APIの成功回数 |
Zabbix Template
Items
上記のCloudWatch Metricsを秒間あたり(per second)で計算したアイテムです。
- PutRecord Bytes per Second
- PutRecord Success per Second
- GetRecords Bytes per Second
- GetRecords Success per Second
Triggers
//トリガーの作成はここだけの話超苦労しました。
Kinesis Streamの特性上(Queueと違って取り出してもDataがなくならない)、Stream全体のサイズはあまり意味がないので、PutRecordやGetRecordsの差分で前回よりあまりに少ない流量(あるいはあまりに多い)であればトリガーをあげるようにしてみたのですが、consumer側がGerRecordsで一気に取得する特性上、結構フラップします。そのため、最初導入時は正直、監視がなりまくってました(実験段階ではぼくのケータイだけに飛ばしてたのでなりまくってたw)。
そこで、単純な差分監視ではなく、(何回分の平均にするかの回数のところは例です)10回分(long spanでの)の平均値から3回分(short spanでの)の平均値を引いた差分が25%を超えたらアラートを投げるというふうに変更してみました。
これで、フラップする値を均してあげて、均した差分で見ることができます。Streamへの流量(あるいは取り出した流量)が極端に増えたり減ったりした時にのみ、あ、なんか起こったんだな
と認識できます。
もちろん、アプリケーションの特性によってはこのlong spanとshort spanの均す値を長くしたり短くしたりする必要があると思うのでspanと閾値はそれぞれMACROに起こしておきました。
- 上記のロジックによる平均差分監視
- PutRecord.Bytes
- PutRecord.Success
- GetRecords.Bytes
- GetRecords.Success
- PutRecord.Latency
- GetRecords.Latency
がトリガーになっています。それぞれinfo, average, highの閾値を指定できるので、chatやメールと通知integrationを変更してください。
Graphs
上記の平均差分監視は言葉だとわかりづらいんですが、グラフだととてもわかりやすいはずです。
GetRecords.Bytesの生の値のグラフ
結構ぎざぎざです。これを単純な前回との比較だけの差分で監視するとかなりアラートが飛びます。
GetRecords.Bytesの平均差分グラフ
こっちがならしたグラフなんですが、だいぶ落ち着いた感じに見えると思います。実際に少し長いspanで見てアプリケーションのピークタイムと照らし合わせると、こんな感じの流量になるんではないでしょうか。
そのほかのグラフとして
- Get/Put Latency
- GetRecordsとPutRecordのLatency(各APIのresponse time)
- Get/Put Success
- GetRecordsとPutRecordのSuccess数
- Write/Read per second
- 秒間の読み書きバイト
があります。
How to Install
いつものとこにRPMをうpしておいたので、こちらの手順よりrepoファイルを作成して、
yum install blackbird-kinesis-stream --enablerepo=blackbird
しちゃってくださいまし。
pipの方もすぐに更新しておくのでもう少々お待ちくださいませ><
っでShardごとの監視はねえの??
CloudWatch的にはShardごとにMetricを取得できるので、本当は実装したいところなんですが(Keyがどこによってるとかがわかる)、差分の流量だけでもよほどアプリケーションのロジックが間違っていない限りはなにかおこってるぞ
に気づくことは可能だと考えておりますです。
ただ、将来的にはShardごとの監視もやる予定はあるます。
最後に
先日PutRecords APIが実装されたのでPutのThrouputがとてもよくなったと思いますが、まだplugin側で未実装なのでなる早で取得してZabbix Templateに追加したいと思います。