都合により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%という状況となっている。