Azure App Service:使用PerformanceCounters

时间:2016-07-15 10:07:02

标签: azure azure-web-app-service azure-performancecounters

我正在尝试设置我的Azure Web App以包含使用第三方软件,这似乎需要访问PerformanceCounters。本地工作正常,但是当我在Azure中运行它时,我收到以下错误:

[UnauthorizedAccessException: Access to the registry key 'Global' is denied.]
Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str) +5230217
Microsoft.Win32.RegistryKey.InternalGetValue(String name, Object defaultValue, Boolean doNotExpand, Boolean checkSecurity) +11769029
Microsoft.Win32.RegistryKey.GetValue(String name) +40
System.Diagnostics.PerformanceMonitor.GetData(String item) +102
System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item) +186
System.Diagnostics.PerformanceCounterLib.get_CategoryTable() +105
System.Diagnostics.PerformanceCounterLib.GetCategorySample(String category) +17
System.Diagnostics.PerformanceCounterLib.GetCategorySample(String machine, String category) +61
System.Diagnostics.PerformanceCounterCategory.GetCounterInstances(String categoryName, String machineName) +70
System.Diagnostics.PerformanceCounterCategory.GetInstanceNames() +25

根据this answer,我应该配置IIS以允许访问应用程序池/用户,但我认为Azure Web App不可能。有没有办法让性能计数器在我的情况下工作?

1 个答案:

答案 0 :(得分:1)

在Windows上,性能计数器可通过WMI访问:
https://msdn.microsoft.com/en-us/library/aa392397(v=vs.85).aspx

在App Service沙箱中限制了WMI 来自https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#access-to-out-of-process-com-servers

  

访问进程外COM服务器

     

Windows服务器配置了一堆COM服务器,默认情况下可供使用;但沙箱会阻止访问所有进程外的COM服务器。 例如,沙盒应用程序无法调用WMI或MSIServer。

来自Kudu:

PS D:\home> Get-Counter -Counter "\processor(_total)\% processor time"
Get-Counter : The specified object was not found on the computer.


PS D:\home> Get-WmiObject -Class WIN32_OperatingSystem
Get-WmiObject : Access is denied. (Exception from HRESULT: 0x80070005 
(E_ACCESSDENIED))

如果您必须使用第三方软件,请查看Azure云服务(具有Web角色)。您可以完全控制那里的操作系统,同时仍然是PaaS。