Risolvi i problemi di Cloud Scheduler

Questa pagina mostra come risolvere i problemi relativi a Cloud Scheduler.

Cloud Scheduler pubblica i log all'inizio e alla fine di ogni esecuzione del job. Puoi recuperare, visualizzare e analizzare i log per un job specifico, inclusi i log di controllo disponibili per Cloud Scheduler. Per saperne di più, consulta Visualizza i log.

Per impostazione predefinita, quando un job Cloud Scheduler non riceve una conferma dal servizio di destinazione, ovvero il gestore di richieste del job, il job viene considerato non riuscito. Cloud Scheduler riproverà a eseguire il job in base al backoff esponenziale che hai configurato.

Per informazioni sugli incidenti che interessano i Google Cloud servizi, consulta la Google Cloud dashboard di Service Health e Tutti gli incidenti segnalati per Cloud Scheduler.

Il job non riesce a causa di un problema del servizio downstream

L'errore di un job potrebbe essere dovuto a un problema in un servizio downstream a cui Cloud Scheduler fa riferimento, ad esempio Cloud Run, anziché a Cloud Scheduler stesso. Puoi sospettare un problema con un servizio downstream quando si verificano le seguenti condizioni:

  • Le autorizzazioni per Cloud Scheduler sono configurate correttamente.
  • Cloud Scheduler può raggiungere correttamente il servizio di destinazione.
  • I messaggi di errore nei log di esecuzione di Cloud Scheduler provengono dal servizio downstream.

Per risolvere questo problema, completa i seguenti passaggi:

  1. Richiama direttamente il servizio downstream: verifica che il servizio downstream possa essere richiamato correttamente senza Cloud Scheduler. Un'invocazione riuscita indica che il problema è probabilmente causato da Cloud Scheduler. In caso di esito negativo, il servizio downstream richiede un ulteriore debug.
  2. Esamina i log del servizio di destinazione: esamina i log del servizio di destinazione, determina gli errori restituiti e risolvili di conseguenza.
  3. Cerca operazioni di lunga durata: quando Cloud Scheduler restituisce un errore HTTP 504 per operazioni di lunga durata (più di 30 minuti), controlla i log del servizio di destinazione per verificare se l'esecuzione è riuscita o meno, in quanto il servizio di destinazione potrebbe avere un timeout della richiesta più lungo. In questo scenario, Cloud Scheduler va in timeout, ma il servizio di destinazione no.

Il job non riesce a causa di un errore di autorizzazione

Le autorizzazioni controllano quali entità possono accedere alle risorse e quali operazioni sono consentite. Le autorizzazioni configurate in modo errato possono interrompere le esecuzioni dei job e causare errori di autorizzazione negata. I log di controllo forniscono un registro dettagliato di tutte le modifiche alle autorizzazioni, consentendoti di identificare l'origine di questi problemi.

Quando il job Cloud Scheduler non riesce a causa di un errore di autorizzazione, i log di esecuzione potrebbero visualizzare un messaggio simile a "debugInfo":"URL_ERROR-ERROR_OTHER. Original HTTP response code number = 403".

Per risolvere il problema, completa una o più delle seguenti verifiche:

  • Verifica i ruoli IAM concessi al service agent: il service agent Cloud Scheduler richiede il ruolo Agente di servizio Cloud Scheduler (roles/cloudscheduler.serviceAgent). Senza questo ruolo, i job Cloud Scheduler non vanno a buon fine. Puoi concedere manualmente il ruolo al tuo agente di servizio Cloud Scheduler. La concessione manuale è richiesta solo se hai abilitato l'API Cloud Scheduler prima del 19 marzo 2019 o se hai rimosso il ruolo Agente di servizio Cloud Scheduler. Per saperne di più, consulta Concedere il ruolo Agente di servizio Cloud Scheduler.

  • Verifica le account di servizio account: assicurati che il service account collegato al job disponga delle autorizzazioni e dell'ambito corretti per richiamare il servizio di destinazione. Ciò include scenari in cui la destinazione si trova in un altro progetto o è la destinazione finale di un servizio intermediario. Se il target si trova all'interno di Google Cloud, verifica di aver concesso i ruoli necessari aaccount di serviziont. Ogni servizio all'interno di Google Cloud richiede un ruolo specifico e il servizio ricevente verifica automaticamente il token generato. Ad esempio, per Cloud Run e Cloud Run Functions, devi concedere il ruolo Cloud Run Invoker. Quando la destinazione è esterna a Google Cloud, il servizio di ricezione deve verificare manualmente il token. Per saperne di più, consulta Autenticarsi in Cloud Scheduler e Utilizzare l'autenticazione con i target HTTP.

  • Verifica eventuali violazioni dei Controlli di servizio VPC: Controlli di servizio VPC è una funzionalità Google Cloud che ti consente di configurare un perimetro sicuro per proteggerti dall'esfiltrazione di dati. Per determinare se un errore è correlato ai Controlli di servizio VPC, verifica se hai abilitato i Controlli di servizio VPC e se li hai applicati ai progetti e ai servizi che stai tentando di utilizzare. Per verificare se i progetti e i servizi sono protetti dai Controlli di servizio VPC, controlla la policy dei Controlli di servizio VPC a quel livello della gerarchia delle risorse.

    Per comprendere l'ambito di un problema, puoi recuperare gli errori dei Controlli di servizio VPC dagli audit log.

    1. Nella console Google Cloud , vai alla pagina Esplora log:

      Vai a Esplora log

      Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

    2. Esegui query sugli audit log in base ai seguenti criteri:

      severity="ERROR" AND protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"

      In particolare, i messaggi di errore potrebbero includere il seguente testo:

      • Request is prohibited by organization's policy
      • Request violates VPC Service Controls

    Per saperne di più sui problemi che potresti riscontrare durante la configurazione dei Controlli di servizio VPC, consulta Risolvere i problemi comuni.

  • Verifica eventuali endpoint privati: Cloud Scheduler può richiamare solo determinati endpoint privati come Cloud Run, Cloud Run Functions e API Google Cloud all'interno di un perimetro di Controlli di servizio VPC. Controlla le impostazioni di traffico in entrata per il servizio di destinazione, ad esempio consulta Limitare il traffico in entrata di rete per Cloud Run e le autorizzazioni daccount di serviziount collegato. Potresti ricevere un messaggio di errore URL_ERROR-ERROR_DNS. Per saperne di più, consulta Il job non va a buon fine a causa del target di destinazione non raggiungibile in questo documento.

Il job non riesce a causa di una destinazione di destinazione non raggiungibile

Questo problema si verifica quando il job Cloud Scheduler non va a buon fine perché la destinazione di destinazione non è raggiungibile. I log di esecuzione mostrano gli errori che iniziano con URL_ERROR o URL_UNREACHABLE.

Per risolvere il problema, a seconda del messaggio di errore ricevuto, completa uno dei seguenti controlli:

  • URL_ERROR-ERROR_AUTHENTICATION: viene restituito un errore HTTP 401 (Unauthorized) o HTTP 407 (Proxy Authentication Required). La destinazione richiede l'autenticazione, ma la richiesta di Cloud Scheduler non include un token di autenticazione valido. Ad esempio, nella richiesta manca un'intestazione di autorizzazione o le credenziali non sono valide. Controlla le impostazioni di autenticazione del job. Per saperne di più, consulta Autenticarsi in Cloud Scheduler e Utilizzare l'autenticazione con i target HTTP.

  • URL_ERROR-ERROR_DNS: indica che il recupero di un URL non è riuscito perché non è stato possibile risolvere il nome host utilizzando il Domain Name System (DNS). Ad esempio, il nome host non esiste o non ha un indirizzo IP associato. Il messaggio di errore potrebbe includere il testo Original HTTP response code number = 0. Controlla la validità del nome host e, quando richiami un endpoint privato, assicurati che sia supportato da Cloud Scheduler e controlla le impostazioni di ingresso.

  • URL_ERROR-ERROR_NOT_FOUND: il server web restituisce un errore HTTP 404 Not Found. Verifica che l'URL di destinazione sia corretto e che la risorsa esista.

  • URL_ERROR-ERROR_OTHER: si riferisce a un errore HTTP 4xx generico non descritto in precedenza. Controlla i log per recuperare il codice di risposta HTTP originale. Se ricevi un errore HTTP 403, in questo documento consulta la sezione Il job non riesce a causa di un errore di autorizzazione.

  • URL_UNREACHABLE-UNREACHABLE_5xx: la destinazione di destinazione restituisce un errore HTTP 5xx o 429. Potrebbe trattarsi di una condizione temporanea, ad esempio un server sovraccarico. Controlla i log della destinazione di destinazione per eseguire il debug del problema.

  • URL_UNREACHABLE-UNREACHABLE_CONNECTION_RESET: La connessione è stata reimpostata dal peer. Verifica la presenza di un problema sul lato server esterno.

  • URL_UNREACHABLE-UNREACHABLE_ERROR: indica un errore di rete. Verifica se l'URL di destinazione è corretto e se esistono regole firewall che bloccano l'accesso.

Problemi di esecuzione del job

I job Cloud Scheduler vengono eseguiti a orari definiti o a intervalli regolari. Durante l'esecuzione di un job potrebbero verificarsi i seguenti problemi.

Un job che funzionava in precedenza smette di essere eseguito

Questo problema si verifica quando un job Cloud Scheduler precedentemente eseguito correttamente smette di essere eseguito perché l'API Cloud Scheduler è disabilitata. Puoi confermare l'ora in cui l'API è stata disattivata eseguendo una query nei log di controllo per i seguenti criteri:

resource.type="audited_resource" AND
protoPayload.serviceName="cloudscheduler.googleapis.com" AND
operation.producer="serviceusage.googleapis.com" AND
protoPayload.authorizationInfo.permission="serviceusage.services.disable"

Per risolvere questo problema, abilita l'API Cloud Scheduler.

Le esecuzioni successive del job non vengono avviate

Questo problema si verifica quando un job è ancora in esecuzione o in attesa di una risposta dalla relativa destinazione. Le altre esecuzioni pianificate del job vengono saltate fino al termine o al timeout dell'esecuzione corrente.

Nelle voci di logging, individua l'ultima voce type.googleapis.com/google.cloud.scheduler.logging.AttemptStarted e la voce type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished corrispondente. Se la voce AttemptFinished non è presente o viene visualizzata dopo la successiva esecuzione pianificata del job, le altre esecuzioni in attesa vengono bloccate e non vengono avviate. A seconda della pianificazione del job, ciò può impedire l'avvio di più esecuzioni del job. Per ulteriori indagini, verifica il timeout della destinazione del job e se questa destinazione ha riscontrato problemi.

Tieni presente che in qualsiasi momento deve essere eseguita una sola istanza di un job. In rari casi, è possibile richiedere più istanze dello stesso job. Di conseguenza, il gestore delle richieste deve essere idempotente e il codice deve garantire che non si verifichino effetti collaterali dannosi.

L'esecuzione di un job diventa irregolare a causa dell'ora legale

Quando crei un job Cloud Scheduler utilizzando la console Google Cloud , devi specificare un fuso orario. Quando utilizzi Google Cloud CLI, puoi specificare facoltativamente un fuso orario utilizzando il flag --time-zone; in caso contrario, il fuso orario predefinito utilizzato è il tempo universale coordinato o UTC.

Questo problema si verifica quando un job è configurato con un fuso orario non UTC e la sua esecuzione diventa irregolare a causa delle modifiche all'ora legale. Questo è un comportamento previsto.

Se il tuo job richiede una cadenza molto precisa, devi scegliere un fuso orario che non osservi l'ora legale. Nello specifico, per evitare del tutto il problema, configura la pianificazione del job in modo che utilizzi il fuso orario UTC.

Per saperne di più, consulta Formato e fuso orario del cron job.

Passaggi successivi

Se non riesci a trovare una soluzione al tuo problema nella documentazione di Cloud Scheduler, valuta le seguenti opzioni:

Per ulteriori informazioni, consulta la pagina Assistenza Cloud Scheduler.