本頁說明如何解決 Cloud Scheduler 的問題。
Cloud Scheduler 會在每次開始和結束執行工作時發布記錄。您可以擷取、查看及分析特定工作的記錄,包括 Cloud Scheduler 提供的稽核記錄。詳情請參閱「查看記錄」。
根據預設,如果 Cloud Scheduler 工作未收到目標服務 (即工作要求處理常式) 的確認,系統就會將工作視為失敗。Cloud Scheduler 會根據您設定的指數輪詢,重試工作。
如要瞭解影響服務的事件,請參閱Google Cloud 服務健康狀態資訊主頁和為 Cloud Scheduler 報告的所有事件。 Google Cloud
工作因下游服務問題而失敗
工作失敗可能是因為 Cloud Scheduler 鎖定的下游服務 (例如 Cloud Run) 發生問題,而非 Cloud Scheduler 本身。如果符合下列條件,您可能會懷疑是下游服務發生問題:
- Cloud Scheduler 的權限已正確設定。
- Cloud Scheduler 可以順利連上目標服務。
- Cloud Scheduler 執行記錄中的錯誤訊息來自下游服務。
如要解決這個問題,請完成下列步驟:
- 直接叫用下游服務:確認下游服務可以順利叫用,不必透過 Cloud Scheduler。如果成功叫用,表示問題可能出在 Cloud Scheduler;如果失敗,則需要進一步偵錯下游服務。
- 檢查目的地服務記錄:檢查目的地服務的記錄,找出輸出的錯誤,並據此進行分類。
- 尋找長時間執行的作業:如果 Cloud Scheduler 針對長時間執行的作業 (超過 30 分鐘) 回傳 HTTP
504
錯誤,請檢查目的地服務記錄,瞭解執行作業是否成功或失敗,因為目的地服務的請求逾時時間可能較長。在這種情況下,Cloud Scheduler 會逾時,但目的地服務不會。
工作失敗,發生權限錯誤
權限可控管哪些主體能存取資源,以及允許哪些作業。如果權限設定錯誤,可能會導致工作執行中斷,並出現權限遭拒的錯誤。稽核記錄會詳細記錄所有權限變更,方便您找出這些問題的來源。
如果 Cloud Scheduler 工作因權限錯誤而失敗,執行記錄檔可能會顯示類似 "debugInfo":"URL_ERROR-ERROR_OTHER. Original HTTP response code number = 403"
的訊息。
如要解決這個問題,請完成下列一或多項驗證:
確認授予服務代理程式的 IAM 角色:Cloud Scheduler 服務代理程式需要 Cloud Scheduler 服務代理程式 (
roles/cloudscheduler.serviceAgent
) 角色。如果沒有這個角色,Cloud Scheduler 工作就會失敗。您可以手動將角色授予 Cloud Scheduler 服務代理。如果您是在 2019 年 3 月 19 日之前啟用 Cloud Scheduler API,或是移除了 Cloud Scheduler Service Agent 角色,才需要手動授予角色。詳情請參閱「授予 Cloud Scheduler 服務代理程式角色」。確認服務帳戶權限:請確認附加至工作的服務帳戶具有正確的權限和範圍,可叫用目的地服務。包括目標位於其他專案,或是中介服務的最終目標。如果目標位於 Google Cloud,請確認您已將必要角色授予服務帳戶。 Google Cloud 中的每項服務都需要特定角色,而接收服務會自動驗證產生的權杖。舉例來說,如要使用 Cloud Run 和 Cloud Run 函式,您必須授予
Cloud Run Invoker
角色。如果目標位於 Google Cloud外部,接收服務必須手動驗證權杖。詳情請參閱「向 Cloud Scheduler 進行驗證」和「使用驗證搭配 HTTP 目標」。確認是否有任何 VPC Service Controls 違規事項: VPC Service Controls 是一項 Google Cloud 功能,可讓您設定安全範圍,防範資料竊取。如要判斷錯誤是否與 VPC Service Controls 有關,請檢查您是否已啟用 VPC Service Controls,並且已將其套用至您嘗試使用的專案與服務。如要確認專案和服務是否受到 VPC Service Controls 保護,請檢查該資源階層層級的 VPC Service Controls 政策。
如要瞭解問題的範圍,可以從稽核記錄中擷取 VPC Service Controls 錯誤。
-
前往 Google Cloud 控制台的「Logs Explorer」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
依下列條件查詢稽核記錄:
severity="ERROR" AND protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
具體來說,錯誤訊息可能包含下列文字:
Request is prohibited by organization's policy
Request violates VPC Service Controls
如要進一步瞭解設定 VPC Service Controls 時可能遇到的問題,請參閱「排解常見問題」。
-
驗證所有私人端點:Cloud Scheduler 只能在虛擬私有雲 Service Controls 邊界內,叫用特定私人端點,例如 Cloud Run、Cloud Run 函式和 Google Cloud API。檢查目的地服務的 Ingress 設定 (例如參閱「限制 Cloud Run 的網路 Ingress」),以及附加服務帳戶的權限。您可能會收到
URL_ERROR-ERROR_DNS
錯誤訊息。詳情請參閱本文中的「工作因無法連線至目的地目標而失敗」。
工作因無法連線至目的地目標而失敗
如果目的地目標無法連線,Cloud Scheduler 工作就會失敗,並導致這個問題。執行記錄會顯示以 URL_ERROR
或 URL_UNREACHABLE
開頭的錯誤。
如要解決這個問題,請根據收到的錯誤訊息完成下列其中一項檢查:
URL_ERROR-ERROR_AUTHENTICATION
:系統傳回 HTTP401 (Unauthorized)
或 HTTP407 (Proxy Authentication Required)
錯誤。目的地目標需要驗證,但 Cloud 試算表要求未包含有效的驗證權杖,例如要求缺少授權標頭或憑證無效。檢查工作的驗證設定。詳情請參閱「向 Cloud Scheduler 進行驗證」和「使用驗證搭配 HTTP 目標」。URL_ERROR-ERROR_DNS
:表示網域名稱系統 (DNS) 無法解析主機名稱,因此網址擷取作業失敗。舉例來說,主機名稱不存在或沒有相關聯的 IP 位址。錯誤訊息可能包含Original HTTP response code number = 0
文字。檢查主機名稱是否有效,並在叫用私有端點時,確認 Cloud Scheduler 是否支援該端點,以及檢查其連入設定。URL_ERROR-ERROR_NOT_FOUND
:網路伺服器傳回 HTTP404 Not Found
錯誤。檢查目標網址是否正確,以及資源是否存在。URL_ERROR-ERROR_OTHER
:這表示一般 HTTP4xx
錯誤,先前未詳細說明。查看記錄,擷取原始 HTTP 回應代碼。 如果收到 HTTP403
錯誤,請參閱本文的「工作因權限錯誤而失敗」一節。URL_UNREACHABLE-UNREACHABLE_5xx
:到達網頁目標傳回 HTTP5xx
或429
錯誤。這可能是暫時性狀況,例如伺服器負載過重。請檢查目的地目標的記錄,以偵錯問題。URL_UNREACHABLE-UNREACHABLE_CONNECTION_RESET
:連線已遭對等方重設。檢查外部伺服器端是否有問題。URL_UNREACHABLE-UNREACHABLE_ERROR
:表示網路發生錯誤。檢查目標網址是否正確,以及是否有任何防火牆規則封鎖存取權。
工作執行作業問題
Cloud Scheduler 工作會在指定時間或以固定間隔執行。執行工作時可能會發生下列問題。
先前可正常運作的工作停止執行
如果 Cloud Scheduler API 遭到停用,先前順利執行的 Cloud Scheduler 工作就會停止執行,您可以查詢稽核記錄,確認 API 停用的時間,查詢條件如下:
resource.type="audited_resource" AND protoPayload.serviceName="cloudscheduler.googleapis.com" AND operation.producer="serviceusage.googleapis.com" AND protoPayload.authorizationInfo.permission="serviceusage.services.disable"
如要解決這個問題,請啟用 Cloud Scheduler API。
日光節約時間導致工作執行時間不規律
使用 Google Cloud 控制台建立 Cloud Scheduler 工作時,您必須指定時區。使用 Google Cloud CLI 時,您可以選擇使用 --time-zone
旗標指定時區;否則,系統會預設使用世界標準時間 (UTC) 或 UTC
。
如果工作設定為非世界標準時間的時區,且執行時間因日光節約時間 (DST) 變更而變得不規律,就會發生這個問題。這是預期中的行為。
如果工作需要非常準確的週期,請選擇不採用日光節約時間的時區。具體來說,如要完全避免這個問題,請將工作排程設為使用世界標準時間時區。
詳情請參閱「Cron 工作格式和時區」。
後續步驟
如果 Cloud Scheduler 說明文件無法解決您的問題,請考慮下列選項:
- 如要尋求社群支援,請在 Stack Overflow 上提問,或使用
google-cloud-scheduler
標記搜尋類似問題。 - 請與Google Cloud 客戶服務聯絡,建立客服案件。
- 使用公開 Issue Tracker 開啟錯誤或功能要求。
詳情請參閱 Cloud Scheduler 支援。