What's?
Amazon CloudWatch Metricsから統計情報を取得した結果を、CSVに変換したいなというメモです。
環境
今回の環境は、こちらです。
$ aws --version
aws-cli/2.7.21 Python/3.9.11 Linux/5.4.0-122-generic exe/x86_64.ubuntu.20 prompt/off
AWSのクレデンシャルは、環境変数で設定しているものとします。
$ export AWS_ACCESS_KEY_ID=.....
$ export AWS_SECRET_ACCESS_KEY=.....
$ export AWS_DEFAULT_REGION=.....
お題
Amazon RDSのCPUUtilization
を対象にしましょう。
こちらをAWS CLIで取得し、jqでCSV形式に変換します。この時に時刻(Timestamp
)でソートもします。
なお、メトリクスをAWS CLIで取得する方法は、このあたりを参考に。
使用するコマンドは、aws cloudwatch get-metric-statistics
ですね。
メトリクスを取得するAmazon RDSインスタンスは、以下のように変数で定義しているものとします。
$ RDS_INSTANCE_IDENTIFIER=.....
メトリクスを取得する
まずは、メトリクスを取得しましょう。
使用するAWS CLIのコマンドはaws cloudwatch get-metric-statistics
です。
取得で使う名前空間とメトリクス名はこちら。
-
namespace
…AWS/RDS
-
metric-name
…CPUUtilization
statistics
はAverage
とし、取得期間は2022-08-04T08:00:00Z
〜2022-08-04T08:10:00Z
(UTC)、period
は60
とします。
こういうコマンドになりますね。
$ aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name CPUUtilization \
--dimensions Name=DBInstanceIdentifier,Value=$RDS_INSTANCE_IDENTIFIER \
--statistics Average \
--start-time 2022-08-04T08:00:00Z \
--end-time 2022-08-04T08:10:00Z \
--period 60
手元の環境での結果。
{
"Label": "CPUUtilization",
"Datapoints": [
{
"Timestamp": "2022-08-04T08:02:00+00:00",
"Average": 10.433681122704089,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:06:00+00:00",
"Average": 10.20017000283338,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:08:00+00:00",
"Average": 9.858004733175562,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:03:00+00:00",
"Average": 10.04149930834486,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:07:00+00:00",
"Average": 10.533333333333333,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:09:00+00:00",
"Average": 9.600320010667023,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:00:00+00:00",
"Average": 10.683155280745321,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:04:00+00:00",
"Average": 9.566666666666665,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:01:00+00:00",
"Average": 10.26649555840736,
"Unit": "Percent"
},
{
"Timestamp": "2022-08-04T08:05:00+00:00",
"Average": 10.39149347510875,
"Unit": "Percent"
}
]
}
CSVに変換する
では、この結果をCSVに変換しましょう。jqの@csv
フォーマットを使用します。
The input must be an array, and it is rendered as CSV with double quotes for strings, and quotes escaped by repetition.
jq Manual / Builtin operators and functions / Format strings and escaping
また、ソートはsort_by
を使用します。
jq Manual / Builtin operators and functions / sort, sort_by(path_expression)
こんな感じになります。
$ aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name CPUUtilization \
--dimensions Name=DBInstanceIdentifier,Value=$RDS_INSTANCE_IDENTIFIER \
--statistics Average \
--start-time 2022-08-04T08:00:00Z \
--end-time 2022-08-04T08:10:00Z \
--period 60 \
| jq -r '.Datapoints | sort_by(.Timestamp) | .[] | [.Timestamp, .Average, .Unit] | @csv'
結果。
"2022-08-04T08:00:00+00:00",10.683155280745321,"Percent"
"2022-08-04T08:01:00+00:00",10.26649555840736,"Percent"
"2022-08-04T08:02:00+00:00",10.433681122704089,"Percent"
"2022-08-04T08:03:00+00:00",10.04149930834486,"Percent"
"2022-08-04T08:04:00+00:00",9.566666666666665,"Percent"
"2022-08-04T08:05:00+00:00",10.39149347510875,"Percent"
"2022-08-04T08:06:00+00:00",10.20017000283338,"Percent"
"2022-08-04T08:07:00+00:00",10.533333333333333,"Percent"
"2022-08-04T08:08:00+00:00",9.858004733175562,"Percent"
"2022-08-04T08:09:00+00:00",9.600320010667023,"Percent"
ヘッダー行を付けたくなるかもしれません。その場合はこちら。
$ aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name CPUUtilization \
--dimensions Name=DBInstanceIdentifier,Value=$RDS_INSTANCE_IDENTIFIER \
--statistics Average \
--start-time 2022-08-04T08:00:00Z \
--end-time 2022-08-04T08:10:00Z \
--period 60 \
| jq -r '["Timestamp", "Average", "Unit"], (.Datapoints | sort_by(.Timestamp) | .[] | [.Timestamp, .Average, .Unit]) | @csv'
結果。
"Timestamp","Average","Unit"
"2022-08-04T08:00:00+00:00",10.683155280745321,"Percent"
"2022-08-04T08:01:00+00:00",10.26649555840736,"Percent"
"2022-08-04T08:02:00+00:00",10.433681122704089,"Percent"
"2022-08-04T08:03:00+00:00",10.04149930834486,"Percent"
"2022-08-04T08:04:00+00:00",9.566666666666665,"Percent"
"2022-08-04T08:05:00+00:00",10.39149347510875,"Percent"
"2022-08-04T08:06:00+00:00",10.20017000283338,"Percent"
"2022-08-04T08:07:00+00:00",10.533333333333333,"Percent"
"2022-08-04T08:08:00+00:00",9.858004733175562,"Percent"
"2022-08-04T08:09:00+00:00",9.600320010667023,"Percent"
こんな感じでしょうか。
Timestamp
はUTCなので、日本時間に変更するなどしたかったら、さらにこれを加工する感じですね。