以编程方式获取函数应用程序运行的实例数量

Mik*_*kov 5 azure azure-functions azure-sdk

我正在消耗计划上运行 Azure Function 应用程序,并且我想监视当前运行的实例数量。使用格式的 REST API 端点

https://management.azure.com/subscriptions/{subscr}/resourceGroups/{rg}
       /providers/Microsoft.Web/sites/{appname}/instances?api-version=2015-08-01
Run Code Online (Sandbox Code Playgroud)

我能够检索实例。但是,结果与我在 Application Insights/Live Metrics Stream 中看到的信息不匹配。

例如,现在 App Insights 显示有 4 台服务器在线,而 API 调用仅返回一台(这 1 个实例的 GUID 也在 App Insights guid 中)。

我可以信任谁?有没有更好的方法来获取实例计数(例如从 App Insights)?

更新:看起来 REST API 的数据是错误的。

我向队列发送了 10000 条消息,并使用处理请求的相应实例 ID 记录每个函数调用。

虽然消息不断传入且积压工作不断增长,但 REST API 的实例计数似乎是正确的(从 1 缩放到 12)。发送停止后,报告的实例计数迅速下降(最终回到 1,而处理器仍然繁忙)。

但根据速度和执行日志,我可以看出实际实例数不断增长,在处理最后一条消息时最终达到 15 个实例。

UPDATE2:看起来 SDK 拒绝报告超过 20 个服务器。该指标稳定在 20,而 App Insights 保持稳定增长,目前已达到 41。

Tom*_*SFT 1

\n

我可以信任谁?有没有更好的方法来获取实例计数(例如从 App Insights)?

\n
\n\n

根据我的理解,我们需要使用Rest API端点来检索实例,App Insights可以配置为多个WebApp,因此App Insights中在线的服务器数量可能是针对多个WebApp的。

\n\n

更新:

\n\n

根据我的测试,应用程序洞察的数量可能不是实时的

\n\n

在我的测试过程中,如果 WebApp 功能横向扩展,那么我可以使用 Rest API 获得多个实例,并且我还可以在 App Insights 中检查在线服务器的数量。

\n\n
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourcegroup}/providers/Microsoft.Web/sites/{functionname}/instances?api-version=2016-08-01\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我完成测试后,我可以得到 Rest API 的实例数量是1,根据我的理解,这是正确的结果。 \n同时我在 Application Insight 中检查在线服务器的数量是我测试期间的最大数量

\n\n

而过了一段时间,应用洞察中的服务器在线数量也变成了1

\n\n

因此,如果我们想获取Azure函数的实例数,我的建议是使用REST API来做到这一点。

\n\n

更新2\xef\xbc\x9a

\n\n

据 DavidEbbo 提到,REST API 并不总是可靠的

\n\n
\n

不幸的是,REST API 并不总是可靠的。具体来说,当 Function App 跨多个缩放单位进行缩放时,仅反映“主”缩放单位中的实例。您可能不会在小型测试中看到这一点,但如果您开始广泛扩展(例如超过 20 个实例),则可能会看到这一点。

\n
\n