Google Cloud Scheduler вызывает функцию Google Cloud, когда функция выполнена успешно (возвращено 200 статусов), все еще получает статус 500 - PullRequest
1 голос
/ 04 февраля 2020

У меня есть задание планировщика, которое вызывает мою функцию один раз в час. Функция работает без проблем и каждый раз возвращает статус HTTP 200. Однако каждые 3-5 вызовов задание планировщика возвращает статус HTTP 500. Что является причиной / исправлением этой проблемы?

Пример: вот что показывают журналы функций:

D 2020-02-03T10:02:10.958520185Z Function execution took 130785 ms, finished with status code: 200 
D 2020-02-03T11:01:40.819608573Z Function execution took 99762 ms, finished with status code: 200 
D 2020-02-03T12:01:41.049430737Z Function execution took 100126 ms, finished with status code: 200 
D 2020-02-03T13:02:07.369401657Z Function execution took 127213 ms, finished with status code: 200 
D 2020-02-03T14:04:24.352839424Z Function execution took 263896 ms, finished with status code: 200 
D 2020-02-03T15:03:14.664760657Z Function execution took 194125 ms, finished with status code: 200 
D 2020-02-03T16:06:23.162542969Z Function execution took 382609 ms, finished with status code: 200 
D 2020-02-03T17:03:17.458640891Z Function execution took 196799 ms, finished with status code: 200 
D 2020-02-03T18:02:54.614556691Z Function execution took 170119 ms, finished with status code: 200 
D 2020-02-03T19:04:43.064083790Z Function execution took 277775 ms, finished with status code: 200 
D 2020-02-03T20:02:59.315497864Z Function execution took 178499 ms, finished with status code: 200 

И это примеры из журналов из планировщика

2020-02-03 11:03:00.567 CST
{"jobName":"projects/my-project/locations/us-west2/jobs/my-function-trigger","targetType":"HTTP","url":"https://us-central1-my-function.cloudfunctions.net/analytics-archiver","status":"UNKNOWN","@type":"type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"}
{
 httpRequest: {
 }
 insertId: "redacted"  
 jsonPayload: {
  @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"   
  jobName: "projects/my-project/locations/us-west2/jobs/my-function-trigger"   
  status: "UNKNOWN"   
  targetType: "HTTP"   
  url: "https://us-central1-my-project.cloudfunctions.net/my-function"   
 }
 logName: "projects/my-project/logs/cloudscheduler.googleapis.com%2Fexecutions"  
 receiveTimestamp: "2020-02-03T17:03:00.567786781Z"  
 resource: {
  labels: {
   job_id: "my-function-trigger"    
   location: "us-west2"    
   project_id: "my-function"    
  }
  type: "cloud_scheduler_job"   
 }
 severity: "ERROR"  
 timestamp: "2020-02-03T17:03:00.567786781Z"  
}


2020-02-03 13:03:00.765 CST
{"jobName":"projects/my-project/locations/us-west2/jobs/my-function-trigger","targetType":"HTTP","url":"https://us-central1-my-project.cloudfunctions.net/my-function","status":"UNKNOWN","@type":"type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"}
Expand all | Collapse all{
 httpRequest: {
 }
 insertId: "redacted"  
 jsonPayload: {
  @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"   
  jobName: "projects/my-project/locations/us-west2/jobs/my-function-trigger"   
  status: "UNKNOWN"   
  targetType: "HTTP"   
  url: "https://us-central1-my-project.cloudfunctions.net/my-function"   
 }
 logName: "projects/my-project/logs/cloudscheduler.googleapis.com%2Fexecutions"  
 receiveTimestamp: "2020-02-03T19:03:00.765993324Z"  
 resource: {
  labels: {
   job_id: "my-function-trigger"    
   location: "us-west2"    
   project_id: "my-project"    
  }
  type: "cloud_scheduler_job"   
 }
 severity: "ERROR"  
 timestamp: "2020-02-03T19:03:00.765993324Z"  
}

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Учитывая время, которое занимают эти запросы, кажется, что это вызывает тайм-аут в Google Scheduler, что в итоге приводит к сбою некоторых вызовов.

Согласно документации cron.yaml Reference , вы можете настроить там максимальное время, которое ваш планировщик займет до истечения времени ожидания. Я бы порекомендовал вам взглянуть на него и подтвердить, как он настроен, и попытаться сохранить ваши вызовы в течение времени, установленного в вашем файле cron.yaml.

Дайте мне знать, разъяснила ли эта информация и помогла ли вам!

0 голосов
/ 05 марта 2020

У меня была точно такая же проблема. Хотя вы еще не видите его в консоли, у Google Cloud Scheduler есть некоторые флаги, которые вы можете установить с помощью команды gcloud scheduler jobs create http. Вот пример, который я использую:

gcloud scheduler jobs create http my-job \
  --schedule="0 * * * *" \
  --uri=https://europe-west1-${PROJECT_ID}.cloudfunctions.net/my-func/ \
  --http-method=POST \
  --message-body="my-body" \
  --max-retry-attempts 3 \
  --max-backoff 10s \
  --attempt-deadline 10m

Особенно важен крайний срок попытки при запуске функций, которые длятся минуты, а не несколько секунд. Установка этих флагов смягчает некоторые проблемы для меня, но не все. Для дополнительных флагов я отсылаю вас к документации .

Кроме того, если это не помогает, возможно, это ошибка на стороне сервера где-то под капотом Google. Это связано с НЕИЗВЕСТНЫМ состоянием ошибки, которое вы можете посмотреть в этой таблице . Я получил статус ВНУТРЕННЕЙ ошибки, которая также называется ошибкой на стороне сервера. Не особенно полезно для Google ..

...