- PVSM.RU - https://www.pvsm.ru -
Счетчики производительности можно использовать в приложении Windows Azure для сбора данных, позволяющих определять узкие места системы и настраивать производительность системы и приложений. Windows Azure предоставляет несколько счетчиков производительности, доступных для Windows Server 2008, IIS и ASP.NET. Список счетчиков производительности, которые можно использовать для приложений Windows Azure, см. в разделе «Общие сведения о создании и использовании счетчиков производительности в приложении Windows Azure» [2].
Для реализации этой задачи выполните следующие действия.
Для настройки сбора данных от счетчиков производительности в приложении Windows Azure используется метод GetDefaultInitialConfiguration [3], добавляется источник данных PerformanceCounters [4] с экземпляром PerformanceCounterConfiguration [5], а затем вызывается метод Start [6] с измененной конфигурацией. Чтобы собрать данные от счетчиков производительности, выполните следующие действия.
Откройте исходный файл для роли.
Примечание. Как правило, в следующих действиях код добавляется к методу OnStart роли.
Получите экземпляр конфигурации монитора диагностики. В следующем примере кода показано, как получить заданный по умолчанию объект конфигурации монитора диагностики.
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
Укажите отслеживаемые счетчики производительности. В следующем примере показан счетчик производительности, добавляемый в конфигурацию монитора диагностики.
config.PerformanceCounters.DataSources.Add(
new PerformanceCounterConfiguration())
{
CounterSpecifier = @"Processor(_Total)% Processor Time",
SampleRate = TimeSpan.FromSeconds(5)
});
Запустите монитор диагностики с измененной конфигурацией. В следующем примере кода показан запуск монитора.
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
Примечание. В этом примере кода показано использование строки подключения. Дополнительные сведения о строках подключения приведены в разделе «Настройка строк подключения» [7].
Сохраните и постройте проект, а затем разверните приложение.
После выполнения этих действий монитор диагностики Windows Azure начнет сбор данных от счетчиков производительности.
Новые настраиваемые счетчики производительности можно добавить из приложения в конфигурацию монитора диагностики. Для этого следует использовать настраиваемую категорию и имена счетчиков, чтобы создать экземпляры PerformanceCounterConfiguration [8] для каждого счетчика и добавить их в коллекцию источника данных PerformanceCounters [4] в DiagnosticMonitorConfiguration [9]. Чтобы создать настраиваемые счетчики производительности, выполните следующие действия.
Откройте файл определений службы (CSDEF) для приложения.
Добавьте элемент Runtime в элемент WebRole или WorkerRole, чтобы разрешить выполнение с более высоким уровнем привилегий.
<Runtime executionContext="elevated" />
Сохраните файл. Откройте исходный файл для роли. Если следующий оператор using отсутствует, добавьте его.
using System.Diagnostics;
Создайте настраиваемую категорию счетчика производительности в методе OnStart своей роли. В следующем примере показано, как создать настраиваемую категорию с двумя счетчиками (если она отсутствует).
if (!PerformanceCounterCategory.Exists("MyCustomCounterCategory"))
{
CounterCreationDataCollection counterCollection = new CounterCreationDataCollection();
// add a counter tracking user button1 clicks
CounterCreationData operationTotal1 = new CounterCreationData();
operationTotal1.CounterName = "MyButton1Counter";
operationTotal1.CounterHelp = "My Custom Counter for Button1";
operationTotal1.CounterType = PerformanceCounterType.NumberOfItems32;
counterCollection.Add(operationTotal1);
// add a counter tracking user button2 clicks
CounterCreationData operationTotal2 = new CounterCreationData();
operationTotal2.CounterName = "MyButton2Counter";
operationTotal2.CounterHelp = "My Custom Counter for Button2";
operationTotal2.CounterType = PerformanceCounterType.NumberOfItems32;
counterCollection.Add(operationTotal2);
PerformanceCounterCategory.Create(
"MyCustomCounterCategory",
"My Custom Counter Category",
PerformanceCounterCategoryType.SingleInstance, counterCollection);
Trace.WriteLine("Custom counter category created.");
}
else{
Trace.WriteLine("Custom counter category already exists.");
}
Добавьте новые настраиваемые счетчики производительности в конфигурацию монитора диагностики и запустите монитор диагностики в методе OnStart до вызова base.OnStart.
DiagnosticMonitorConfiguration config =
DiagnosticMonitor.GetDefaultInitialConfiguration();
config.PerformanceCounters.ScheduledTransferPeriod =
TimeSpan.FromMinutes(2D);
config.PerformanceCounters.BufferQuotaInMB = 512;
TimeSpan perfSampleRate = TimeSpan.FromSeconds(30D);
// Add configuration settings for custom performance counters.
config.PerformanceCounters.DataSources.Add(
new PerformanceCounterConfiguration()
{
CounterSpecifier = @"MyCustomCounterCategoryMyButton1Counter",
SampleRate = perfSampleRate
});
config.PerformanceCounters.DataSources.Add(
new PerformanceCounterConfiguration()
{
CounterSpecifier = @"MyCustomCounterCategoryMyButton2Counter",
SampleRate = perfSampleRate
});
// Apply the updated configuration to the diagnostic monitor.
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
Обновите счетчики в приложении. В следующем примере показано, как обновлять настраиваемый счетчик производительности в событиях Button1_Click.
protected void Button1_Click(object sender, EventArgs e)
{
button1Counter = new PerformanceCounter(
"MyCustomCounterCategory",
"MyButton1Counter",
string.Empty,
false);
button1Counter.Increment();
this.Button1.Text = "Button 1 count: " +
button1Counter.RawValue.ToString();
}
Сохраните и постройте проект, а затем разверните приложение.
После выполнения этих действий монитор диагностики Windows Azure начнет сбор данных от настраиваемых счетчиков производительности.
После того как будет выполнена настройка монитора диагностики Windows Azure с целью сбора и передачи данных счетчиков производительности в хранилище Windows Azure, эти данные можно будет использовать для создания отчетов. Данные от счетчиков производительности в приложении Windows Azure передаются с помощью перечисления результатов выполнения запроса CloudTableQuery [10] в WADPerformanceCountersTable в хранилище Windows Azure. Чтобы запросить данные от счетчиков производительности, выполните следующие действия.
Откройте исходный файл для роли, содержащей код. Если следующие операторы using отсутствуют, добавьте их.
using System.Linq;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
Создайте класс представления схемы таблицы для запросов таблиц счетчиков производительности.
public class PerformanceCountersEntity : TableServiceEntity
{
public long EventTickCount { get; set; }
public string DeploymentId { get; set; }
public string Role { get; set; }
public string RoleInstance { get; set; }
public string CounterName { get; set; }
public string CounterValue { get; set; }
}
Получите экземпляр контекста служб таблиц. В следующем примере кода показано, как получать заданный по умолчанию контекст служб таблиц монитора диагностики.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
"Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
CloudTableClient cloudTableClient =
storageAccount.CreateCloudTableClient();
TableServiceContext serviceContext =
cloudTableClient.GetDataServiceContext();
Создайте запрос для указания возвращаемых записей таблицы. В следующем примере показано, как возвращать записи использования ЦП за последние пять минут для текущего экземпляра роли.
IQueryable<PerformanceCountersEntity> performanceCountersTable =
serviceContext.CreateQuery<PerformanceCountersEntity>(
"WADPerformanceCountersTable");
var selection = from row in performanceCountersTable
where row.EventTickCount > DateTime.UtcNow.AddMinutes(-5.0).Ticks
&& row.CounterName.Equals(@"Processor(_Total)% Processor Time")
select row;
CloudTableQuery<PerformanceCountersEntity> query =
selection.AsTableServiceQuery<PerformanceCountersEntity>();
// Use the Execute command explicitly on the TableServiceQuery to
// take advantage of continuation tokens automatically and get all the data.
IEnumerable<PerformanceCountersEntity> result = query.Execute();
Примечание. Дополнительные сведения о синтаксисе запросов см. в разделе LINQ: .NET Language-Integrated Query [11].
Используйте полученные данные для анализа и создания отчета о производительности приложения.
List<PerformanceCountersEntity> list = result.ToList();
// Display list members here.
Сохраните и постройте проект, а затем разверните приложение.
После выполнения этих действий данные от счетчика производительности будут доступны для формирования отчетов.
Автор: XaocCPS
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/13543
Ссылки в тексте:
[1] Image: http://windowsazure.com/ru-ru/
[2] «Общие сведения о создании и использовании счетчиков производительности в приложении Windows Azure»: http://msdn.microsoft.com/en-us/library/windowsazure/hh411520.aspx
[3] GetDefaultInitialConfiguration: http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.diagnostics.diagnosticmonitor.getdefaultinitialconfiguration.aspx
[4] PerformanceCounters: http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.diagnostics.diagnosticmonitorconfiguration.performancecounters.aspx
[5] PerformanceCounterConfiguration: http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.diagnostics.performancecounterconfiguration.aspx
[6] Start: http://msdn.microsoft.com/en-us/library/windowsazure/ee772721.aspx
[7] «Настройка строк подключения»: http://msdn.microsoft.com/en-us/library/windowsazure/ee758697.aspx
[8] PerformanceCounterConfiguration: http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.diagnostics.performancecounterconfiguration.aspx
[9] DiagnosticMonitorConfiguration: http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.diagnostics.diagnosticmonitorconfiguration.aspx
[10] CloudTableQuery: http://msdn.microsoft.com/en-us/library/windowsazure/ee758648.aspx
[11] LINQ: .NET Language-Integrated Query: http://msdn.microsoft.com/en-us/library/bb308959.aspx
[12] Сбор данных журнала с помощью системы диагностики Windows Azure: http://msdn.microsoft.com/en-us/library/windowsazure/gg433048.aspx
[13] Отладка приложения Windows Azure: http://msdn.microsoft.com/en-us/library/windowsazure/ee405479.aspx
[14] Использование функционального блока для автоматического масштабирования: http://www.windowsazure.com/en-us/develop/net/how-to-guides/autoscaling/
Нажмите здесь для печати.