##前提
redashでは対応しているデータソースに合わせてクエリを書く必要がある。
CloudWatchをデータソースとした場合、どのようにクエリを書けばよいのか分からなかったため、備忘録として記事を残しておく。
##結論
CloudWatchをデータソースとした場合のクエリを書くといっても、実態としてはCloudWatchのメトリクス取得APIを叩いているだけなので、そのAPIへのリクエストパラメータを書くのと同じ。
公式リファレンスからリクエストの例を一部抜粋して改変したものを次に示す。
リクエストの例
{
# どれだけの期間のデータを取得するか
"StartTime": 1518867432,
"EndTime": 1518868032,
# 取得したいメトリクス群の記述
# この例では、2つのEC2インスタンスのCPU使用率を取得している
"MetricDataQueries": [
# 1つ目のEC2インスタンスの指定
{
"Id": "m1",
"Label": "CPUUtilization m1",
"MetricStat": {
# どのAWSリソースのなんのメトリクスを取得するかの指定
"Metric": {
"Namespace": "AWS/EC2",
"MetricName": "CPUUtilization",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-1234567890abcdef0"
}
]
},
# どれくらいのスパンのどういった値を取得するかの指定
# この例では5分(300秒)ごとの平均を取得している
"Period": 300,
"Stat": "Average"
}
},
# 2つ目のEC2インスタンスの指定
{
"Id": "m2",
"Label": "CPUUtilization, m2",
"MetricStat": {
"Metric": {
"Namespace": "AWS/EC2",
"MetricName": "CPUUtilization",
"Dimensions": [
{
"Name": "InstancdId",
"Value": "i-111111111111111111"
}
]
},
"Period": 300,
"Stat": "Average"
}
}
]
}
一番外枠で取得したいメトリクスの期間を指定している。
これは"MetricDataQueries"に記述される全てのメトリクスに適用される。
"MetricDataQueries"には取得したいメトリクスをどんどん繋げて書いていく。
AWSリソースによっては多少"Dimensions"の書き方に違いが出てくるが、そのほかはほとんど同様な形式でリクエストが記述できる。
また、リクエストの書き方によっては、複数のメトリクスの値に四則演算を行い算出した「カスタムメトリクス」を取得することもできる。
そうしたリクエストの書き方も、次の公式リファレンスに記載されている。