Программно получить количество экземпляров, запущенных для приложения-функции

Я запускаю приложение-функцию Azure в соответствии с планом потребления и хочу отслеживать количество запущенных в данный момент экземпляров. Использование конечной точки формата REST API

https://management.azure.com/subscriptions/{subscr}/resourceGroups/{rg}
       /providers/Microsoft.Web/sites/{appname}/instances?api-version=2015-08-01

Я могу получить экземпляры. Однако результат не соответствует информации, которую я вижу в Application Insights / Live Metrics Stream.

Например, прямо сейчас App Insights показывает 4 сервера в сети, в то время как вызов API возвращает только один (GUID этого 1 экземпляра также входит в состав руководств App Insights).

Кому я могу доверять? Есть ли лучший способ получить количество экземпляров (например, из App Insights)?

ОБНОВЛЕНИЕ: похоже, что данные из REST API неверны.

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

Хотя сообщения продолжают поступать, а количество невыполненных работ растет, количество экземпляров из REST API кажется правильным (масштабируется от 1 до 12). После остановки отправки сообщаемое количество экземпляров быстро уменьшается (в конечном итоге возвращается к 1, пока процессоры все еще заняты).

Но, основываясь на скорости и журналах выполнения, я могу сказать, что фактическое количество экземпляров продолжало расти и достигло 15 экземпляров на момент обработки последнего сообщения.

ОБНОВЛЕНИЕ 2: похоже, что SDK отказывается сообщать о более чем 20 серверах. Показатель составляет 20, в то время как App Insights продолжает стабильно расти и уже показывает 41.


person Mikhail Shilkov    schedule 30.07.2017    source источник
comment
Я тестирую с помощью теста производительности Azure (500 пользователей * 10 минут) для отправки HTTP-запроса, затем получаю тот же результат(instance count from REST API seems to be correct (scaled from 1 to 12). After sending stops, the reported instance count rapidly goes down (eventually back to 1, while processors are still busy), что и вы.   -  person Tom Sun - MSFT    schedule 01.08.2017


Ответы (1)


Кому я могу доверять? Есть ли лучший способ получить количество экземпляров (например, из App Insights)?

Насколько я понимаю, нам нужно использовать конечную точку Rest API для извлечения экземпляра, App Insights можно настроить для нескольких веб-приложений, поэтому количество серверов в сети в App Insights может быть для нескольких веб-приложений.

Обновлено:

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

Во время моего теста, если функция WebApp масштабируется, я могу получить несколько экземпляров с Rest API, а также могу проверить количество серверов в Интернете в App Insights.

https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.Web/sites/{functionname}/instances?api-version=2016-08-01

Но после того, как я закончил тест, я смог получить номер экземпляра с Rest API: 1, исходя из моего понимания, это правильный результат. В то же время я проверяю в Application Insight, что количество серверов в сети - это максимальное количество во время моего теста.

А через некоторое время количество серверов, подключенных к приложению, также стало 1.

Итак, если мы хотим получить количество значений для функции Azure, я предлагаю использовать для этого REST API.

Обновление2 :

По словам DavidEbbo, REST API не всегда надежен.

К сожалению, REST API не всегда надежен. В частности, когда приложение-функция масштабируется по нескольким единицам шкалы, отражаются только экземпляры из «домашней» единицы шкалы. Вы, вероятно, не увидите этого в небольшом тесте, но, скорее всего, увидите, если начнете широко масштабировать (скажем, более 20 экземпляров).

person Tom Sun - MSFT    schedule 31.07.2017
comment
Я настроил App Insights только для одного приложения - person Mikhail Shilkov; 31.07.2017
comment
Лучше всего в моем тесте я обнаружил, что номер сервера в сети в Application Insight может быть не в реальном времени, я обновил ответ. - person Tom Sun - MSFT; 31.07.2017
comment
У меня такое же наблюдение по поводу того, что экземпляры выходят из строя. Но на самом деле аналитика приложений показывает, что другие серверы все еще обрабатывают сообщения, и я действительно вижу скорость обработки сообщений, которая кажется выше, чем возможно, только по экземплярам, ​​полученным из REST API. Итак, мой вопрос. - person Mikhail Shilkov; 31.07.2017
comment
Итак, исходя из моих знаний, если мы хотим получить количество экземпляров для Azure Webapp, мы могли бы использовать rest api вместо анализа приложений. - person Tom Sun - MSFT; 31.07.2017
comment
К сожалению, REST API не всегда надежен. В частности, когда приложение-функция масштабируется по нескольким единицам шкалы, отражаются только экземпляры из «домашней» единицы шкалы. Вы, вероятно, не увидите этого в небольшом тесте, но, скорее всего, увидите, если начнете широко масштабировать (скажем, более 20 экземпляров). - person David Ebbo; 01.08.2017