Zbieranie liczników wydajności dla usługi Azure Cloud Service (klasycznej)
Ważne
Usługi Cloud Services (wersja klasyczna) są teraz przestarzałe dla wszystkich klientów od 1 września 2024 r. Wszystkie istniejące uruchomione wdrożenia zostaną zatrzymane i zamknięte przez firmę Microsoft, a dane zostaną trwale utracone od października 2024 r. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager w usługach Azure Cloud Services (wsparcie dodatkowe).
Liczniki wydajności umożliwiają śledzenie wydajności aplikacji i hosta. System Windows Server udostępnia wiele różnych liczników wydajności związanych ze sprzętem, aplikacjami, systemem operacyjnym i nie tylko. Zbierając i wysyłając liczniki wydajności do platformy Azure, możesz analizować te informacje, aby ułatwić podejmowanie lepszych decyzji.
Odnajdywanie dostępnych liczników
Licznik wydajności składa się z dwóch części, nazwy zestawu (nazywanej również kategorią) i co najmniej jednego licznika. Aby uzyskać listę dostępnych liczników wydajności, możesz użyć programu PowerShell:
Get-Counter -ListSet * | Select-Object CounterSetName, Paths | Sort-Object CounterSetName
CounterSetName Paths
-------------- -----
.NET CLR Data {\.NET CLR Data(*)\SqlClient...
.NET CLR Exceptions {\.NET CLR Exceptions(*)\# o...
.NET CLR Interop {\.NET CLR Interop(*)\# of C...
.NET CLR Jit {\.NET CLR Jit(*)\# of Metho...
.NET Data Provider for Oracle {\.NET Data Provider for Ora...
.NET Data Provider for SqlServer {\.NET Data Provider for Sql...
.NET Memory Cache 4.0 {\.NET Memory Cache 4.0(*)\C...
AppV Client Streamed Data Percentage {\AppV Client Streamed Data ...
ASP.NET {\ASP.NET\Application Restar...
ASP.NET Apps v4.0.30319 {\ASP.NET Apps v4.0.30319(*)...
ASP.NET State Service {\ASP.NET State Service\Stat...
ASP.NET v2.0.50727 {\ASP.NET v2.0.50727\Applica...
ASP.NET v4.0.30319 {\ASP.NET v4.0.30319\Applica...
Authorization Manager Applications {\Authorization Manager Appl...
#... results cut to save space ...
Właściwość CounterSetName
reprezentuje zestaw (lub kategorię) i jest dobrym wskaźnikiem tego, z czym są powiązane liczniki wydajności. Właściwość Paths
reprezentuje kolekcję liczników dla zestawu. Możesz również uzyskać właściwość, Description
aby uzyskać więcej informacji na temat zestawu liczników.
Aby pobrać wszystkie liczniki dla zestawu, użyj CounterSetName
wartości i rozwiń Paths
kolekcję. Każdy element ścieżki jest licznikiem, którego można wykonywać zapytania. Aby na przykład uzyskać dostępne liczniki powiązane z zestawem Processor
, rozwiń Paths
kolekcję:
Get-Counter -ListSet * | Where-Object CounterSetName -eq "Processor" | Select -ExpandProperty Paths
\Processor(*)\% Processor Time
\Processor(*)\% User Time
\Processor(*)\% Privileged Time
\Processor(*)\Interrupts/sec
\Processor(*)\% DPC Time
\Processor(*)\% Interrupt Time
\Processor(*)\DPCs Queued/sec
\Processor(*)\DPC Rate
\Processor(*)\% Idle Time
\Processor(*)\% C1 Time
\Processor(*)\% C2 Time
\Processor(*)\% C3 Time
\Processor(*)\C1 Transitions/sec
\Processor(*)\C2 Transitions/sec
\Processor(*)\C3 Transitions/sec
Te poszczególne ścieżki liczników można dodać do platformy diagnostyki używanej przez usługę w chmurze. Aby uzyskać więcej informacji na temat konstruowania ścieżki licznika wydajności, zobacz Określanie ścieżki licznika.
Zbieranie licznika wydajności
Licznik wydajności można dodać do usługi w chmurze w celu Diagnostyka Azure lub usługi Application Insights.
Szczegółowe dane dotyczące aplikacji
aplikacja systemu Azure Insights for Cloud Services umożliwia określenie liczników wydajności, które chcesz zebrać. Po dodaniu usługi Application Insights do projektu zostanie dodany plik konfiguracji o nazwie ApplicationInsights.config do projektu programu Visual Studio. Ten plik konfiguracji definiuje typ informacji zbieranych i wysyłanych do platformy Azure przez usługę Application Insights.
Otwórz plik ApplicationInsights.config i znajdź element ApplicationInsights>TelemetryModules. Każdy <Add>
element podrzędny definiuje typ telemetrii do zbierania wraz z jego konfiguracją. Typ modułu telemetrii licznika wydajności to Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector
. Jeśli ten element jest już zdefiniowany, nie dodawaj go po raz drugi. Każdy licznik wydajności do zbierania jest definiowany w węźle o nazwie <Counters>
. Oto przykład, który zbiera liczniki wydajności dysków:
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
<Counters>
<Add PerformanceCounter="\LogicalDisk(C:)\Disk Write Bytes/sec" ReportAs="Disk write (C:)" />
<Add PerformanceCounter="\LogicalDisk(C:)\Disk Read Bytes/sec" ReportAs="Disk read (C:)" />
</Counters>
</Add>
</TelemetryModules>
<!-- ... cut to save space ... -->
Każdy licznik wydajności jest reprezentowany jako <Add>
element w obszarze <Counters>
. Atrybut PerformanceCounter
definiuje licznik wydajności do zebrania. Atrybut ReportAs
jest tytułem wyświetlanym w witrynie Azure Portal dla licznika wydajności. Każdy zbierany licznik wydajności jest umieszczany w kategorii o nazwie Custom w portalu. W przeciwieństwie do Diagnostyka Azure nie można ustawić interwału, w którym te liczniki wydajności są zbierane i wysyłane na platformę Azure. W usłudze Application Insights liczniki wydajności są zbierane i wysyłane co minutę.
Usługa Application Insights automatycznie zbiera następujące liczniki wydajności:
- \Process(?? APP_WIN32_PROC?)% czasu procesora
- \Memory\Available Bytes
- Wyjątki środowiska .NET CLR(?? APP_CLR_PROC?)Liczba wyrzuconych exceps na sekundę
- \Process(??APP_WIN32_PROC??)\Private Bytes
- \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
- \Processor(_Total)% czasu procesora
Aby uzyskać więcej informacji, zobacz Liczniki wydajności systemu w usługach Application Insights i Application Insights dla usług Azure Cloud Services.
Diagnostyka Azure
Ważne
Chociaż wszystkie te dane są agregowane na koncie magazynu, portal nie zapewnia natywnego sposobu tworzenia wykresów danych. Zdecydowanie zaleca się zintegrowanie innej usługi diagnostycznej, takiej jak Application Insights, z aplikacją.
Rozszerzenie Diagnostyka Azure dla usług Cloud Services umożliwia określenie liczników wydajności, które chcesz zebrać. Aby skonfigurować Diagnostyka Azure, zobacz Omówienie monitorowania usługi w chmurze.
Liczniki wydajności, które chcesz zebrać, są zdefiniowane w pliku diagnostics.wadcfgx . Otwórz ten plik w programie Visual Studio i znajdź element DiagnosticsConfig PublicConfig>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Dodaj nowy element PerformanceCounterConfiguration jako element podrzędny. Ten element ma dwa atrybuty: counterSpecifier
i sampleRate
. Atrybut counterSpecifier
definiuje zestaw liczników wydajności systemu (opisany w poprzedniej sekcji) do zbierania. Wartość sampleRate
wskazuje częstotliwość sondowania tej wartości. W całości wszystkie liczniki wydajności są przenoszone na platformę Azure zgodnie z wartością atrybutu elementu nadrzędnego PerformanceCounters
scheduledTransferPeriod
.
Aby uzyskać więcej informacji na temat elementu schematuPerformanceCounters
, zobacz schemat Diagnostyka Azure.
Okres zdefiniowany przez sampleRate
atrybut używa typu danych czasu trwania XML, aby wskazać częstotliwość sondowania licznika wydajności. W poniższym przykładzie stawka jest ustawiona na PT3M
wartość , co oznacza [P]eriod[T]ime[3][M]inutes
: co trzy minuty.
Aby uzyskać więcej informacji na temat sposobu scheduledTransferPeriod
sampleRate
i definiowania, zobacz sekcję Typ danych czasu trwania w samouczku Typy dat i godzin W3 XML.
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<PublicConfig>
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="4096">
<!-- ... cut to save space ... -->
<PerformanceCounters scheduledTransferPeriod="PT1M">
<PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
<!-- This is a new perf counter which will track the C: disk read activity in bytes per second, every minute -->
<PerformanceCounterConfiguration counterSpecifier="\LogicalDisk(C:)\Disk Read Bytes/sec" sampleRate="PT1M" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>
</WadCfg>
<!-- ... cut to save space ... -->
</PublicConfig>
</DiagnosticsConfiguration>
Tworzenie nowego licznika wydajności
Nowy licznik wydajności można utworzyć i użyć go w kodzie. Kod tworzący nowy licznik wydajności musi być uruchomiony z podwyższonym poziomem uprawnień. W przeciwnym razie kończy się niepowodzeniem. Kod uruchamiania usługi OnStart
w chmurze może utworzyć licznik wydajności, który wymaga uruchomienia roli w kontekście z podwyższonym poziomem uprawnień. Możesz też utworzyć zadanie uruchamiania z podwyższonym poziomem uprawnień i utworzyć licznik wydajności. Aby uzyskać więcej informacji na temat zadań uruchamiania, zobacz Jak skonfigurować i uruchomić zadania uruchamiania dla usługi w chmurze.
Aby skonfigurować rolę do uruchamiania podwyższonego poziomu uprawnień, dodaj <Runtime>
element do pliku csdef .
<ServiceDefinition name="CloudServiceLoadTesting" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WorkerRole name="WorkerRoleWithSBQueue1" vmsize="Large">
<!-- ... cut to save space ... -->
<Runtime executionContext="elevated">
</Runtime>
<!-- ... cut to save space ... -->
</WorkerRole>
</ServiceDefinition>
Możesz utworzyć i zarejestrować nowy licznik wydajności za pomocą kilku wierszy kodu. System.Diagnostics.PerformanceCounterCategory.Create
Użyj przeciążenia metody, która tworzy zarówno kategorię, jak i licznik. Poniższy kod najpierw sprawdza, czy kategoria istnieje, a jeśli jej brakuje, tworzy zarówno kategorię, jak i licznik.
using System.Diagnostics;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
namespace WorkerRoleWithSBQueue1
{
public class WorkerRole : RoleEntryPoint
{
// Perf counter variable representing times service was used.
private PerformanceCounter counterServiceUsed;
public override bool OnStart()
{
// ... Other startup code here ...
// Define the category and counter names.
string perfCounterCatName = "MyService";
string perfCounterName = "Times Used";
// Create the counter if needed. Our counter category only has a single counter.
// Both the category and counter are created in the same method call.
if (!PerformanceCounterCategory.Exists(perfCounterCatName))
{
PerformanceCounterCategory.Create(perfCounterCatName, "Collects information about the cloud service.",
PerformanceCounterCategoryType.SingleInstance,
perfCounterName, "How many times the cloud service was used.");
}
// Get reference to our counter
counterServiceUsed = new PerformanceCounter(perfCounterCatName, perfCounterName);
counterServiceUsed.ReadOnly = false;
return base.OnStart();
}
// ... cut class code to save space
}
}
Jeśli chcesz użyć licznika, wywołaj metodę Increment
or IncrementBy
.
// Increase the counter by 1
counterServiceUsed.Increment();
Teraz, gdy aplikacja używa niestandardowego licznika, musisz skonfigurować Diagnostyka Azure lub Application Insights, aby śledzić licznik.
Szczegółowe dane dotyczące aplikacji
Jak wspomniano wcześniej, liczniki wydajności usługi Application Insights są zdefiniowane w pliku ApplicationInsights.config . Otwórz plik ApplicationInsights.config i znajdź element ApplicationInsights>TelemetryModules>Add Counters (Dodaj>liczniki). Utwórz element podrzędny <Add>
i ustaw PerformanceCounter
atrybut na kategorię i nazwę licznika wydajności utworzonego w kodzie. ReportAs
Ustaw atrybut na przyjazną nazwę, którą chcesz wyświetlić w portalu.
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
<Counters>
<!-- ... cut other perf counters to save space ... -->
<!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
<Add PerformanceCounter="\MyService\Times Used" ReportAs="Service used counter" />
</Counters>
</Add>
</TelemetryModules>
<!-- ... cut to save space ... -->
Diagnostyka Azure
Jak wspomniano wcześniej, liczniki wydajności, które chcesz zebrać, są zdefiniowane w pliku diagnostics.wadcfgx . Otwórz ten plik w programie Visual Studio i znajdź element DiagnosticsConfig PublicConfig>PublicConfig>WadCfg>DiagnosticMonitorConfiguration>PerformanceCounters. Dodaj nowy element PerformanceCounterConfiguration jako element podrzędny. Ustaw atrybut na kategorię counterSpecifier
i nazwę licznika wydajności utworzonego w kodzie.
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<PublicConfig>
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="4096">
<!-- ... cut to save space ... -->
<PerformanceCounters scheduledTransferPeriod="PT1M">
<!-- ... cut other perf counters to save space ... -->
<!-- This new perf counter matches the [category name]\[counter name] defined in your code -->
<PerformanceCounterConfiguration counterSpecifier="\MyService\Times Used" sampleRate="PT1M" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>
</WadCfg>
<!-- ... cut to save space ... -->
</PublicConfig>
</DiagnosticsConfiguration>