如何查询 Azure 应用服务中的性能指标?
How do I query an indicator of performance capability in an Azure App Service?
我有一些速度较慢的 运行ning 服务在做一些相当繁重的处理。这些进程 运行 在几个不同的地方,包括本地服务器和 Azure 中,并且都将它们的结果写入一个公共数据库。我想在数据库中存储一条与处理结果相关的注释,指示有关处理位置的性能的一些有用信息 运行。
我的本地服务器 运行 以下代码成功,这允许我记录 CPU 名称(例如:我的工作站使用以下代码记录 "AMD Ryzen 9 3900X 12-Core Processor",这是足以满足我们的需求):
public string GetCpu()
{
var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_Processor");
string results = "Unknown CPU";
foreach (var item in searcher.Get())
{
results = item["Name"].ToString();
}
return results;
}
如您所料,此代码在 Azure 中 运行 失败并出现权限错误。我可以在 Azure 中 运行 获取有用信息的其他内容是什么,即使不完全相同?我不需要 CPU 名称,只是一个有用的处理能力指标。如果记录了 "P1V1 App Hosting Plan" 之类的内容,那将足以满足我们的需求。我不确定是否有比这更能说明处理能力的东西,但我也愿意接受其他建议。考虑到正在进行的多租户设置,我怀疑在 Azure 中获得 CPU 模型甚至可能具有欺骗性。
有一个简单的方法来获取它,Azure 有一个名为 WEBSITE_SKU
的环境存储主机计划级别。您可以去您的 Kudu 页面查看环境。
您可以使用 Environment.GetEnvironmentVariable("WEBSITE_SKU")
来获取它。
以上示例将为所有级别的 Premium V2 配置输出 "PremiumV2"。这意味着它对 P1V2、P2V2 和 P3V2 具有相同的输出,即使每个 ACU 的数量都是前一个的两倍。幸运的是,其中 there are a number of other environment variables with useful information 可以让我们获得更多信息。有了这些额外的信息,一个以在本地和 Azure 应用服务中都有效的方式收集信息的函数示例可能如下所示:
public string GetComputationalResources()
{
string results = null;
try
{
var azureSku = Environment.GetEnvironmentVariable("WEBSITE_SKU");
if (!string.IsNullOrWhiteSpace(azureSku))
{
// We're in Azure. Get more information!
var cpuCount = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS")?.Trim();
var cpuId = Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER")?.Trim();
var computeMode = Environment.GetEnvironmentVariable("WEBSITE_COMPUTE_MODE")?.Trim();
var websiteMode = Environment.GetEnvironmentVariable("WEBSITE_SITE_MODE")?.Trim();
results = $"{azureSku} {computeMode} {websiteMode} | {cpuCount}x {cpuId}";
}
}
catch
{
results = null;
}
if (results == null)
{
try
{
using (var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_Processor"))
{
foreach (var item in searcher.Get())
{
results = item["Name"].ToString().Trim();
}
}
}
catch
{
results = "Unknown CPU";
}
}
return results;
}
示例输出(据我所知,在 Azure 中有可能获得 AMD 而不仅仅是 Intel):
- 内部部署:
AMD Ryzen 9 3900X 12-Core Processor
- P1V2:
PremiumV2 Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P2V2:
PremiumV2 Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P3V2:
PremiumV2 Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P1:
Premium Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P2:
Premium Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P3:
Premium Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- S1:
Standard Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- S2:
Standard Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- S3:
Standard Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
我有一些速度较慢的 运行ning 服务在做一些相当繁重的处理。这些进程 运行 在几个不同的地方,包括本地服务器和 Azure 中,并且都将它们的结果写入一个公共数据库。我想在数据库中存储一条与处理结果相关的注释,指示有关处理位置的性能的一些有用信息 运行。
我的本地服务器 运行 以下代码成功,这允许我记录 CPU 名称(例如:我的工作站使用以下代码记录 "AMD Ryzen 9 3900X 12-Core Processor",这是足以满足我们的需求):
public string GetCpu()
{
var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_Processor");
string results = "Unknown CPU";
foreach (var item in searcher.Get())
{
results = item["Name"].ToString();
}
return results;
}
如您所料,此代码在 Azure 中 运行 失败并出现权限错误。我可以在 Azure 中 运行 获取有用信息的其他内容是什么,即使不完全相同?我不需要 CPU 名称,只是一个有用的处理能力指标。如果记录了 "P1V1 App Hosting Plan" 之类的内容,那将足以满足我们的需求。我不确定是否有比这更能说明处理能力的东西,但我也愿意接受其他建议。考虑到正在进行的多租户设置,我怀疑在 Azure 中获得 CPU 模型甚至可能具有欺骗性。
有一个简单的方法来获取它,Azure 有一个名为 WEBSITE_SKU
的环境存储主机计划级别。您可以去您的 Kudu 页面查看环境。
您可以使用 Environment.GetEnvironmentVariable("WEBSITE_SKU")
来获取它。
以上示例将为所有级别的 Premium V2 配置输出 "PremiumV2"。这意味着它对 P1V2、P2V2 和 P3V2 具有相同的输出,即使每个 ACU 的数量都是前一个的两倍。幸运的是,其中 there are a number of other environment variables with useful information 可以让我们获得更多信息。有了这些额外的信息,一个以在本地和 Azure 应用服务中都有效的方式收集信息的函数示例可能如下所示:
public string GetComputationalResources()
{
string results = null;
try
{
var azureSku = Environment.GetEnvironmentVariable("WEBSITE_SKU");
if (!string.IsNullOrWhiteSpace(azureSku))
{
// We're in Azure. Get more information!
var cpuCount = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS")?.Trim();
var cpuId = Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER")?.Trim();
var computeMode = Environment.GetEnvironmentVariable("WEBSITE_COMPUTE_MODE")?.Trim();
var websiteMode = Environment.GetEnvironmentVariable("WEBSITE_SITE_MODE")?.Trim();
results = $"{azureSku} {computeMode} {websiteMode} | {cpuCount}x {cpuId}";
}
}
catch
{
results = null;
}
if (results == null)
{
try
{
using (var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_Processor"))
{
foreach (var item in searcher.Get())
{
results = item["Name"].ToString().Trim();
}
}
}
catch
{
results = "Unknown CPU";
}
}
return results;
}
示例输出(据我所知,在 Azure 中有可能获得 AMD 而不仅仅是 Intel):
- 内部部署:
AMD Ryzen 9 3900X 12-Core Processor
- P1V2:
PremiumV2 Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P2V2:
PremiumV2 Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P3V2:
PremiumV2 Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P1:
Premium Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P2:
Premium Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- P3:
Premium Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- S1:
Standard Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- S2:
Standard Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
- S3:
Standard Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel