2017-02-22 35 views
1

Как показано в моем вопросе переполнения стека Azure webjob not appearing to respect MaxDequeueCount property, я искал проблему, несмотря на то, что, несмотря на то, что моя настройка свойства MaxDequeueCount равнялась 1, некоторые элементы отбрасываются многими раз, пока они не отравлены (на самом деле некоторые предметы никогда не могут быть отравлены вообще и просто деактивируются, терпят неудачу, а затем повторяются и терпят неудачу).Журналы Azure webjob - поиск журналов, которые подробно описывают обработку SDK для элементов с запущенной очередью

Webjobs SDK автоматически обрабатывает повторные попытки и отравления сообщений с запуском очереди, и я ищу журналы, содержащие данные об этой обработке.

Например, я вижу, что моя функция обнаружила новый элемент очереди, просмотрев журнал webjob через SCM по адресу https://myappengine.scm.azurewebsites.net/vfs/data/jobs/continuous/StuffProcessor/job_log.txt (кстати, если я включил подробное ведение журнала в Azure storage в веб-приложении, я могу получить эта же информация в Blob?).

[02/22/2017 01:47:22 > ec8d0f: INFO] Executing: 'StuffProcessor.ProcessQueueMessage' - Reason: 'New queue message detected on 'stuff-processor'.' 
[02/22/2017 01:47:26 > ec8d0f: INFO] Executed: 'StuffProcessor.ProcessQueueMessage' (Succeeded) 
[02/22/2017 01:47:26 > ec8d0f: INFO] Executing: 'StuffProcessor.ProcessQueueMessage' - Reason: 'New queue message detected on 'stuff-processor'.' 

Я также могу получить некоторую информацию о DEQUEUE сосчитать элемента, просматривая журналы в azure-jobs-host-archive контейнере, если включен подробное протоколирование в хранилище Azure на веб-приложение:

{ 
     "Type": "FunctionCompleted", 
     "EndTime": "2017-02-22T00:07:40.8133081+00:00", 
     "Failure": { 
     "ExceptionType": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException", 
     "ExceptionDetails": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: ItemProcessor.ProcessQueueMessage ---> MyApp.Exceptions.MySpecialAppExceptionType: Exception of type 'MyApp.Exceptions.MySpecialAppExceptionType' was thrown. 
     }, 
     "ParameterLogs": {}, 
     "FunctionInstanceId": "1ffac7b0-1290-4343-8ee1-2af0d39ae2c9", 
     "Function": { 
     "Id": "MyApp.Processors.ItemProcessor.ProcessQueueMessage", 
     "FullName": "MyApp.Processors.ItemProcessor.ProcessQueueMessage", 
     "ShortName": "ItemProcessor.ProcessQueueMessage", 
     "Parameters": [ 
      { 
      "Type": "QueueTrigger", 
      "AccountName": "MyStorageAccount", 
      "QueueName": "stuff-processor", 
      "Name": "sourceFeedItemQueueItem" 
      }, 
      { 
      "Type": "BindingData", 
      "Name": "dequeueCount" 
      }, 
      { 
      "Type": "ParameterDescriptor", 
      "Name": "logger" 
      } 
     ] 
     }, 
     "Arguments": { 
     "sourceFeedItemQueueItem": "{\"SourceFeedUpdateID\":437530,\"PodcastFeedID\":\"2d48D2sf2\"}", 
     "dequeueCount": "96", 
     "logger": null 
     }, 
     "Reason": "AutomaticTrigger", 
     "ReasonDetails": "New queue message detected on 'stuff-processor'.", 
     "StartTime": "2017-02-22T00:07:40.6017341+00:00", 
     "OutputBlob": { 
     "ContainerName": "azure-webjobs-hosts", 
     "BlobName": "output-logs/1ffd3c7b012c043438ed12af0d39ae2c9.txt" 
     }, 
     "ParameterLogBlob": { 
     "ContainerName": "azure-webjobs-hosts", 
     "BlobName": "output-logs/1cf2c1b012sa0d3438ee12daf0d39ae2c9.params.txt" 
     }, 
     "LogLevel": "Info", 
     "HostInstanceId": "d1825bdb-d92a-4657-81a4-36253e01ea5e", 
     "HostDisplayName": "ItemProcessor", 
     "SharedQueueName": "azure-webjobs-host-490daea03c70316f8aa2509438afe8ef", 
     "InstanceQueueName": "azure-webjobs-host-d18252sdbd92a4657d1a436253e01ea5e", 
     "Heartbeat": { 
     "SharedContainerName": "azure-webjobs-hosts", 
     "SharedDirectoryName": "heartbeats/490baea03cfdfd0416f8aa25aqr438afe8ef", 
     "InstanceBlobName": "zd1825bdbdsdgga465781a436q53e01ea5e", 
     "ExpirationInSeconds": 45 
     }, 
     "WebJobRunIdentifier": { 
     "WebSiteName": "myappengine", 
     "JobType": "Continuous", 
     "JobName": "ItemProcessor", 
     "RunId": "" 
     } 
    } 

Я не могут найти, но являются журналами, которые показывают детали для конкретного элемента очереди, где обработка завершается сбоем из-за исключения и помещается в очередь ядов. Я ищу их, пытаясь продолжить устранение явного игнорирования свойства MaxDequeueCount. Это зарегистрировано?

UPDATE: Я нашел пост Azure WebJobs with Storage Queue and Exceptions и содержал следующий скриншот:

Webjob console

Этот скриншот показывает стандарт «обнаруженную Новое сообщение очереди ...» сообщения (которые я вижу, как на Azure и выполняется локально в эмуляторе), а также показывает: «Сообщение достигло MaxDequeueCount X ... Перемещение сообщения в очередь« xyz-poison »», которое только отображается локально в эмуляторе. По какой-то причине не работает ли среда выполнения на основе Azure? Я никогда не вижу подобных сообщений, связанных с отравлением, при запуске локально в консольном окне или на панели инструментов webjobs или при запуске на Azure.

ответ

0

В вашем предыдущем посте, вы имеете сработавшей функцию следующим образом

public void ProcessQueueMessage([QueueTrigger("azurewejobtestingqueue")] string item, TextWriter logger) 
{ 
    if (item == "exception") 
    { 
     throw new Exception(); 
    } 
} 

Все, что вы пишете на регистратор должен появиться в журналах на приборной панели WebJobs. Мои предложения являются:

  1. Изменить 'если (пункт == "исключение")' на 'если (item.ToLower() StartsWith ("исключение").' Затем добавить номер к сообщению исключения, когда. Тестирование. Загрузите текст сообщения очереди в TextWriter, чтобы быть уверенным, что вы смотрите на то же сообщение, которое, по вашему мнению, вы проверяете.

  2. Вы можете получить значение декомпрессии сообщения как параметр функции См. here. Посмотрите способ FailAlways в этом примере. Зарегистрируйтесь также в TextWriter.

  3. Попробуйте runnin g это локально. Все выходные данные будут записаны в окно консоли. Посмотрите, получилось ли у вас такое же поведение.

Мне действительно интересно узнать, что вызывает подобное поведение, поэтому убедитесь, что вы сообщите нам, если вы его взломали!

+0

Тем не менее пытается получить это работает локально - Я думал, что ваше предложение было хорошо. У меня нет проблем с отправкой всего на регистратор - я сейчас это делаю. Я ищу, чтобы увидеть, что делает SDK - для устранения неполадок, которые я хочу увидеть, когда SDK пытается отравить (или не) сообщение. Мой 'if (item ==" exception ")' был просто псевдокодом, а не буквальным кодом. Это просто означало обращение к элементу в очереди, который вызвал бы исключение. В настоящее время я получаю параметр dequeueCount элемента как параметр (я добавил его), и я могу видеть в своих журналах dequeueCounts для некоторых предметов, которые будут выше и выше. – Howiecamp

+0

Просто добавьте второй комментарий - у меня нет проблем с перехватом исключений - проблема в том, что я не вижу, почему sdk не отравляет сообщения после MaxDequeueCount количество раз. – Howiecamp

+0

При тестировании у вас есть один экземпляр, запущенный в Azure, и попадание в очередь хранения, которая также находится в Azure? –

1

Вы используете Azure Storage версии 8. *? Он содержит нарушение.

Когда объект сообщения очереди вставляется в очередь сообщений в Azure Storage 8, Идентификатор сообщения исходного объекта сообщения очереди перезаписывается уникальным идентификатором сообщения только что вставленного сообщения.

Это означает, что он теряет свою ссылку на ядовитое сообщение и больше не может его удалить.

https://github.com/Azure/azure-webjobs-sdk/issues/985

Что касается лесозаготовок, 2 варианта:

  1. Создайте свой собственный QueueProcessorFactory и QueueProcessor - вы можете переопределить метод, который обрабатывает сообщения отравленных производить больше продукции отладки. Там вы также можете исправить проблему, если хотите остаться на Azure Storage 8. *.

  2. Зарегистрируйте монитор следа. https://github.com/Azure/azure-webjobs-sdk-extensions/wiki/Error-Monitoring#tracemonitor

    var traceMonitor = new TraceMonitor() 
    .Filter(p => true, "Trace Handler") 
    .Subscribe(TraceHandler.Process); 
    
    config.Tracing.Tracers.Add(traceMonitor); 
    
+0

Bingo! Ты прибил его - это моя проблема. Тем временем я возвращаюсь к 7.x. Не для nitpick, но я не думаю, что это потрясающее изменение; Я думаю, что это ошибка. Нарушение изменений - это изменение поведения, которое не обратно совместимо с предыдущим кодом. Возможно, это правда, но это определенно кажется для меня «ошибкой» ...? – Howiecamp

+0

Что касается регистрации, можете ли вы прояснить, действительно ли я должен видеть, что сообщения очереди webjob вызывали сообщения о ядре в стандартном выпуске панели инструментов webjob при работе в Azure или нет? Как я уже говорил, я вижу их только на местах. – Howiecamp

+0

Я не думаю, что это ошибка. Это изменение имеет смысл для команды хранения. Это похоже на то, как объект ORM будет иметь поле идентификатора, заполненное после хранения его в БД с полем ИД, сгенерированным db. Не совсем уверен, что вы имеете в виду с протоколированием, но на выходе панели управления kudu (yoursite.scm.azurewebsites.net/azurejobs/#/jobs/continuous/YourWebJob). Я вижу запись для перемещения чего-то в очередь ядов: '[03/08/2017 00:39:46> 730f59: INFO] Сообщение достигло MaxDequeueCount of 2. Перемещение сообщения в очередь «queue-poison». – Bio2hazard

 Смежные вопросы

  • Нет связанных вопросов^_^