本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
了解排程查詢概念
在建立排程查詢之前,請了解這些會影響查詢執行方式和結果交付位置的關鍵概念。
IAM 角色分離
排程查詢需要兩個不同的 IAM 角色:一個用於執行查詢,另一個用於將結果交付至 Amazon S3 或 Amazon EventBridge 事件匯流排。了解此分隔存在的原因可協助您正確設定許可,並使用其提供的安全性和操作優勢。
雙角色架構會劃分資料存取和資料交付之間的責任。查詢執行角色會存取您的日誌資料並執行查詢,而目的地交付角色會將結果寫入您選擇的目的地。此區隔遵循最低權限原則 - 每個角色只有其特定函數所需的許可。
- 查詢執行角色
-
允許 CloudWatch Logs 代表您執行 CloudWatch Logs Insights 查詢。此角色需要存取日誌群組和執行查詢的許可,但不需要存取目的地資源。必要許可:
-
logs:StartQuery -
logs:StopQuery -
logs:GetQueryResults -
logs:DescribeLogGroups -
logs:Unmask如果需要取消遮罩資料
對於 KMS 加密的日誌群組:用於加密日誌群組的 KMS 金鑰的
kms:Decrypt和kms:DescribeKey許可。也需要新增這些許可。信任關係要求:查詢執行角色必須包含允許 CloudWatch Logs 服務 (
logs.amazonaws.com) 擔任角色的信任政策。如果沒有此信任關係,排程的查詢將會失敗並出現許可錯誤。查詢執行角色的信任政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }查詢執行角色的許可政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:StartQuery", "logs:StopQuery", "logs:GetQueryResults", "logs:DescribeLogGroups" ], "Resource": "*" } ] } -
- 目的地交付角色
-
允許 CloudWatch Logs 將查詢結果交付至您選擇的目的地。此角色只需要特定目的地服務的許可,並遵循最低權限原則。必要許可因目的地類型而異。
信任關係需求:目的地交付角色也必須包含信任政策,允許 CloudWatch Logs 服務 (
logs.amazonaws.com) 擔任該角色。S3 目的地交付角色的許可政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::your-scheduled-query-results-bucket/*" } ] }
此區隔為您的操作提供實際的好處。從安全角度來看,如果您需要變更交付結果的位置,您只需修改目的地交付角色,而不變更查詢執行許可。為了合規和稽核,您可以清楚地追蹤哪些角色存取敏感日誌資料,以及哪些角色寫入外部系統。這可讓您更輕鬆地示範日誌分析基礎設施遵循安全最佳實務。
跨區域和跨帳戶用量
排程查詢會在特定區域中建立,並在該區域中執行。不過,您可以查詢日誌群組,並跨區域和帳戶交付結果。您需要將一或多個 AWS 帳戶設定為監控帳戶,並將其連結至多個來源帳戶。監控帳戶是中央 AWS 帳戶,可檢視來源帳戶產生的可觀測性資料並與之互動。來源帳戶是個別 AWS 帳戶,可產生其中資源的可觀測性資料。來源帳戶會與監控帳戶共用其可觀察性資料。因此,您可以使用所有連結帳戶的日誌群組,從監控帳戶設定排程查詢。
- 查詢跨區域日誌群組
-
您的排程查詢可以存取任何區域中的日誌群組。使用完整的 ARN 格式指定日誌群組:
arn:aws:logs:region:account-id:log-group:log-group-name。查詢執行角色需要logs:StartQuery和所有目標區域中日誌群組的logs:GetQueryResults許可。
重要
查詢日誌群組或跨區域交付結果時,日誌資料會跨越區域界限。考慮下列各項:
-
資料駐留要求 - 確保跨區域資料傳輸符合組織的資料控管政策和法規要求
-
資料傳輸成本 - 跨區域資料傳輸會產生額外費用
-
網路延遲 - 在遙遠區域中存取日誌群組的查詢可能會遇到較高的延遲
為了獲得最佳效能和成本效益,請在與主要日誌群組相同的區域中建立排程查詢。
替代方法:使用 CloudWatch Logs 集中,將多個帳戶和區域的日誌資料複寫至中央監控帳戶。這可讓您在存取所有集中式日誌的單一區域中建立排程查詢,避免跨區域查詢並簡化 IAM 許可管理。
排程表達式和時區處理
您定義的排程會決定查詢執行的時間及其執行頻率。選擇正確的排程表達式會影響您何時收到結果,以及您查詢的資料量。了解表達式類型可協助您在簡單性和精確度之間進行選擇。
Cron 表達式可精確控制時間,讓您指定確切的時間、星期幾或月份幾日。當您需要在特定上班時間執行查詢或符合操作排程時,請使用 cron 表達式。在 主控台中,您也可以使用簡單的行事曆選項來排程查詢。
- Cron 表達式
-
在特定時間執行查詢。格式:
cron(minute hour day-of-month month day-of-week year)。範例:-
cron(0 9 * * ? *)- 每日上午 9:00 UTC -
cron(0 18 ? * MON-FRI *)- 工作日 UTC 下午 6:00 -
cron(0 0 1 * ? *)- 每月第一天午夜 UTC -
cron(0 12 ? * SUN *)- 每週日中午 UTC -
cron(30 8 1 1 ? *)- 1 月 1 日上午 8:30 UTC
-
所有排程查詢都會在 UTC 中執行,無論您的本機時區或 AWS 資源所在的位置為何。當您排定工作時間或時間敏感分析的查詢時,這尤其重要。例如,如果您的業務在美國東部時間營運,而且您想要在東部時間上午 9 點進行每日報告,您需要考慮 UTC 偏移 (夏令時間 14:00 UTC,否則為 13:00 UTC)。以 UTC 為考量來規劃排程表達式,以確保查詢在預期時間執行。
選擇查詢語言
排程查詢支援三種不同的查詢語言,您的選擇會影響您撰寫查詢的方式,以及您的團隊可以輕鬆維護查詢的方式。正確的語言取決於您的分析需求和您團隊的現有技能。
如果您主要是篩選和彙總日誌資料,CloudWatch Logs Insights 查詢語言提供最直接的語法。對於您需要透過多個步驟重塑或豐富資料的複雜資料轉換,PL 的管道方法可讓您更輕鬆地遵循邏輯。當您需要執行與資料庫操作類似的聯結或複雜彙總時,SQL 會提供熟悉的語法,讓資料庫經驗豐富的團隊可以快速採用。
- CloudWatch Logs Insights 查詢語言 (CWLI)
-
專為使用直覺式語法進行日誌分析而打造。最適合:
-
文字型日誌分析和篩選
-
時間序列彙總和統計資料
-
記錄分析的新團隊
-
- OpenSearch Service 管道處理語言 (PPL)
-
具有強大資料轉換功能的管道型查詢語言。最適合:
-
複雜的資料轉換和擴充
-
多步驟資料處理工作流程
-
熟悉管道型處理的團隊
-
- OpenSearch Service 結構化查詢語言 (SQL)
-
熟悉資料庫樣式查詢的標準 SQL 語法。最適合:
-
複雜的聯結和彙總
-
商業智慧和報告
-
具有強大 SQL 經驗的團隊
-
目的地選擇和使用案例
您傳送查詢結果的位置會決定您可以如何處理它們。無論您要建置長期分析、觸發自動回應或兩者,此選項都會塑造您的整個下游工作流程。了解每個目的地類型的強項,可協助您為使用案例設計正確的架構。
Amazon S3 目的地已針對儲存和批次處理進行最佳化。當您需要將查詢結果保留數月或數年、分析一段時間的趨勢,或將資料饋送至分析平台時,Amazon S3 會提供具有無限制保留的符合成本效益的儲存。EventBridge 目的地已針對即時自動化進行最佳化。當查詢結果應觸發立即動作時,例如傳送提醒、啟動工作流程或更新系統時,EventBridge 會以您的應用程式可立即回應的事件的形式提供結果。根據預設,所有查詢完成事件都會自動做為事件傳送至預設事件匯流排,以便與下游處理系統、Lambda 函數或其他事件驅動型架構整合。結果只會在成功執行查詢時發佈到目的地。
- Amazon S3 目的地
-
將查詢結果儲存為 JSON 檔案,以進行長期保留和批次處理。最適合:
-
歷史分析和資料封存
-
與資料湖和分析平台整合
-
合規和稽核要求
-
經濟實惠的大型結果集儲存
-
- EventBridge 目的地
-
將查詢結果做為事件傳送,以進行即時處理和自動化。您只能使用事件中傳送的 queryId 擷取查詢結果,最多 30 天,因為我們將結果存放 30 天。最適合:
-
觸發自動回應以查詢結果
-
與無伺服器工作流程和 Lambda 函數整合
-
即時警示和通知系統
-
事件驅動型架構和微服務
-
查詢結果格式和結構
對於 Amazon S3 目的地 - 查詢結果會以 JSON 格式交付,其結構與 GetQueryResults API 回應相同。為了讓 Amazon EventBridge 了解排程查詢結果的格式,可協助您設計下游處理和整合工作流程。
查詢結果會以 JSON 格式交付,結構如下:
{ "version": "0", "id": "be72061b-eca2-e068-a7e1-83e01d6fe807", "detail-type": "Scheduled Query Completed", "source": "aws.logs", "account": "123456789012", "time": "2025-11-18T11:31:48Z", "region": "us-east-1", "resources": [ "arn:aws:logs:us-east-1:123456789012:scheduled-query:477b4380-b098-474e-9c5e-e10a8cc2e6e7" ], "detail": { "queryId": "2038fd57-ab4f-4018-bb2f-61d363f4a004", "queryString": "fields @timestamp, @message, @logStream, @log\n| sort @timestamp desc\n| limit 10000", "logGroupIdentifiers": [ "/aws/lambda/my-function" ], "status": "Complete", "startTime": 1763465460, "statistics": { "recordsMatched": 0, "recordsScanned": 0, "estimatedRecordsSkipped": 0, "bytesScanned": 0, "estimatedBytesSkipped": 0, "logGroupsScanned": 1 } } }
關鍵元素包括:
-
statistics- 查詢效能指標,包括相符、掃描、處理位元組和估計略過資料的記錄 -
startTime- 查詢執行開始的時間 (Unix 時間戳記) -
queryString- 實際執行的查詢 -
queryId- 查詢的查詢 ID,可使用其擷取結果 -
logGroupIdentifiers- 查詢的日誌群組清單 -
status- 查詢執行狀態 (完成、失敗等)