統計資料 - Amazon CloudWatch 日誌

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

統計資料

使用 stats 建立日誌資料的視覺化效果,例如長條圖、折線圖和堆疊區域圖。這可協助您更有效率地識別記錄資料中的模式。 CloudWatch Logs Insights 會針對使用stats函數和一或多個彙總函數的查詢產生視覺效果。

例如,Route 53 日誌群組中的下列查詢會傳回視覺化效果,依查詢類型顯示每小時 Route 53 記錄的分佈情況。

stats count(*) by queryType, bin(1h)

所有這些查詢都可以產生長條圖。如果您的查詢使用 bin() 函式將資料以一個欄位與一段時間進行群組,那麼您也可以看到折線圖和堆疊區域圖。

bin 函數支援以下時間單位和縮寫。對於包含多個字元的所有單位和縮寫,支援加上 s 來表示複數。所以 hrhrs 皆可用來指定時數。

  • millisecond ms msec

  • second s sec

  • minute m min

  • hour h hr

  • day d

  • week w

  • month mo mon

  • quarter q qtr

  • year y yr

視覺化呈現時間序列資料

時間序列視覺化適用於具有下列特性的查詢:

這些查詢可以產生折線圖、堆疊區域圖、長條圖和圓餅圖。

範例

如需完整的教學,請參閱教學課程:執行查詢來產生時間序列視覺化

以下是更多適用於時間序列視覺化的查詢範例。

以下查詢為 myfield1 欄位的平均值產生視覺效果,其中每 5 分鐘建立一個資料點。每個資料點是日誌中前五分鐘的 myfield1 值的平均值彙總。

stats avg(myfield1) by bin(5m)

以下查詢根據不同欄位建立三個值的視覺效果,其中每 5 分鐘建立一個資料點。產生此覺化是因為查詢包含彙總函數,且使用 bin() 做為分組欄位。

stats avg(myfield1), min(myfield2), max(myfield3) by bin(5m)

折線圖和堆疊區域圖限制

彙總記錄項目資訊但不使用 bin() 函數的查詢可產生長條圖。不過,該查詢無法產生折線圖或堆疊區域圖。如需這些查詢類型的詳細資訊,請參閱 視覺化呈現依欄位分組的日誌資料

視覺化呈現依欄位分組的日誌資料

您可以為使用 stats 函數和一或多個彙總函數的查詢產生長條圖。如需詳細資訊,請參閱 Aggregation Functions in the Stats Command

若要查看視覺化,請執行查詢。查詢 Visualization (視覺化) 標籤,選取 Line (線條) 旁邊的箭頭,然後選擇 Bar (長條)。長條圖中的視覺化限制為最多 100 個長條。

範例

如需完整的教學,請參閱教學課程:執行查詢以產生依日誌欄位分組的視覺效果。以下段落包含更多可依據欄位進行視覺化的查詢範例。

下列 VPC 流程日誌查詢會尋找每個目的地位址、每個工作階段傳輸的平均位元組數。

stats avg(bytes) by dstAddr

您也可以產生一個圖表,其中包含每個結果值的多個長條。例如,下列 VPC 流程日誌查詢會尋找每個目的地位址、每個工作階段傳輸的平均和最大位元組數。

stats avg(bytes), max(bytes) by dstAddr

下列查詢會尋找每個查詢類型的 Amazon Route 53 查詢日誌數量。

stats count(*) by queryType

在單一查詢中使用多個統計資訊命令

您可以在單一查詢中使用多達兩個 stats 命令。這讓能您在第一個彙總的輸出上執行額外的彙總。

範例:使用兩個 stats 命令進行查詢

例如,以下查詢會先找出 5 分鐘區間的總流量,然後計算這些 5 分鐘區間的最高、最低和平均流量。

FIELDS strlen(@message) AS message_length | STATS sum(message_length)/1024/1024 as logs_mb BY bin(5m) | STATS max(logs_mb) AS peak_ingest_mb, min(logs_mb) AS min_ingest_mb, avg(logs_mb) AS avg_ingest_mb

範例:將多個統計資料命令與其他函數 (例如 filterfieldsbin) 相結合

您可以在單一命令中,將兩個 stats 命令與其他命令(例如 filterfields) 相結合。例如,以下查詢會尋找工作階段中不同 IP 地址的數目,並依用戶端平台尋找工作階段數目,篩選這些 IP 地址,最後再找出每個用戶端平台的工作階段請求的平均數。

STATS count_distinct(client_ip) AS session_ips, count(*) AS requests BY session_id, client_platform | FILTER session_ips > 1 | STATS count(*) AS multiple_ip_sessions, sum(requests) / count(*) AS avg_session_requests BY client_platform

您可以在具有多個 stats 命令的查詢中使用 bindateceil 函數。例如,以下查詢會先將訊息合併成 5 分鐘的區塊,然後將這些 5 分鐘的區塊彙總為 10 分鐘的區塊,並計算每個 10 分鐘區塊內的最高、最低和平均流量。

FIELDS strlen(@message) AS message_length | STATS sum(message_length) / 1024 / 1024 AS logs_mb BY BIN(5m) as @t | STATS max(logs_mb) AS peak_ingest_mb, min(logs_mb) AS min_ingest_mb, avg(logs_mb) AS avg_ingest_mb BY dateceil(@t, 10m)

備註與限制

查詢最多可以有兩個 stats 命令。此配額無法變更。

如果您使用一個 sortlimit 命令,則其必須出現在第二個 stats 命令之後。如果在第二個 stats 命令之前,查詢無效。

當查詢有兩個 stats 命令時,在第一個 stats 彙總完成之前,不會開始顯示查詢的部分結果。

在單一查詢的第二個 stats 命令中,您只能參照第一個 stats 命令中定義的欄位。例如,以下查詢無效,因為 @message 欄位要在第一次 stats 彙總之後才可以使用。

FIELDS @message | STATS SUM(Fault) by Operation # You can only reference `SUM(Fault)` or Operation at this point | STATS MAX(strlen(@message)) AS MaxMessageSize # Invalid reference to @message

您在第一個 stats 命令之後參照的任何欄位,都必須在該第一個 stats 命令中定義。

STATS sum(x) as sum_x by y, z | STATS max(sum_x) as max_x by z # You can only reference `max(sum_x)`, max_x or z at this point
重要

bin 函數始終以隱含的方式使用 @timestamp 欄位。這表示如果不使用第一個 stats 命令傳播 timestamp 欄位,就無法在第二個 stats 命令中使用 bin。例如,以下查詢無效。

FIELDS strlen(@message) AS message_length | STATS sum(message_length) AS ingested_bytes BY @logStream | STATS avg(ingested_bytes) BY bin(5m) # Invalid reference to @timestamp field

因此,應在第一個 stats 命令中定義 @timestamp 欄位,然後就可以在第二個 stats 命令中用來與 dateceil 搭配使用,如以下範例所示。

FIELDS strlen(@message) AS message_length | STATS sum(message_length) AS ingested_bytes, max(@timestamp) as @t BY @logStream | STATS avg(ingested_bytes) BY dateceil(@t, 5m)

與統計資料搭配使用的函數

CloudWatch 日誌洞見支援統計資料彙總函式和統計資料非彙總函式。

stats 命令中使用統計資料彙總函數,並用作其他函數的引數。

函式 結果類型 描述

avg(fieldName: NumericLogField)

數字

所指定欄位中的值的平均數。

count()

count(fieldName: LogField)

number

計算日誌事件數。count() (或 count(*)) 計算查詢傳回的所有事件數,count(fieldName) 計算包含指定欄位名稱的所有記錄數。

count_distinct(fieldName: LogField)

number

傳回欄位的唯一值數目。如果欄位有極高的基數 (包含許多唯一值),則 count_distinct 傳回的值只是近似值。

max(fieldName: LogField)

LogFieldValue

在所查詢的日誌中此日誌欄位的值上限。

min(fieldName: LogField)

LogFieldValue

在所查詢的日誌中此日誌欄位的值下限。

pct(fieldName: LogFieldValue, percent: number)

LogFieldValue

百分位數會指出資料集中相關準備好的值。例如,pct(@duration, 95) 傳回 @duration 值,其中 @duration 的值有 95% 低於這個值,有 5% 高於這個值。

stddev(fieldName: NumericLogField)

number

所指定欄位中的值的標準差。

sum(fieldName: NumericLogField)

number

所指定欄位中的值的總和。

Stats 非彙總函數

非彙總函數可用於 stats 命令,也可以作為其他函數的引數使用。

函式 結果類型 描述

earliest(fieldName: LogField)

LogField

從在查詢日誌中具有最早時間戳記的日誌事件中傳回 fieldName 的值。

latest(fieldName: LogField)

LogField

從在查詢日誌中具有最晚時間戳記的日誌事件中傳回 fieldName 的值。

sortsFirst(fieldName: LogField)

LogField

傳回在查詢日誌中最先排序的 fieldName 值。

sortsLast(fieldName: LogField)

LogField

傳回在查詢日誌中最後排序的 fieldName 值。