Help us understand the problem. What is going on with this article?

割合で出力したDynamoDBのキャパシティユニット消費量を監視スクリプトっぽく関数化した

More than 1 year has passed since last update.

DynamoDBのCapacityUnitsの実際の使用量を割合で出力する

この記事の続き備忘録です。割合で出力したはいいものの、特にその後有効利用していなかったので、ちょっとした処理を加えて監視アプリっぽくしてみました。

ゴール

  1. 閾値を設定できる様にする
  2. 閾値をある一定回数連続でオーバーしたら処理を行える様にする

閾値を設定できる様にする

以下のソースを元に編集していきます。

https://github.com/kojiisd/aws-dynamodb-consumed-metrics-operator/tree/v1.0

閾値は環境変数で設定

閾値は環境変数で設定してLambda関数毎に変更が容易にします。

serverless.ymlをこんな感じで更新します。

serverless.yml
functions:
  run:
    handler: handler.run
    environment:
      THRESHOLD_VALUE: 0.5
      THRESHOLD_TIME: 5

デフォルトでは5回連続で0.5(50%)の閾値を超えた場合に処理を行う様に設定しておきます。これでいつでも閾値利用することができる様になりました。

閾値をある一定回数連続でオーバーしたら処理を行える様にする

もともと取得したメトリクスから、Datapointsを整列して出していただけのoutput_metricsとは別に、連続して閾値を超えたかどうかの判定を行うメソッドを作成します。

処理はoutput_metricsと途中まで一緒ですが、ただ結果を出力しているところで閾値を連続で超えたかどうか判定しています。

def is_over_time(target_metric, provisioned_cap):
    is_over_time_num = 0
    result = False
    sort_datapoints = sorted(target_metric['Datapoints'], key=lambda x: x['Timestamp'])   
    for data in sort_datapoints:
        if float(round(data['Average']) / provisioned_cap) > float(LIMIT_VAL):
            is_over_time_num += 1
        else:
            is_over_time_num = 0

    if is_over_time_num >= int(LIMIT_NUM):
        result = True

    return result

これで閾値を超えた回数が設定した回数(デフォルト5回)をに達したらエラーとして判定できるようになりました。

問題ない場合はこんな感じでFalseを返してくれます。

ProvisionedReadCapacityUnits: 3
ConsumedReadCapacityUnits result:
2018-04-17 11:35:00+00:00       0.5     0.17
2018-04-17 11:40:00+00:00       1.11    0.37
2018-04-17 11:45:00+00:00       2.0     0.67
2018-04-17 11:50:00+00:00       1.97    0.66
over: False
ProvisionedWriteCapacityUnits: 3
ConsumedWriteCapacityUnits result:
2018-04-17 11:35:00+00:00       1.0     0.33
2018-04-17 11:40:00+00:00       1.0     0.33
2018-04-17 11:45:00+00:00       1.0     0.33
2018-04-17 11:50:00+00:00       1.0     0.33
over: False

問題がある場合はoverがTrueとなって表示されます。しばらくデータの読み書きを行なっていたところ、読み込みが設定回数をオーバーしたため、読み込み側だけoverがTrueになりました。

ProvisionedReadCapacityUnits: 3
ConsumedReadCapacityUnits result:
2018-04-17 11:35:00+00:00       0.5     0.17
2018-04-17 11:40:00+00:00       1.11    0.37
2018-04-17 11:45:00+00:00       2.0     0.67
2018-04-17 11:50:00+00:00       1.94    0.65
2018-04-17 11:55:00+00:00       1.98    0.66
2018-04-17 12:00:00+00:00       1.95    0.65
2018-04-17 12:05:00+00:00       1.98    0.66
2018-04-17 12:10:00+00:00       1.96    0.65
over: True
ProvisionedWriteCapacityUnits: 3
ConsumedWriteCapacityUnits result:
2018-04-17 11:35:00+00:00       1.0     0.33
2018-04-17 11:40:00+00:00       1.0     0.33
2018-04-17 11:45:00+00:00       1.0     0.33
2018-04-17 11:50:00+00:00       1.0     0.33
2018-04-17 11:55:00+00:00       1.0     0.33
2018-04-17 12:00:00+00:00       1.0     0.33
2018-04-17 12:05:00+00:00       1.0     0.33
2018-04-17 12:10:00+00:00       1.0     0.33
over: False

ここまでの成果物

https://github.com/kojiisd/aws-dynamodb-consumed-metrics-operator/tree/v1.1

まとめ

誰か使った人がいたら、フィードバックもらえると助かります。(まだ作っただけ)

kojiisd
Acroquest Technology株式会社 SpringCloud/AWS/Angular/Microservices/kintone JAWS-UG 横浜 ミャンマー支社CTO
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away