Azure - Как я могу прочитать процессор и память моего веб-приложения?

Я пытаюсь прочитать использование процессора и памяти для моего приложения, используя PerformanceCounters, код:

PerformanceCounter cpuCounter;

cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";

var result = cpuCounter.NextValue();//ERROR HERE

Я получаю несанкционированное исключение. Как я могу обойти это?

Изменить 1:
Я попытался установить текущее имя экземпляра для количества процессоров и памяти без удачи...

Изменить 2:
исключение .ToString() является

System.UnauthorizedAccessException: доступ к разделу реестра "Global" запрещен. в Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str) в Microsoft.Win32.RegistryKey.InternalGetValue(строковое имя, Object defaultValue, логическое значение doNotExpand, логическое checkSecurity) в Microsoft.Win32.RegistryKey.Getal).Diagnostics. в System.Diagnostics.PerformanceCounterLib.CounterExists(Строковый компьютер, Строковая категория, Счетчик строк) в System.Diagnostics.PerformanceCounter.InitializeImpl() в System.Diagnostics.PerformanceCounter.Initialize() в System.Diagnostics.PerformanceC.Diagnostics.PerformanceCounter.NextValue () в StudioTech.Web.Infrastructure.CustomMachineMonitoring.<> C__DisplayClass0_0. d.MoveNext () в C:\MMT\One\StudioTech.Web\Infrastructure\CustomMachineMonitoring.cs: строка 33

1 ответ

Решение

Согласно информации об исключении, это означает, что у нас нет доступа к системному монитору. Поскольку WebApp - это песочница, если мы используем Azure WebApp, у нас нет доступа для этого.

Учетная запись пользователя должна входить в группу " Администраторы" или в группу " Пользователи системного монитора" в Windows.

Я предлагаю, чтобы мы могли использовать Application Insight для этого. Нам нужно настроить Application Insight для WebApp, более подробную информацию см. В документе. О счетчиках производительности в Application Insight мы могли бы обратиться к этим учебным пособиям.

Если мы пытаемся использовать Application Insight API, нам нужно создать Apikey. Мы также могли бы получить демонстрационный код из документа. Это работает правильно для меня.

  static void Main(string[] args)
        {
            var applicationId = "xxxxxxxx";
            var applicationKey = "xxxxxxxx";
            var queryPath = "performanceCounters/processCpuPercentage";
            var queryType = "metrics";
            var str = GetTelemetry(applicationId, applicationKey, queryType, queryPath, "");


        }

 public static string GetTelemetry(string appid, string apikey,
            string queryType, string queryPath, string parameterString)
        {
            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, queryType, queryPath, parameterString);
            HttpResponseMessage response = client.GetAsync(req).Result;
            if (response.IsSuccessStatusCode)
            {
                return response.Content.ReadAsStringAsync().Result;
            }
            else
            {
                return response.ReasonPhrase;
            }
        }

Другие вопросы по тегам