Monitorowanie zasobów i aplikacji Azure

Użyj Azure Monitor, aby zbierać dzienniki, metryki i alerty w aplikacjach JavaScript i usługach Azure, od których zależą. Azure Monitor to centralna usługa platformy, która zbiera i przechowuje dane telemetryczne. Aplikacje można instrumentować za pomocą usługi Application Insights. Należy monitorować usługę aplikacji hostowanej, usługi Azure integrowane z aplikacją oraz sam kod źródłowy aplikacji.

Omówienie dzienników, metryk i alertów

Dane telemetryczne to dane zbierane z aplikacji i usług w celu monitorowania ich kondycji, wydajności i użycia. W Azure dane telemetryczne są podzielone na dzienniki, metryki i alerty.

Azure oferuje cztery rodzaje danych telemetrycznych:

Typ telemetrii Co to daje Gdzie ją znaleźć dla każdej usługi
Wskaźniki Dane liczbowe, szeregi czasowe (procesor CPU, pamięć itp.) Metryki w portalu lub az monitor metrics CLI
Powiadomienia Powiadomienia proaktywne po osiągnięciu progów Alerty w portalu lub konsoli
Dzienniki Zdarzenia i diagnostyka oparta na tekście (internet, aplikacja) App Service Logs, Monitor funkcji, Diagnostyka aplikacji kontenerowych
Dzienniki niestandardowe Własne dane telemetryczne aplikacji za pośrednictwem usługi App Insights Tabela Dzienniki (ślad) zasobu usługi Application Insights

Wybierz odpowiednią telemetrię dla swojego pytania:

Scenariusz Użyj dzienników... Użyj metryk... Użyj alertów...
"Czy moja aplikacja internetowa została uruchomiona i odpowiedziała?" Dzienniki serwera internetowego usługi App Service (dzienniki) N/A N/A
Czy mój limit czasu funkcji przekracza czas, czy ulega awarii? Dzienniki wywołania funkcji (Monitor) Metryka czasu trwania wykonywania funkcji Alert dotyczący "Błędy funkcji >0"
Jak bardzo obciążona jest moja usługa i czy może się skalować? N/A Wydajność usługi/CPU w metrykach Alert autoskalowania dla procesora CPU% > 70%
"Jakie wyjątki zgłasza mój kod?" Niestandardowe logi śledzenia w usłudze Application Insights N/A Alert dotyczący błędu "ServerExceptions >0"
Czy przekroczyłem limity transakcji lub przydziału? N/A Metryki związane z limitami kwotowymi (transakcje, ograniczenia) Alert dotyczący "ThrottlingCount >0"

Optymalizacja kosztów

Możesz znacznie zmniejszyć koszty związane z Azure Monitor, rozumiejąc najlepsze praktyki dla opcji konfiguracji oraz możliwość zmniejszenia ilości zbieranych danych.

Włączanie rejestrowania i metryk dla wszystkich zasobów Azure

Każda usługa w Azure ma własne możliwości rejestrowania i metryk. Włącz rejestrowanie na każdym zasobie Azure, aby upewnić się, że masz dane telemetryczne potrzebne do monitorowania całej aplikacji kompleksowej.

Tworzenie zasobu Azure Monitor

Zasób Azure Monitor można utworzyć w celu zbierania dzienników i metryk z zasobów Azure. Ten zasób jest zazwyczaj obszarem roboczym Log Analytics, w którym są przechowywane dzienniki i metryki.

Ten zasób można utworzyć na kilka sposobów:

  • portal Azure: Użyj portalu Azure, aby utworzyć obszar roboczy Log Analytics i skonfigurować ustawienia diagnostyczne zasobów.
  • Azure CLI: Użyj Azure CLI aby utworzyć obszar roboczy Log Analytics i skonfigurować ustawienia diagnostyczne zasobów.
  • PowerShell: Użyj PowerShell, aby utworzyć obszar roboczy Log Analytics i skonfigurować ustawienia diagnostyczne dla zasobów.
  • Bicep: deklaratywne definiowanie i wdrażanie zasobów Azure Monitor za pomocą szablonów Bicep.

Tworzenie obszaru roboczego Log Analytics przy użyciu Azure CLI

Użyj Azure CLI, aby utworzyć obszar roboczy Log Analytics, w którym są przechowywane dzienniki i metryki. Przykład:

# Variables
resourceGroup="myResourceGroup"
location="eastus"
workspaceName="myWorkspace"
webAppName="myWebApp"
diagName="${webAppName}/appServiceLogging"
SUBSCRIPTION_ID=$(az account show --query id -o tsv)

# 1) Create a Log Analytics workspace
workspaceId=$(az monitor log-analytics workspace create \
  --resource-group $resourceGroup \
  --workspace-name $workspaceName \
  --location $location \
  --query id -o tsv)

# 2) Enable diagnostic settings on your App Service
az monitor diagnostic-settings create \
  --name "$diagName" \
  --resource "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$webAppName" \
  --workspace $workspaceId \
  --logs '[{"category": "Administrative", "enabled": true},{"category":"AppServiceConsoleLogs","enabled":true},{"category":"AppServiceHTTPLogs","enabled":true}]' \
  --metrics '[{"category":"AllMetrics","enabled":true}]'

Tworzenie obszaru roboczego Log Analytics przy użyciu Bicep

Użyj Bicep do deklaratywnego definiowania i wdrażania zasobów Azure Monitor. W tym przykładzie utworzono obszar roboczy Log Analytics i skonfigurowano ustawienia diagnostyczne dla usługi App Service.

Uwzględnij logowanie, metryki i alerty w szablonach IaC z wykorzystaniem odniesienia do zasobu Bicep diagnosticSettings. Przykład (Bicep):

param webAppName string

resource webApp 'Microsoft.Web/sites@2022-09-01' existing = {
  name: webAppName
}

resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
  name: 'myWorkspace'
  location: resourceGroup().location
}

resource diagSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: '${webApp.name}/appServiceLogging'
  properties: {
    workspaceId: logAnalytics.id
    logs: [
      { category: 'AppServiceConsoleLogs'; enabled: true }
      { category: 'AppServiceHTTPLogs'; enabled: true }
    ]
    metrics: [
      { category: 'AllMetrics'; enabled: true }
    ]
  }
}

Tworzenie alertów dotyczących zasobów

Alerty dotyczące metryk można skonfigurować w portalu Azure lub przy użyciu Azure CLI. Alerty mogą obejmować określone metryki, strumienie komunikacji (takie jak poczta e-mail) i częstotliwość.

Skorzystaj z poniższych przykładów, aby utworzyć powiadomienia metryczne w portalu lub programowo.

  • Azure CLI: szybka konfiguracja za pośrednictwem az monitor metrics alert
  • Bicep: deklaratywna definicja IaC dla Microsoft.Insights/metricAlerts

Alerty mogą określać metryki docelowe, kanały powiadomień (wiadomość e-mail, element webhook), ważność, częstotliwość oceny i grupy akcji.

az monitor metrics alert create \
  --name HighCpuAlert \
  --resource-group MyResourceGroup \
  --scopes /subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/Microsoft.Web/sites/myApp \
  --condition "avg CpuPercentage > 70" \
  --description "Alert when CPU goes above 70%" \
  --severity 2 \
  --window-size 5m \
  --evaluation-frequency 1m \
  --action /subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/microsoft.insights/actionGroups/MyActionGroup
resource cpuAlert 'Microsoft.Insights/metricAlerts@2018-03-01' = {
  name: 'highCpuAlert'
  location: resourceGroup().location
  properties: {
    description: 'Alert when CPU goes above 70%'
    severity: 2
    enabled: true
    scopes: [
      webApp.id
    ]
    evaluationFrequency: 'PT1M'
    windowSize: 'PT5M'
    criteria: {
      allOf: [
        {
          criterionType: 'StaticThresholdCriterion'
          name: 'HighCpu'
          metricName: 'CpuPercentage'
          metricNamespace: 'Microsoft.Web/sites'
          operator: 'GreaterThan'
          threshold: 70
          timeAggregation: 'Average'
        }
      ]
    }
    autoMitigate: false
    actions: [
      {
        actionGroupId: '/subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/microsoft.insights/actionGroups/MyActionGroup'
      }
    ]
  }
}

Wyświetlanie danych dziennika

Aby wyświetlić dane dziennika w portalu Azure, przejdź do obszaru roboczego Log Analytics i wybierz pozycję Logs. Zapytania języka KQL (Kusto Query Language) można uruchamiać na logach.

Logi przesyłane strumieniowo

Skorzystaj z poniższej tabeli, aby uzyskać więcej informacji o zapisie dzienników.

serwer Azure MCP

Podczas tworzenia aplikacji lokalnie można użyć narzędzia Azure MCP Servermonitor do wykonywania zapytań dotyczących dzienników bez opuszczania środowiska IDE. Po zainstalowaniu serwera, przykładowe monity Copilot obejmują:

  • Wyświetlanie listy obszarów roboczych: "Pokaż mi wszystkie obszary robocze Log Analytics w mojej subskrypcji".
  • Znajdź tabele: "Wyświetl listę wszystkich tabel w obszarze roboczym "security-logs"
  • Złożone zapytanie: "Pokaż trend użycia procesora CPU dla moich serwerów internetowych w ciągu ostatnich 24 godzin"

Dodaj rejestrowanie do kodu

W przypadku rejestrowania aplikacji usługa Application Insights może zapewnić następujące możliwości:

  • Standardowe rejestrowanie w usłudze Azure i w twoim kodzie źródłowym, w zależności od inicjalizacji.
  • Rejestrowanie niestandardowe z potoku wdrażania i w Twoim kodzie źródłowym.

Standardowe rejestrowanie konsoli (stdout/stderr)

Azure aplikacje internetowe i Azure Functions automatycznie oferują niestandardowe rejestrowanie dla stdout i stderr pod warunkiem, że używasz właściwych funkcji rejestrowania:

  • Aplikacje internetowe używają console.log('your message here').
  • Aplikacje funkcji używają polecenia context.log('your message here').

Dodaj niestandardowe logowanie Application Insights

Możesz dodać bogatsze rejestrowanie niestandardowe przy użyciu Application Insights w Azure Monitor. Usługa Application Insights oferuje scenariusze serwera (Node.js) i klienta (przeglądarka):

  • Dodaj zestaw SDK usługi Application Insights do kodu źródłowego.
  • Zaloguj się z Node.js przy użyciu pakietu npm.
    • Pamiętaj, aby skonfigurować SDK Node.js z użyciem enableAutoCollectConsole: true, aby zbierać niestandardowe dzienniki konsoli.
  • Zaloguj się z kodu klienta przy użyciu pakietu npm.
  • Zaloguj się z klastra Kubernetes lub Azure maszyny wirtualnej.

Włączanie dzienników potoków zestawu SDK (@Azure/rejestrator)

Kontrolowanie szczegółowości zestawu SDK przy użyciu zmiennej środowiskowej AZURE_LOG_LEVEL@azure/logger lub pakietu npm:

import { setLogLevel } from "@azure/logger";
// Options: 'error', 'warning', 'info', 'verbose'
setLogLevel(process.env.AZURE_LOG_LEVEL || "info");

Konfigurowanie zestawu SDK usługi Application Insights Node.js

Zainicjuj usługę Application Insights dla zestawu SDK Node.js przy użyciu próbkowania, zbierania zależności i przechwytywania dziennika konsoli:

import appInsights from "applicationinsights";
appInsights
  .setup(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR_CONNECTION_STRING>")
  .setAutoCollectConsole(true, true)        // collect console.log
  .setAutoCollectDependencies(true)        // track outgoing requests
  .setInternalLogging(false, true)         // SDK internal logs
  .start();

// Optional: add custom properties to all telemetry
appInsights.defaultClient.commonProperties = { serviceName: "my-service" };

Dodawanie korelacji i śledzenia rozproszonego

Zestaw SDK usługi Application Insights automatycznie wprowadza operację i identyfikatory korelacji do żądań. Aby dodać niestandardową korelację lub właściwości:

appInsights.defaultClient.trackTrace({
  message: "Custom trace",
  properties: { userId: user.id }
});

Dowiedz się więcej: wskazówki dotyczące śledzenia rozproszonego

Opróżnij dane telemetryczne w skryptach deweloperskich

Upewnij się, że dzienniki są wysyłane przed zakończeniem procesu podczas programowania lokalnego:

appInsights.defaultClient.flush({
  callback: () => process.exit(0)
});

Konfiguracja telemetrii po stronie klienta

W przypadku aplikacji klienckich użyj @microsoft/applicationinsights-web pakietu :

import { ApplicationInsights } from "@microsoft/applicationinsights-web";
const ai = new ApplicationInsights({ config: {
  connectionString: "<YOUR_CONNECTION_STRING>",
  enableAutoRouteTracking: true
}});
ai.loadAppInsights();