LoginSignup
0
0

More than 3 years have passed since last update.

cloud monitoring によるGCLB p99 latency json出力と処理

Posted at

都合によりGoogle Cloud Load Balancing(GCLB)によるp99 latencyをjsonとして出力した上でパーセンテージとして出力する必要があったのでこちらにその方法を記録する。

必要となるAPIリクエストはGCPのページで公開されているテスト機能を使うのが手っ取り早い。

curl \
  'https://monitoring.googleapis.com/v3/projects/PRJECT-NAME/timeSeries?aggregation.alignmentPeriod=60s&aggregation.crossSeriesReducer=REDUCE_PERCENTILE_99&aggregation.groupByFields=metric.labels.REDUCE_PERCENTILE_95&aggregation.perSeriesAligner=ALIGN_PERCENTILE_95&filter=project%3D%22PROJECT-NAME%22%20AND%20resource.labels.url_map_name%3D%22k8s-XXXXXXXXXXXXXXXXXAND%20metric.type%20%3D%20%22loadbalancing.googleapis.com%2Fhttps%2Fbackend_latencies%22&interval.endTime=2020-05-17T03%3A20%3A20.426432489Z&interval.startTime=2020-05-10T03%3A20%3A20.426432489Z&key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

リクエスト結果はこのようなjsonとして出力される。

{
  "timeSeries": [
    {
      "metric": {
        "type": "loadbalancing.googleapis.com/https/backend_latencies"
      },
      "resource": {
        "type": "https_lb_rule",
        "labels": {
          "project_id": "PROJECT-NAME"
        }
      },
      "metricKind": "GAUGE",
      "valueType": "DOUBLE",
      "points": [
        {
          "interval": {
            "startTime": "2020-05-17T03:22:20.426432Z",
            "endTime": "2020-05-17T03:22:20.426432Z"
          },
          "value": {
            "doubleValue": 432.28348532753915
          }
        },
        {
          "interval": {
            "startTime": "2020-05-17T03:21:20.426432Z",
            "endTime": "2020-05-17T03:21:20.426432Z"
          },
          "value": {
            "doubleValue": 596.89633564125677
          }
        }
      ]
    }
  ]
}

responseをファイルに出力した場合、jqコマンドを使うことによりp99latencyのみ出力することができる。

$ cat response.json | jq  '.timeSeries[].points[].value.doubleValue'
432.28348532753915
596.8963356412568

この場合、doubleValueのkeyにp99が出力されているのでそちらを取得している。

次に、例として7日間のp99データを取得した上で、そのlatencyがどの程度1000msのしきい値以内に収まっているかを出力する。

$ cat response_7day.json | jq '.timeSeries[].points[].value.doubleValue' | wc -l
   10034
$ cat response_7day.json | jq '.timeSeries[].points[].value.doubleValue' | awk '{ if($1>1000)  fp++; else low++ }END{print " violation: " fp " / within norm: " low}'
 vaiolation: 47 / within norm: 9987

この例では10034件中47件が1000msのしきい値を超過している。逆に言うと、9987件はしきい値内に収まっており、これは9987/10034、つまり現状で99.53%という状況となっている。

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