Amazon Kinesis Streamの監視方法

  • 0
    いいね
  • 0
    コメント

    Kinesis Streamのシャードには以下のような制限がある。

    • 書き込み 1シャード 最大1秒あたり1,000レコードまたは1MBまで
    • 読み込み 1シャード 最大1秒あたり5回の読み込みまたは2MBまで

    シャードへの流入・流出量を上記の値を超えないように・または超えたことを検知できるように
    監視していかないといけない。

    そのため、CloudWatchでのKinesisの監視項目をまとめる。

    どのメトリクスを見るべきか

    CloudWatchでどういうメトリクスが見れるかは公式ドキュメントに記載がある。
    http://docs.aws.amazon.com/ja_jp/streams/latest/dev/monitoring-with-cloudwatch.html

    その中でも以下の項目を見ると、シャードを増やすしきい値が見えてきそう。

    WriteProvisionedThroughputExceeded

    シャードの書き込み上限の超過が発生しているか否かを判定するのなら、この項目を見ればよい。
    これは指定された期間中にストリームの上限超過が発生した件数が出力される。

    これが定常的に1以上になった場合は、シャードを増やしたほうが良さそう。

    AWS CLIでの取得方法

    profile=hoge
    stream_name=hoge
    
    aws --profile ${profile} cloudwatch get-metric-statistics \
    --namespace AWS/Kinesis \
    --metric-name WriteProvisionedThroughputExceeded \
    --start-time 2017-06-20T12:00:00 \
    --end-time 2017-06-20T13:00:00 \
    --period 60 \
    --statistics Maximum \
    --dimensions Name=StreamName,Value=${stream_name}
    

    ReadProvisionedThroughputExceeded

    これは上記に記載した「WriteProvisionedThroughputExceeded」の読み込み版。
    こちらも合わせて見たい。

    PutRecords.Bytes / PutRecords.Records

    これは指定期間内にストリームに送信されたバイト/レコード数を確認することが出来る項目。
    周期の最小単位が1分となっているため、指標として使うならこの値を使って1秒あたりの数値に計算しなおすとわかりやすい。

    この項目を見ることにより、シャードの上限の超過の発生前に事前にシャードを増やすことができる。

    PutRecordというのもあるが、KPLを使用している場合はPutRecordsを使う。

    AWS CLIでの取得方法

    profile=hoge
    stream_name=hoge
    
    aws --profile ${profile} cloudwatch get-metric-statistics \
    --namespace AWS/Kinesis \
    --metric-name PutRecords.Bytes \
    --start-time 2017-06-22T12:00:00 \
    --end-time 2017-06-22T12:05:00 \
    --period 60 \
    --statistics Sum \
    --dimensions Name=StreamName,Value=${stream_name} | jq .
    
    response
    {
      "Datapoints": [
        {
          "Unit": "Bytes",
          "Timestamp": "2017-06-22T12:02:00Z",
          "Sum": 4777677
        },
        {
          "Unit": "Bytes",
          "Timestamp": "2017-06-22T12:01:00Z",
          "Sum": 4241130
        },
        {
          "Unit": "Bytes",
          "Timestamp": "2017-06-22T12:00:00Z",
          "Sum": 5064734
        },
        {
          "Unit": "Bytes",
          "Timestamp": "2017-06-22T12:04:00Z",
          "Sum": 4647186
        },
        {
          "Unit": "Bytes",
          "Timestamp": "2017-06-22T12:03:00Z",
          "Sum": 4581718
        }
      ],
      "Label": "PutRecords.Bytes"
    }
    
    # 1分周期で取っているので、60(秒)で割って、1秒あたりのByteを計算
    profile=hoge
    stream_name=hoge
    
    aws --profile ${profile} cloudwatch get-metric-statistics \
    --namespace AWS/Kinesis \
    --metric-name PutRecords.Bytes \
    --start-time 2017-06-22T12:00:00 \
    --end-time 2017-06-22T12:05:00 \
    --period 60 \
    --statistics Sum \
    --dimensions Name=StreamName,Value=${stream_name} | jq -r '.Datapoints[].Sum' | xargs -i expr {} / 60
    
    response
    79627
    70685
    84412
    77453
    76361
    

    GetRecords.Bytes / GetRecords.Records

    上記の「PutRecords.Bytes / PutRecords.Records」の読み込み版。
    こちらも合わせて見たい。