Azure 리소스 및 애플리케이션 모니터링

Azure Monitor 사용하여 JavaScript 애플리케이션 및 해당 애플리케이션이 사용하는 Azure 서비스에서 로그, 메트릭 및 경고를 수집합니다. Azure Monitor는 원격 분석을 수집하고 저장하는 중앙 플랫폼 서비스입니다. Application Insights를 사용하여 애플리케이션을 계측할 수 있습니다. 호스트된 애플리케이션 서비스, 애플리케이션이 통합하는 Azure 서비스 및 애플리케이션 소스 코드 자체를 모니터링해야 합니다.

로그, 메트릭 및 경고 이해

원격 분석은 애플리케이션 및 서비스에서 수집된 데이터로, 상태, 성능 및 사용량을 모니터링합니다. Azure 원격 분석은 로그, 메트릭 및 경고로 분류됩니다.

Azure 네 가지 종류의 원격 분석을 제공합니다.

원격 분석 유형 그것은 당신에게 주는 것 각 서비스에 대해 찾을 수 있는 위치
지표 숫자, 시계열 데이터(CPU, 메모리 등) 포털 또는 CLI의 메트릭az monitor metrics
경고 임계값에 도달하면 사전 알림 포털 또는 CLI의 az monitor metrics alert
로그 텍스트 기반 이벤트 및 진단(웹, 앱) App Service 로그 , 함수 모니터, Container Apps 진단
사용자 지정 로그 App Insights를 통한 사용자 고유의 애플리케이션 원격 분석 Application Insights 리소스의 로그(추적) 테이블

질문에 적합한 원격 분석을 고르세요.

시나리오 로그 사용... 메트릭 사용... 경고 사용...
"내 웹앱이 시작되고 응답했나요?" App Service 웹 서버 로그(로그) 해당 없음(N/A) 해당 없음(N/A)
"내 함수가 타이밍이 초과되거나 실패합니까?" 함수 호출 로그(모니터) 함수 실행 기간 메트릭 "함수 오류 >0"에 대한 경고
"내 서비스가 얼마나 바쁘고 확장할 수 있나요?" 해당 없음(N/A) 메트릭의 서비스 처리량/CPU CPU% 70% > 자동 크기 조정 경고
내 코드에서 발생하는 예외는 무엇인가요? Application Insights의 사용자 지정 추적 로그 해당 없음(N/A) "ServerExceptions >0"에 대한 경보
"내 트랜잭션 또는 할당량 한도를 초과했나요?" 해당 없음(N/A) 할당량 관련 메트릭(트랜잭션, 속도 제한) "ThrottlingCount >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 리소스를 선언적으로 정의하고 배포합니다.

Azure CLI 사용하여 Log Analytics 작업 영역 만들기

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

Bicep 사용하여 Log Analytics 작업 영역 만들기

Bicep 사용하여 Azure Monitor 리소스를 선언적으로 정의하고 배포합니다. 이 예제에서는 Log Analytics 작업 영역을 만들고 App Service에 대한 진단 설정을 구성합니다.

IaC 템플릿에 로깅, 메트릭, 경고를 포함하려면 Bicep diagnosticSettings 리소스 참조를 사용하세요. 예제(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: Microsoft.Insights/metricAlerts에 대한 선언형 IaC 정의

경고는 대상 메트릭, 알림 채널(이메일, 웹후크), 심각도, 평가 빈도 및 작업 그룹을 지정할 수 있습니다.

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 선택합니다. 로그에 대해 KQL(Kusto Query Language) 쿼리를 실행할 수 있습니다.

로그 스트리밍

다음 표를 사용하여 로그를 스트리밍하는 방법에 대해 자세히 알아봅니다.

Azure MCP 서버

로컬로 개발할 때 Azure MCP Server모니터 도구를 사용하여 IDE를 종료하지 않고 로그를 쿼리할 수 있습니다. 서버를 설치하면 Copilot 프롬프트에 다음이 포함됩니다.

  • 작업 영역 나열: "내 구독의 모든 Log Analytics 작업 영역 표시."
  • 테이블 찾기: "내 작업 영역 'security-logs'의 모든 테이블 나열"
  • 복잡한 쿼리: "지난 24시간 동안 내 웹 서버의 CPU 사용량 추세 표시"

코드에 로깅 추가

애플리케이션 로깅의 경우 Application Insights는 다음을 제공할 수 있습니다.

  • 초기화에 따라, Azure 서비스 및 소스 코드에서 표준 로깅이 수행됩니다.
  • 배포 파이프라인 및 소스 코드에서 사용자 지정 로깅

표준 콘솔 로그 기록(stdout/stderr)

Azure 웹앱 및 Azure Functions 올바른 로깅 함수를 사용하는 경우 stdout 및 stderr 사용자 지정 로깅을 자동으로 제공합니다.

  • 웹앱은 .를 사용합니다 console.log('your message here').
  • 함수 앱은 context.log('your message here')를 사용합니다.

사용자 지정 Application Insights 로깅 추가

Azure Monitor Application Insights 사용하여 보다 풍부한 사용자 지정 로깅을 추가할 수 있습니다. Application Insights는 서버 (Node.js) 및 클라이언트 (브라우저) 시나리오를 제공합니다.

  • 소스 코드에 Application Insights SDK를 추가합니다.
  • Node.js에서 npm 패키지를 사용하여 로그합니다.
    • 사용자 지정 콘솔 로그를 수집하기 위해 Node.js SDK enableAutoCollectConsole: true 를 구성해야 합니다.
  • npm 패키지를 사용하여 클라이언트 코드에서 로그합니다.
  • Kubernetes 클러스터 또는 Azure 가상 머신에서 로그를 확인하십시오.

SDK 파이프라인 로그 사용(@Azure/logger)

AZURE_LOG_LEVEL 환경 변수 또는 @azure/logger npm 패키지를 사용하여 SDK 출력의 상세 수준을 제어합니다.

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

Application Insights Node.js SDK 구성

샘플링, 종속성 수집 및 콘솔 로그 캡처를 사용하여 Node.js SDK용 Application Insights 를 초기화합니다.

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" };

상관 관계 및 분산 추적 추가

Application Insights SDK는 작업 및 상관 관계 ID를 요청에 자동으로 삽입합니다. 사용자 지정 상관 관계 또는 속성을 추가하려면 다음을 수행합니다.

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();