0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

blackbirdAdvent Calendar 2014

Day 11

[blackbird-kinesis-stream] Monitoring AWS KinesisStream

Last updated at Posted at 2014-12-10

このプラグインでは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の生の値のグラフ

スクリーンショット_2014-12-11_2_06_20.png

結構ぎざぎざです。これを単純な前回との比較だけの差分で監視するとかなりアラートが飛びます。

GetRecords.Bytesの平均差分グラフ

スクリーンショット_2014-12-11_2_07_15.png

こっちがならしたグラフなんですが、だいぶ落ち着いた感じに見えると思います。実際に少し長い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に追加したいと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?