本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CloudWatch Metrics Insights 中的查詢元件和語法
CloudWatch Metrics Insights 語法如下。
SELECT
FUNCTION
(metricName
) FROMnamespace
| SCHEMA(...) [ WHERElabelKey
OPERATORlabelValue
[AND ... ] ] [ GROUP BYlabelKey
[ , ... ] ] [ ORDER BYFUNCTION
() [ DESC | ASC ] ] [ LIMITnumber
]
Metrics Insights 查詢中可能的子句如下。所有關鍵字皆不區分大小寫,但識別符 (例如指標名稱、命名空間和維度) 會區分大小寫。
- SELECT
-
必要。指定用於彙總每個時間儲存貯體中觀察的函數 (由提供的期間決定)。並指定要查詢的指標名稱。
FUNCTION (函數) 的有效值是
AVG
、COUNT
、MAX
、MIN
和SUM
。AVG
會計算查詢相符之觀察值的平均值。COUNT
會傳回查詢相符之觀察值的計數。MAX
會傳回查詢相符之觀察值的最大值。MIN
會傳回查詢相符之觀察值的最小值。SUM
會計算查詢相符之觀察值的加總。
- FROM
-
必要。指定指標的來源。您可以指定包含要查詢之指標的指標命名空間,或 SCHEMA (結構描述) 資料表函數。指標命名空間的範例包括
"AWS/EC2"
、"AWS/Lambda"
,以及您為自訂指標建立的指標命名空間。其中包含 / 或任何其他非字母、數字或底線字元的指標命名空間,必須以雙引號括住。如需詳細資訊,請參閱什麼需要引號或跳脫字元?。
結構描述
可選資料表函數,可以在 FROM (從) 子句中使用。使用 SCHEMA (結構描述),將查詢結果範圍縮小為僅完全符合維度清單的指標,或是沒有維度的指標。
如果您使用 SCHEMA (結構描述) 子句,其中必須至少包含一個引數,而且該第一個引數必須是要查詢的指標命名空間。如果您指定僅具有此命名空間引數的 SCHEMA (結構描述),則結果的範圍縮小為僅限於沒有任何維度的指標。
如果您指定具有其他引數的 SCHEMA (結構描述),則命名空間引數之後的其他引數必須是標籤索引鍵。標籤索引鍵必須是維度名稱。如果您指定一或多個這些標籤索引鍵,則結果的範圍僅限於具有完全相同維度集的指標。這些標籤索引鍵的排序並不重要。
例如:
SELECT AVG(CPUUtilization) FROM "AWS/EC2" 符合
AWS/EC2
命名空間中的全部CPUUtilization
指標,而無論其維度,並傳回單一彙總時間序列。SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2") 僅符合沒有任何已定義維度之
AWS/EC2
命名空間中的CPUUtilization
指標。SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId) 僅符合回報給 CloudWatch 之具有一個維度
InstanceId
的CPUUtilization
指標。SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) 僅符合從
AWS/ApplicationELB
回報給 CloudWatch 之具有兩個維度LoadBalancer
和AvailabilityZone
的RequestCount
指標。
- WHERE
-
選用。使用一或多個標籤索引鍵的特定標籤值,將結果篩選為僅符合指定表達式的指標。例如,WHERE InstanceType = 'c3.4xlarge' 將結果篩選為僅
c3.4xlarge
執行個體類型,並且 WHERE InstanceType != 'c3.4xlarge' 將結果篩選為所有執行個體類型 (除外c3.4xlarge
)。當您在監控帳戶中執行查詢時,可以使用
WHERE AWS.AccountId
將結果僅限制給您指定的帳戶。例如,WHERE AWS.AccountId=444455556666
僅查詢來自帳戶444455556666
的指標。若要將查詢僅限制給監控帳戶本身中的指標,請使用WHERE AWS.AccountId=CURRENT_ACCOUNT_ID()
。標籤值一律必須以單引號括住。
支援的運算子
WHERE (哪裡) 子句支援下列運算子:
= 標籤值必須與指定字串相符。
!= 標籤值必須與指定字串不相符。
AND 指定的兩個條件都必須為 true 才能相符。您可以使用多個 AND 關鍵字來指定兩個或多個條件。
- GROUP BY
-
選用。將查詢結果分組為多個時間序列,每個時間序列對應於指定的標籤索引鍵或索引鍵的不同值。例如,使用
GROUP BY InstanceId
為每個InstanceId
值傳回不同的時間序列。使用GROUP BY ServiceName, Operation
為每個可能的ServiceName
和Operation
值組合建立不同的時間序列。使用 GROUP BY (分組依據) 子句,預設情況下,結果會根據 GROUP BY (分組依據) 子句中指定的標籤序列按字母升冪排序。若要變更結果排序,請新增 ORDER BY (排序依據) 子句至您的查詢。
當您在監控帳戶中執行查詢時,可以使用
GROUP BY AWS.AccountId
根據結果來自的帳戶對結果進行分組。注意
如果某些相符指標並未包含 GROUP BY (分組依據) 子句中指定的特定標籤索引鍵,則會傳回名為
Other
的空值群組。例如,如果您指定GROUP BY ServiceName, Operation
,且某些傳回的指標不包含ServiceName
作為維度,則這些指標會顯示為像ServiceName
值一樣擁有Other
。 - ORDER BY
-
選用。如果查詢傳回一個以上的時間序列,則請指定要用於傳回之時間序列的排序。順序是基於您在 ORDER BY (排序依據) 子句中指定的 FUNCTION (函數) 所找到的值而定。FUNCTION (函數) 用於從每個傳回的時間序列計算單個純量值,並且該值用於確定排序。
您也可以指定是否使用升冪 ASC 或降冪 DESC 排序。如果您省略此參數,則預設為升冪 ASC。
例如,新增
ORDER BY MAX() DESC
子句會依照時間範圍內觀察到的最大資料點來降冪排序結果:表示會先傳回具有最高最大資料點的時間序列。在 ORDER BY (排序依據) 子句中使用的有效函數是
AVG()
、COUNT()
、MAX()
、MIN()
和SUM()
。如果您將 ORDER BY (排序依據) 子句與 LIMIT (限制) 子句搭配使用,則產生的查詢是「前 N」查詢。ORDER BY (排序依據) 對可能會傳回大量指標的查詢也很有用,因為每個查詢可傳回不超過 500 個時間序列。如果查詢符合 500 個以上的時間序列,並且您使用 ORDER BY (排序依據) 子句,則會排序時間序列,然後排序順序中前 500 個時間序列就是傳回的時間序列。
- LIMIT
-
選用。將查詢傳回的時間序列數量限制為您指定的值。您可以指定的最大值是 500,未指定 LIMIT (限制) 的查詢也可以傳回不超過 500 個時間序列。
將 LIMIT (限制) 子句與 ORDER BY (排序依據) 子句搭配使用會為您提供「前 N」查詢。
什麼需要引號或跳脫字元?
在查詢中,標籤值一律必須以單引號括住。例如,SELECT MAX(CPUUtilization) FROM "AWS/EC2" WHERE AutoScalingGroupName = 'my-production-fleet'。
包含字母、數字和底線 (_) 以外字元的指標命名空間、指標名稱和標籤索引鍵必須以雙引號括住。例如,SELECT MAX("My.Metric")。
如果其中一個本身即包含雙引號或單引號 (例如 Bytes"Input"
),則必須使用反斜線跳脫每個引號,如 SELECT AVG("Bytes\"Input\"")。
如果指標命名空間、指標名稱或標籤索引鍵包含在 Metrics Insights 中保留關鍵字的文字,則這些文字也必須以雙引號括住。例如,如果您的指標名為 LIMIT
,則您可以使用 SELECT AVG("LIMIT")
。也可以用雙引號括住任何命名空間、指標名稱或標籤,即使其不包含保留的關鍵字也一樣。
如需保留關鍵字的完整清單,請參閱 保留的關鍵字。
逐步建置豐富的查詢
本節將逐步說明建置使用所有可能子句的完整範例。
我們從以下查詢開始,其彙總了以 LoadBalancer
和 AvailabilityZone
維度收集的所有 Application Load Balancer RequestCount
指標。
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)
現在,如果我們只想查看來自特定負載平衡器的指標,可以新增 WHERE (哪裡) 子句,將傳回的指標限制為僅 LoadBalancer
維度值為 app/load-balancer-1
的指標。
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1'
之前的查詢會將來自此負載平衡器的所有可用區域的 RequestCount
指標彙總至一個時間序列。如果想查看每個可用區域的不同時間序列,我們可以新增 GROUP BY (分組依據) 子句。
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' GROUP BY AvailabilityZone
接下來,我們可能想要排序這些結果,以便先看到最高值。以下 ORDER BY (排序依據) 子句按查詢時間範圍內每個時間序列回報的最大值,以降冪排序時間序列:
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' GROUP BY AvailabilityZone ORDER BY MAX() DESC
最後,如果主要對「前 N」類型的查詢感興趣,我們可以使用 LIMIT (限制) 子句。這最後一個範例將結果限制為僅具有五個最高 MAX
值的時間序列。
SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' GROUP BY AvailabilityZone ORDER BY MAX() DESC LIMIT 5
跨帳戶查詢範例
當在 CloudWatch 跨帳戶可觀測性中設定為監控帳戶的帳戶中執行時,這些範例有效。
下列範例會搜尋來源帳戶 123456789012 中的所有 Amazon EC2 執行個體,並傳回平均值。
SELECT AVG(CpuUtilization) FROM "AWS/EC2" WHERE AWS.AccountId ='123456789012'
下列範例會在所有連結的來源帳戶的 AWS/EC2
中查詢 CPUUtilization
指標,並依帳戶 ID 和執行個體類型將結果分組。
SELECT AVG(CpuUtilization) FROM "AWS/EC2" GROUP BY AWS.AccountId, InstanceType
下列範例會在監控帳戶本身中查詢 CPUUtilization
。
SELECT AVG(CpuUtilization) FROM "AWS/EC2" WHERE AWS.AccountId = CURRENT_ACCOUNT_ID()