Мониторинг ресурсов и приложений 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"
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}]'

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

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

Добавьте ведение журнала, метрики и уведомления в шаблоны IaC с использованием ресурса diagnosticSettings в Bicep. Пример (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 }
    ]
  }
}

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

Оповещения для метрик можно настроить на портале 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 и выберите Logs. Запросы языка запросов Kusto (KQL) можно запускать в журналах.

Логи потока

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

сервер MCP Azure

При разработке локально можно использовать средство Azure MCP Servermonitor для запроса журналов без выхода из интегрированной среды разработки. После того как установите сервер, примеры запросов 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/loger)

Управление детализацией пакета 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(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" };

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

Пакет 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: {
  connectionString: "<YOUR_CONNECTION_STRING>",
  enableAutoRouteTracking: true
}});
ai.loadAppInsights();