本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
查詢
使用 lookup 以查詢資料表中的參考資料豐富查詢結果。您可以將上傳至 Amazon CloudWatch Logs 的 CSV 資料填入查詢資料表,或使用已完成或取消的日誌查詢結果填入查詢資料表。查詢執行時,lookup命令會將日誌事件中的欄位與查詢資料表中的欄位相符,並將指定的輸出欄位附加至結果。
針對資料擴充案例使用查詢表,例如將使用者 IDs映射至使用者詳細資訊、將產品代碼映射至產品資訊,或將錯誤代碼映射至錯誤描述。
建立和管理查詢資料表
您必須先建立查詢資料表,才能在查詢中使用 lookup命令。您可以從 CloudWatch 主控台或使用 Amazon CloudWatch Logs API 建立和管理查詢資料表。
建立查詢資料表 (主控台)
-
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
在導覽窗格中,選擇設定,然後選擇日誌索引標籤。
-
捲動至查詢資料表,然後選擇管理。
-
選擇建立查詢資料表。
-
輸入查詢資料表的名稱。名稱只能包含英數字元和底線。
-
(選用) 輸入描述。
-
上傳 CSV 檔案。檔案必須包含具有資料欄名稱的標頭列、使用 UTF-8 編碼,且不得超過 10 MB。
-
(選用) 指定要加密資料表資料的 AWS KMS 金鑰。
-
選擇建立。
建立查詢資料表後,您可以在 CloudWatch Logs Insights 查詢編輯器中檢視它。選擇查詢資料表索引標籤來瀏覽可用的資料表及其欄位。
若要更新查詢資料表,請選取資料表,然後選擇動作、更新。上傳新的 CSV 檔案以取代所有現有的內容。若要刪除查詢資料表,請選擇動作、刪除。
您也可以從在 Log Analytics 主控台或使用 Amazon CloudWatch Logs API 執行的已完成或取消的日誌查詢結果建立或更新查詢表,而不是上傳 CSV 資料。使用 CreateLookupTable或 UpdateLookupTable API 的 queryId 參數指定查詢 ID。已取消的查詢會將停止查詢時可用的部分結果填入資料表。您必須指定 CSV 內容或查詢 ID,但不能同時指定兩者。更新資料表是完整的取代操作,無論來源為何,都會取代所有現有的內容。若要根據排程自動重新整理具有查詢結果的查詢資料表,請使用具有查詢資料表目的地的排程查詢。如需詳細資訊,請參閱設定排程查詢的查詢資料表目的地。
注意
每個 每個帳戶最多可以建立 100 個查詢資料表 AWS 區域。CSV 檔案最多可達 10 MB。您也可以使用 Amazon CloudWatch Logs API 管理查詢資料表。如需詳細資訊,請參閱《Amazon CloudWatch Logs API 參考》中的 CreateLookupTable。
注意
如果查詢表使用 KMS 金鑰加密,呼叫者必須擁有金鑰 (用於加密查詢表的 KMS 金鑰) 的kms:Decrypt許可,才能搭配參考該查詢表的查詢使用 StartQuery API。如需詳細資訊,請參閱使用 加密 CloudWatch Logs 中的查詢資料表 AWS Key Management Service。
查詢查詢語法
命令結構
以下顯示此命令的格式。
lookuptablematch-fieldsoutput-modeoutput-field[,...]
命令使用下列引數:
-
– 要使用的查詢資料表名稱。table -
– 指定一或多個欄位,以比對日誌事件與查詢資料表。您可以使用下列任一表單:match-fields-
– 當查詢資料表資料欄名稱與日誌事件欄位名稱不同lookup-fieldaslog-field[,...]as時,請使用 。例如, 會將查詢資料表中的資料ip_address欄與日誌事件中的srcAddr欄位ip_address as srcAddr相符。 -
– 當日誌事件欄位名稱與查詢資料表資料欄名稱相同時,您可以直接省略lookup-field[,...]as並指定欄位名稱。例如,department, role會比對兩個資料欄與具有相同名稱的日誌事件欄位。
指定多個相符欄位時,查詢資料表中的資料列必須符合所有欄位,才能產生結果 (AND 邏輯)。
-
-
– 指定輸出欄位如何新增至結果。請使用下列其中一個:output-mode-
OUTPUT– 將輸出欄位新增至結果。如果日誌事件中已存在同名的欄位,則會以查詢資料表值覆寫該欄位。如果找不到相符項目,則 欄位會設定為 null。 -
OUTPUTNEW– 只有在欄位不存在於日誌事件中時,才會將輸出欄位新增至結果。如果 欄位已有值,則會保留原始值。如果找不到相符項目,則欄位保持不變。
-
-
– 要新增至結果的查詢資料表中的一個或多個欄位。output-field
範例:使用使用者詳細資訊來豐富日誌事件
假設您有一個包含 id 欄位的事件日誌群組,以及名為 的查詢資料表user_data,其中包含資料欄 id、email、 name和 department。下列查詢會使用查詢表中的使用者名稱、電子郵件和部門來豐富每個日誌事件。
fields action, status, name, email, department | lookup user_data id OUTPUT name, email, department
範例:搭配彙總使用查詢
您可以搭配彙總函數使用查詢輸出欄位。下列查詢會使用使用者詳細資訊豐富日誌事件,然後計算依電子郵件地址分組的事件。
fields user_id, action, username, email, department | lookup user_data user_id OUTPUT username, email, department | stats count(*) by email
範例:搭配篩選條件使用查詢
您可以根據查詢傳回的欄位來篩選結果。下列查詢會擴充日誌事件,然後篩選以僅顯示特定部門的事件。
fields user_id, action | lookup user_data user_id OUTPUT username, email, department | filter department = "Engineering"
範例:使用 OUTPUTNEW 富集而不覆寫
如果您的日誌事件已經包含hostname欄位,但有時候是空的,請使用 來填入缺少的值OUTPUTNEW,而不會覆寫現有的值。
fields srcAddr, hostname | lookup known_hosts ip_address as srcAddr OUTPUTNEW hostname, region
範例:搭配多個相符欄位使用查詢
您可以比對多個欄位。下列查詢會dstPort比對查詢表的 srcAddr和 ,以識別已知的網路服務。
fields @timestamp, srcAddr, dstAddr, dstPort | lookup network_services ip_address as srcAddr, port as dstPort OUTPUT service_name, owner | filter ispresent(service_name)
範例:使用具有相符欄位名稱的查詢
當您的日誌事件欄位名稱完全符合查詢資料表資料欄名稱時,您可以省略as關鍵字。下列查詢會直接比對查詢資料表上的 department和 role 欄位。
fields @timestamp, department, role | lookup employees department, role OUTPUT office, manager