LoginSignup
1
0

More than 5 years have passed since last update.

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

Posted at

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

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

ゴール

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

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

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

閾値は環境変数で設定

閾値は環境変数で設定して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

ここまでの成果物

まとめ

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

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