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를 구성해야 합니다.
- 사용자 지정 콘솔 로그를 수집하기 위해 Node.js SDK
- 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();
관련 콘텐츠
- Azure Data Explorer(Kusto) 개요
- Azure App Service의 앱에 대한 진단 로깅을 활성화합니다.
- Azure 플랫폼 로그를 사용하는 방법 알아보기
- Azure MCP 서버 모니터 도구