如何在 ASP.NET 核心中获取 cpu/memory/network 使用百分比来进行节流?
How to get cpu/memory/network usage percentage in ASP.NET Core to do throttling?
我的 web 应用程序部署在 azure 中,它是在 Asp.Net Core 中实现的。我想根据 cpu/memory/network 使用百分比限制请求。例如,当 cpu 使用率高于 90% 时,限制组件将限制 50% 的请求。
最大的问题是:
- 如何在 ASP.NET 核心中获得 cpu/memory/network 使用百分比?
据我所知,azure WebApp 是 sandbox,我们没有足够的权限访问 Azure Web 应用程序的工作服务器的指标。
The user account must either be a member of the Administrators group or a member of the Performance Monitor Users group in Windows.
这是一个变通方法,我们可以启用 Application Insight 来执行此操作。我们需要为 Azure WebApp 配置 Application Insight。详情可以参考这个doc.
我们可以使用 Application Insight rest api 来获取当前 Web 应用程序的指标,例如进程 cpu 使用情况。 API Document.
我们可以在 Application Insight 门户中获取应用程序 ID 和 api 密钥,如下图所示:
详情可以参考这个article.
然后您可以使用以下代码向 Application Insight API 发送请求以获取当前 CPU 使用情况。
public static string GetTelemetry(string appid, string apikey)
{
string Url = "https://api.applicationinsights.io/v1/apps/{0}/metrics/performanceCounters/processCpuPercentage";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("x-api-key", apikey);
var req = string.Format(Url, appid);
HttpResponseMessage response = client.GetAsync(req).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsStringAsync().Result;
}
else
{
return response.ReasonPhrase;
}
}
结果:
我的 web 应用程序部署在 azure 中,它是在 Asp.Net Core 中实现的。我想根据 cpu/memory/network 使用百分比限制请求。例如,当 cpu 使用率高于 90% 时,限制组件将限制 50% 的请求。
最大的问题是:
- 如何在 ASP.NET 核心中获得 cpu/memory/network 使用百分比?
据我所知,azure WebApp 是 sandbox,我们没有足够的权限访问 Azure Web 应用程序的工作服务器的指标。
The user account must either be a member of the Administrators group or a member of the Performance Monitor Users group in Windows.
这是一个变通方法,我们可以启用 Application Insight 来执行此操作。我们需要为 Azure WebApp 配置 Application Insight。详情可以参考这个doc.
我们可以使用 Application Insight rest api 来获取当前 Web 应用程序的指标,例如进程 cpu 使用情况。 API Document.
我们可以在 Application Insight 门户中获取应用程序 ID 和 api 密钥,如下图所示:
详情可以参考这个article.
然后您可以使用以下代码向 Application Insight API 发送请求以获取当前 CPU 使用情况。
public static string GetTelemetry(string appid, string apikey)
{
string Url = "https://api.applicationinsights.io/v1/apps/{0}/metrics/performanceCounters/processCpuPercentage";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("x-api-key", apikey);
var req = string.Format(Url, appid);
HttpResponseMessage response = client.GetAsync(req).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsStringAsync().Result;
}
else
{
return response.ReasonPhrase;
}
}
结果: