Поделиться через


Устранение неполадок с веб-хуками служб

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

В этой статье приведены общие рекомендации по устранению неполадок для перехватчиков служб Azure DevOps. Он также предоставляет ответы на часто задаваемые вопросы (ЧЗВ).

Просмотр активности и отладка проблем

Страница «Перехватчики служб» в администраторе веб-доступа суммирует активность за последние семь дней для каждой подписки. На странице также показано, включена ли каждая подписка, отключена или ограничена.

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

  1. Чтобы просмотреть действия и состояние подписок, перейдите на страницу «Сервисные веб-хуки».

    Скриншот страницы

  2. Чтобы просмотреть подробные действия для подписки, включая полный запрос, ответ и данные полезной нагрузки о событиях, выберите подписку в таблице, а затем выберите История.

    Снимок экрана: журнал подписки с подробными сведениями о событии сбоя, например состояние, сообщение и сообщение об ошибке.

Сбои подписки и испытательный срок (ограниченный)

Если http-ответ на запрос уведомления указывает на ошибку, серьезность сбоя определяет способ реагирования Azure DevOps. Некоторые типы сбоев могут отключать подписки или помещать их на проверку.

Типы сбоев

Сбои уведомлений о хуках служб группируются в следующие категории:

  • Сбои терминала
  • Временные сбои.
  • Непрекращающиеся сбои

Код ошибки из HTTP-ответа определяет, как Azure DevOps классифицирует сбой.

Сбои терминала

Единственным кодом состояния HTTP, классифицированным как сбой терминала, является 410 (Ушел).

При сбое терминала в подписке подписка автоматически отключается независимо от его предыдущего состояния.

Временные сбои.

HTTP-ответы со следующими кодами состояния классифицируются как временные сбои:

  • 408 (Истекло время ожидания запроса)
  • 502 (недопустимый шлюз)
  • 503 (служба недоступна)
  • 504 (время ожидания шлюза)

Когда временный сбой возникает в подписке, Azure DevOps пытается повторно отправить уведомление до восьми раз с увеличением задержки между каждой попыткой.

В следующей таблице перечислены сведения о попытках повторных попыток после временных сбоев. Включено приблизительное время ожидания или время ожидания перед попыткой повторной отправки уведомления. Максимальное время отката — 60 секунд. В таблице также показана общая задержка для каждой повторных попыток.

Число повторных попыток Время отката в секундах Общая задержка в секундах
1 1 1
2 2 3
3 4 7
4 8 15
5 16 31
6 32 63
7 шестьдесят 123
8 шестьдесят 183

Если все повторные попытки уведомления исчерпаны, и каждая попытка приводит к временному сбою, уведомление больше не отправляется. Вместо этого он классифицируется как постоянная неудача.

Продолжительные сбои

Все остальные коды сбоев HTTP, например 404 (не найдено) и 500 (внутренняя ошибка сервера), приводят к длительным сбоям.

Если в подписке возникает длительный сбой, подписка помещается на режим ожидания.

Испытательный срок

Если подписка находится на испытательном сроке, все новые события теряются. Система делает ограниченное количество попыток повторного отправки уведомления об ошибке.

В следующей таблице перечислены приблизительное время отката и общее время испытательного срока для повторных попыток во время испытания. Максимум семь повторных попыток предпринимается, а максимальное время ожидания для пробной повторной попытки составляет 15 часов.

Число повторных попыток Время отката Общее время испытательного срока в часах
1 20 минут. 0,33
2 40 минут 1
3 1 час 20 минут 2.33
4 2 часа 40 минут 5
5 5 часов 20 минут 10,33
6 10 часов 40 минут двадцать один
7 15 часов 36

Если подписка получает успешный ответ в течение пробного периода, она восстанавливается в полностью активированное состояние, и события публикуются снова. Если все семь повторных попыток завершаются ошибкой, состояние подписки получает значение DisabledBySystem.

Вопросы и ответы

Вопрос. Каково ограничение пейлоада для хука сервиса?

A: Ограничение размера данных составляет 2 МБ. Большие полезные нагрузки приводят к снижению производительности и надежности. Как наилучшая практика, служебные хуки должны ограничить объем полезной нагрузки до 2 МБ.

Вопрос. Что означает состояние включено (ограниченное) ?

A: Подписка становится ограниченной, если возникает слишком много сбоев. Состояние включено (ограниченное) аналогично нахождению на испытательном сроке.

Вопрос. Что означает состояние "Отключено" (из-за сбоев) ?

A: Подписка автоматически отключена в следующих случаях:

  • Возникает сбой терминала.
  • Ряд последовательных сбоев происходит в течение длительного периода.

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

В следующих кодах состояния приведены примеры каждого типа сбоя:

  • Преходящий: 408 (время ожидания запроса), 502 (ошибочный шлюз), 503 (служба недоступна), 504 (время ожидания шлюза)
  • Терминал: 410 (Ушел)
  • Прочные: все сбои, которые не являются временными или конечными

Вопрос: Что означает состояние "Отключено (пользователь покинул проект)"?

A: Пользователь, создавший подписку, больше не является членом команды.

Вопрос: Что попробовать, если хук службы не работает?

A: Проверьте следующие элементы:

  • Проверьте, включена ли подписка.
  • Убедитесь, что параметры подписки верны. Проверьте фильтры событий и действия.
  • Обратите внимание на историю, особенно, если есть сбои.

Вопрос: Можно ли предоставить обычному пользователю возможность просматривать и управлять подписками на хуки сервиса?

A: По умолчанию только администраторы проектов имеют эти разрешения. Чтобы предоставить их другим пользователям напрямую, можно использовать программу командной строки или REST API безопасности .

Вопрос. Можно ли программно создавать подписки?

A: Да, используйте REST API.