Azure Monitor Exporter 설정
주의
Azure Metrics Exporter 사용 시 비용 안내
Azure Metrics Exporter는 Azure Monitor API를 통해 메트릭을 조회하는 방식이므로, 조회되는 메트릭 수와 API 호출량에 따라 Azure Monitor 사용 요금이 발생할 수 있습니다. 요금은 Azure Monitor의 메트릭 쿼리, API 요청 등의 사용량 기준으로 부과되며, 자세한 내용은 Azure 공식 요금표를 참고하시기 바랍니다.
사전 준비 사항
Azure 구독 및 권한 요구사항
Azure 리소스 메트릭을 수집하기 위해 다음 권한이 필요합니다.
| 권한 | 설명 | 범위 |
|---|---|---|
| Monitoring Reader | Azure Monitor 메트릭 읽기 권한 | Subscription 또는 Resource Group |
| Reader | 리소스 정보 조회(서비스 디스커버리용) | Subscription 또는 Resource Group |
노트
권장 설정
- 최소 권한 원칙에 따라
Monitoring Reader역할 사용 - 특정 리소스 그룹만 모니터링할 경우 해당 범위로 제한
필수 Azure 리소스 정보 수집
Exporter 설정에 필요한 정보를 미리 수집합니다.
| 항목 | 설명 | 예시 |
|---|---|---|
| Subscription ID | Azure 구독 식별자 | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| Tenant ID | Azure AD 테넌트 식별자 | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| Client ID | 등록된 앱의 Application ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| Client Secret | 앱 인증용 비밀키 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| Resource Group | 리소스 그룹명 | xxxxxxxxxx |
| Resource Name | 리소스 이름(서버명/캐시명/네임스페이스명/클러스터명 등) | xxxxxxxxxx |
Azure Metrics Exporter 설치
Exporter 다운로드
# linux/amd64 (x86_64)
wget https://repo.whatap.io/exporter/azure_metrics_exporter/amd64/azure_metrics_exporter
# linux/arm64 (aarch64)
wget https://repo.whatap.io/exporter/azure_metrics_exporter/arm64/azure_metrics_exporter
실행 권한 부여 및 설치
chmod +x azure_metrics_exporter
sudo mv azure_metrics_exporter /usr/local/bin/azure_metrics_exporter
sudo mkdir -p /etc/azure_metrics_exporter
azure.yml 파일 설정
팁
Azure Metrics Exporter를 사용하기 위해서는 수집 대상 리소스와 메트릭을 정의하는 azure.yml 설정 파일이 필요합니다. 수집할 서비스와 메트릭 항목을 선택한 후 설정 파일을 다운로드하여 Exporter가 설치된 서버에 배치합니다.
지원 서비스 목록
주요 지원 서비스는 아래와 같으며 각 서비스의 상세 메트릭 정의는 Azure 공식 문서를 통해 확인할 수 있습니다. 아래 목록 외 추가 서비스 및 메트릭 정의는 Azure Monitor 공식 문서에서 확인할 수 있습니다.
azure.yml 예시 파일
# =============================================================================
# azure.yml example
# - credentials: authentication info (values collected in section 1.2)
# - targets: collect by directly specifying a resource
# - resource_groups: auto-discover by resource group + name regex
# - resource_tags: auto-discover by tag
# =============================================================================
credentials:
subscription_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
targets:
# (1) No aggregations specified: collects all supported (Total/Average/Minimum/Maximum)
- resource: /resourceGroups/example-rg/providers/Microsoft.DBforPostgreSQL/flexibleServers/myserver
metrics:
- name: cpu_percent
- name: memory_percent
# (2) Resource-level aggregation: applied as the default to all metrics in this target
- resource: /resourceGroups/example-rg/providers/Microsoft.DBforPostgreSQL/flexibleServers/myserver
aggregations:
- Average
metrics:
- name: cpu_percent
- name: memory_percent
# (3) Metric-level aggregation: per-metric override (overrides the resource-level value)
- resource: /resourceGroups/example-rg/providers/Microsoft.DBforPostgreSQL/flexibleServers/myserver
aggregations:
- Average # default for this target
metrics:
- name: cpu_percent # -> Average (default applied)
- name: memory_percent # -> Average (default applied)
- name: storage_percent
aggregations:
- Maximum # -> Maximum (overridden at metric level)
- name: iops
aggregations:
- Total
- Maximum # -> Total, Maximum
# Auto-discover by resource group + name regex
resource_groups:
- resource_group: "webapps"
resource_types:
- "Microsoft.Compute/virtualMachines"
resource_name_include_re:
- "testvm.*" # include VMs whose name starts with testvm
resource_name_exclude_re:
- "testvm12" # exclude testvm12
metrics:
- name: "CPU Credits Consumed"
aggregations:
- "Average"
# Auto-discover by tag (resources tagged monitoring=enabled)
resource_tags:
- resource_tag_name: "monitoring"
resource_tag_value: "enabled"
resource_types:
- "Microsoft.Compute/virtualMachines"
metrics:
- name: "CPU Credits Consumed"
aggregations:
- "Average"
- "Maximum"
서비스 등록 및 실행
방법 A: systemd 서비스 등록
sudo tee /etc/systemd/system/azure-metrics-exporter.service > /dev/null <<EOF
[Unit]
Description=Azure Metrics Exporter
After=network.target
[Service]
User=root
ExecStart=/usr/local/bin/azure_metrics_exporter --config.file=/etc/azure_metrics_exporter/azure.yml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable azure-metrics-exporter
sudo systemctl start azure-metrics-exporter
sudo systemctl status azure-metrics-exporter
방법 B: nohup 실행
nohup /usr/local/bin/azure_metrics_exporter \
--config.file=/etc/azure_metrics_exporter/azure.yml \
> /var/log/azure_metrics_exporter.log 2>&1 &
메트릭 수집 확인 및 트러블슈팅
# 전체 메트릭 확인
curl http://localhost:9276/metrics
# PostgreSQL 메트릭 필터링
curl http://localhost:9276/metrics | grep -i postgres
- 정상 출력 예시
# HELP azure_microsoft_dbforpostgresql_flexibleservers_cpu_percent_percent_average
# TYPE azure_microsoft_dbforpostgresql_flexibleservers_cpu_percent_percent_average gauge
azure_microsoft_dbforpostgresql_flexibleservers_cpu_percent_percent_average{...} 3.5
- 메트릭 이름 변환 규칙:
azure_{namespace}_{metric명}_{단위}_{집계방식}
트러블슈팅
| 증상 | 원인 | 해결 방법 |
|---|---|---|
401 Unauthorized | Azure 인증 실패 | credentials 입력값 확인 |
403 Forbidden | 권한 부족 | 서비스 주체에 Monitoring Reader 권한 부여 |
| 메트릭 값 없음 | Enhanced 메트릭 비활성화 | 서버 파라미터 활성화 |
| 서버 중지 상태 | DB 중지됨 | az postgres flexible-server start 실행 |
OpenAgent 다운로드 및 설정
모든 파일은 동일한 디렉토리에 위치해야 합니다.
## Example
/opt/whatap/openagent/
├── openagent # Executable file
├── whatap.conf # Configuration file
└── scrape_config.yaml # Scraping configuration file