View a markdown version of this page

join - Amazon CloudWatch Logs

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

join

將來源日誌群組的日誌事件與另一個日誌群組的事件結合,或根據相符欄位查詢結果。

使用 join命令來關聯不同來源之間的相關日誌事件,例如日誌群組,並使用其通用的金鑰,例如相符的請求識別符或交易 IDs。

語法

join type=<join_type> left=<left_alias> right=<right_alias> where <left_alias>.<field>=<right_alias>.<field> (SOURCE <right_log_group>)
Parameters

  • <right_log_group> – 要加入的次要資料來源。

  • <left_alias><right_alias> – 用於區分欄位與左 (主要) 和右 (次要) 資料來源的別名。

  • where <field> – 指定用作聯結金鑰的欄位。欄位必須存在於兩個資料來源中。

  • type=<join_type> (選用) – 指定聯結類型。有效的值如下:

    • inner (預設) – 僅傳回相符的記錄

    • left – 傳回來自主要資料來源的所有記錄,以及來自次要資料來源的相符記錄

範例

範例範例 1:將 API Gateway 請求與 Lambda 執行日誌建立關聯

此範例說明如何將 API Gateway 存取日誌加入 Lambda 函數日誌,以將傳入的請求與其後端處理建立關聯。這有助於疑難排解end-to-end請求流程,並識別哪些 Lambda 調用對應到特定的 API 請求。

filter status >= 500 | join type=inner left=api right=lambda where api.requestId=lambda.requestId (SOURCE '/aws/lambda/my-function') | fields api.requestId, api.status, api.latency, lambda.duration, lambda.memoryUsed | sort api.latency desc

此查詢:

  1. 查詢 API Gateway 存取日誌和伺服器錯誤的篩選條件 (狀態 >= 500)

  2. 使用顯示在兩個日誌來源中的 requestId 欄位,與 Lambda 函數日誌聯結

  3. 使用別名 (apilambda) 來區分欄位與每個來源

  4. 傳回顯示 API 延遲以及 Lambda 執行持續時間和記憶體用量的合併資訊

  5. 依 API 延遲排序結果,以識別最慢的請求

範例範例 2:追蹤跨微服務間的分散式交易

偵錯微服務架構中的問題時,您通常需要跨多個服務追蹤交易。此範例示範如何使用通用交易 ID 從兩個不同的服務加入日誌。

filter eventType = "ORDER_CREATED" | join type=left left=order right=payment where order.transactionId=payment.transactionId (SOURCE '/aws/lambda/payment-service') | filter payment.eventType = "PAYMENT_PROCESSED" or !ispresent(payment.eventType) | fields order.transactionId, order.orderId, order.customerId, payment.paymentStatus, payment.amount | filter payment.paymentStatus != "SUCCESS" or !ispresent(payment.paymentStatus)

此查詢:

  1. 從訂單服務中的訂單建立事件開始

  2. 使用 left join來包含所有訂單,甚至是沒有相符付款記錄的訂單

  3. 使用共用transactionId欄位與付款處理事件聯結

  4. 篩選最終結果,僅顯示付款失敗或缺少付款記錄的訂單

此處的左聯結很重要,因為它可確保您看到已建立但從未發生對應付款事件的訂單,這可能表示系統故障。

Behavior (行為)

  • 主要資料來源 (左側) 會先處理。

  • 次要資料來源會使用指定的聯結金鑰進行評估和比對。

  • 在聯結欄位上使用等式比較來執行比對。

  • 對於左聯結,來自主要資料來源的不相符記錄會保留為次要欄位的 null 值。

備註與限制

  • 僅支援等式 (=) 條件。

  • 每個查詢僅支援一個聯結命令。

  • 聯結金鑰必須同時存在於兩個資料來源中,且具有相容的類型。

  • 使用聯結的查詢可能會掃描更多資料並產生更高的成本。

  • 次要資料來源中唯一索引鍵值的數量限制為 50,000 個,以確保查詢效能。

  • 不支援聯結右側的子查詢。

相關命令