Поделиться через


Мониторинг ресурсов и приложений Azure

Используйте Azure Monitor для сбора журналов, метрик и оповещений в JavaScript приложениях и связанных с ними службах Azure. Azure Monitor — это центральная служба платформы, которая собирает и сохраняет данные телеметрии. Интегрируйте ваши приложения с помощью Application Insights. Следует отслеживать размещенную службу приложений, службы Azure, с которыми интегрируется приложение, и сам исходный код приложения.

Общие сведения о журналах, метриках и оповещениях

Телеметрия — это данные, собранные из приложений и служб для мониторинга их работоспособности, производительности и использования. В Azure данные телеметрии делятся на журналы, метрики и оповещения.

Azure предлагает четыре типа телеметрии:

Тип телеметрии Что это дает вам Где это найти для каждой услуги
Метрики Числовые, временнóй ряды данных (процессор, память и т. д.) Метрики на портале или az monitor metrics интерфейсе командной строки
Уведомления Упреждающие уведомления при достижении пороговых значений Оповещения на портале или az monitor metrics alert интерфейсе командной строки
Записи Текстовые события и диагностика (веб-приложение) Журналы службы приложений, функции Монитор, Диагностика контейнерных приложений
Пользовательские логи Телеметрия вашего приложения с использованием App Insights ``` Таблица журналов ресурса Application Insights (трассировка)

Выберите правильную телеметрию для вашего вопроса:

Сценарий Использование журналов... Используйте метрики... Использование оповещений...
"Моё веб-приложение запустилось и отвечает?" Журналы веб-сервера в службе приложений Не применимо Не применимо
"Моя функция завершает выполнение по таймауту или происходит сбой?" Журналы вызовов функций (мониторинг) Метрика длительности выполнения функции Оповещение об ошибке функции >0
"Насколько занята моя служба и может ли она масштабироваться?" Не применимо Пропускная способность службы и ЦП в метриках Оповещение автомасштабирования для процессора% > 70%
"Какие исключения вызывают мой код?" Пользовательские журналы трассировки в Application Insights Не применимо Оповещение о «ServerExceptions >0»
Превысил ли я пределы транзакции или квоты? Не применимо Метрики, связанные с квотами (транзакции, ограничение скорости) Оповещение о "дросселированииКоличество >0"

Оптимизация затрат

Вы можете значительно сократить затраты на Azure Monitor , понимая рекомендации по параметрам конфигурации и возможностям для уменьшения объема собираемых данных.

Включение ведения журнала и метрик для всех ресурсов Azure

Каждая служба в Azure имеет собственные возможности ведения журнала и метрик. Активируйте ведение журнала для каждого ресурса Azure, чтобы иметь необходимую телеметрию для мониторинга вашего приложения от начала до конца.

Создание ресурса Azure Monitor

Вы можете создать ресурс Azure Monitor для сбора журналов и метрик из ресурсов Azure. Обычно этот ресурс является рабочей областью Log Analytics, в которой хранятся журналы и метрики.

Этот ресурс можно создать несколькими способами:

  • Портал Azure: используйте портал Azure для создания рабочей области Log Analytics и настройки параметров диагностики для ресурсов.
  • Azure CLI: используйте Azure CLI для создания рабочей области Log Analytics и настройки параметров диагностики для ресурсов.
  • PowerShell: используйте PowerShell для создания рабочей области Log Analytics и настройки параметров диагностики для ресурсов.
  • Bicep: используйте шаблоны Bicep для определения и развертывания ресурсов Azure Monitor декларативно.

Создание рабочей области Log Analytics с помощью Azure CLI

Используйте Azure CLI для создания рабочей области Log Analytics, в которой хранятся журналы и метрики. Пример:

# Variables
resourceGroup="myResourceGroup"
location="eastus"
workspaceName="myWorkspace"
webAppName="myWebApp"
diagName="${webAppName}/appServiceLogging"

# 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}]'

Создание рабочей области Log Analytics с помощью Bicep

Используйте Bicep для декларативного определения и развертывания ресурсов Azure Monitor. В этом примере создается рабочая область Log Analytics и настраивается параметры диагностики для службы приложений:


Include logging, metrics, and alerting in your IaC templates with a [Bicep diagnosticSettings resource reference](/azure/templates/microsoft.insights/diagnosticsettings). Example (Bicep):

```bicep
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 }
    ]
  }
}

Создайте оповещения для ваших ресурсов

Вы можете настроить оповещения для метрик на портале Azure или с помощью Azure CLI. Оповещения могут включать определенные метрики, потоки коммуникации (например, электронную почту) и частоту.

Используйте следующие примеры для создания оповещений метрик на портале или программно:

  • Azure CLI: быстрая настройка с помощью az monitor metrics alert
  • Bicep: декларативное определение IaC для Microsoft.Insights/metricAlerts

Оповещения могут указывать целевые метрики, каналы уведомлений (электронная почта, веб-перехватчик), серьезность, частоту оценки и группы действий.

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'
      }
    ]
  }
}

Просмотр данных журналов

Чтобы просмотреть данные журнала на портале Azure, перейдите в рабочую область Log Analytics и выберите журналы. Запросы языка запросов Kusto (KQL) можно запускать в журналах.

Логи потока

Используйте следующую таблицу, чтобы узнать больше о том, как выполнять потоковую передачу журналов.

Сервер Azure MCP

При разработке локально можно использовать средство мониторингасервера Azure MCP для запроса журналов без выхода из интегрированной среды разработки. После установки сервера введите примеры запросов Copilot:

  • Вывод списка рабочих пространств: "Покажи мне все рабочие пространства Log Analytics в моей подписке".
  • Найдите таблицы: "Перечислите все таблицы в моей рабочей области 'журналы безопасности'"
  • Сложный запрос: "Показать тенденцию использования ЦП для моих веб-серверов за последние 24 часа"

Добавьте логирование в код

Для ведения журнала приложений Application Insights может предоставлять следующие возможности:

  • Стандартное ведение журнала в службе Azure и исходном коде в зависимости от инициализации.
  • Настраиваемое ведение журнала из конвейера развертывания и в исходном коде.

Стандартное ведение журнала консоли (stdout/stderr)

Веб-приложения Azure и функции Azure автоматически предоставляют пользовательский журнал в stdout и stderr, если вы используете правильные функции ведения журнала.

  • Веб-приложения используют console.log('your message here').
  • Приложения-функции используют context.log('your message here').

Добавьте пользовательскую регистрацию в Application Insights

Вы можете добавить более подробное пользовательское ведение журнала с помощью Application Insights в Azure Monitor. Application Insights предлагает сценарии сервера (Node.js) и клиента (браузера):

  • Добавьте пакет SDK Application Insights в исходный код.
  • Войдите из Node.js с помощью пакета npm.
    • Обязательно настройте пакет SDK Node.js с использованием enableAutoCollectConsole: true, чтобы собирать пользовательские журналы консоли.
  • Войдите из клиентского кода с помощью пакета npm.
  • Войдите из кластера Kubernetes или виртуальной машины Azure.

Включите журналы конвейера SDK (@Azure/logger)

Управление детализацией пакета SDK с помощью переменной AZURE_LOG_LEVEL среды или @azure/logger пакета npm:

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

Настройка пакета SDK для Application Insights Node.js

Инициализировать Application Insights для SDK Node.js с помощью сэмплирования, сбора зависимостей и захвата журналов консоли:

import appInsights from "applicationinsights";
appInsights
  .setup("<INSTRUMENTATION_KEY>")
  .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" };

Добавление корреляции и распределенной трассировки

Пакет SDK Application Insights автоматически внедряет операции и идентификаторы корреляции в запросы. Чтобы добавить пользовательскую корреляцию или свойства, выполните приведенные действия.

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

Дополнительные сведения: руководство по распределенной трассировке

Очистка данных телеметрии в сценариях разработки

Убедитесь, что лог-файлы отправляются перед завершением процесса во время локальной разработки.

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

Настройка телеметрии на стороне клиента

Для клиентских приложений используйте @microsoft/applicationinsights-web пакет :

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

Дальнейшие шаги