다음을 통해 공유


Rust 크레이트용 Azure SDK의 OpenTelemetry

Rust용 Azure SDK를 사용하는 경우 문제를 디버그하고, 성능을 모니터링하고, 애플리케이션이 Azure 서비스와 상호 작용하는 방식을 이해하기 위해 SDK 작업에 대한 가시성이 필요합니다. 이 문서에서는 Azure에서 Rust 애플리케이션의 내부 작동에 대한 인사이트를 제공하는 효과적인 OpenTelemetry 기반 로깅 및 원격 분석 전략을 구현하는 방법을 보여 줍니다.

Azure 개발자를 위한 원격 분석

Rust용 Azure SDK는 OpenTelemetry 통합을 통해 포괄적인 관찰 가능성을 제공하며, 모니터링 및 분산 추적 시나리오에 권장됩니다. 인증 흐름 문제 해결, API 요청 주기 모니터링 또는 성능 병목 상태 분석 등, 이 가이드에서는 Azure SDK 작업에 대한 가시성을 확보하는 데 필요한 OpenTelemetry 도구 및 기술에 대해 설명합니다.

Rust용 Azure SDK 크레이트는 OpenTelemetry를 관찰 가능성에 대한 표준 접근 방법으로 사용하여 다음을 제공합니다.

  • 업계 표준 원격 분석: 모니터링 플랫폼과 호환되는 OpenTelemetry 형식 사용
  • 분산 추적: 여러 서비스 및 Azure 리소스에서 요청 추적
  • 고급 내보내기: Jaeger, Prometheus, Grafana 및 기타 관찰 플랫폼에 데이터 보내기
  • 서비스 간 상관 관계: 마이크로 서비스 간에 추적 컨텍스트를 자동으로 전파
  • 프로덕션 모니터링: 샘플링 및 성능 최적화를 사용하여 대규모 프로덕션 환경을 위해 빌드

중요합니다

현재 Microsoft는 Rust 애플리케이션에 대한 직접 Azure Monitor OpenTelemetry 내보내기를 제공하지 않습니다. Azure Monitor OpenTelemetry Distro는 .NET, Java, Node.js및 Python만 지원합니다. Rust 애플리케이션의 경우 OpenTelemetry 데이터를 중간 시스템(예: Azure Storage, Event Hubs 또는 OpenTelemetry Collector)으로 내보낸 다음 지원되는 수집 방법을 사용하여 해당 데이터를 Azure Monitor로 가져와야 합니다.

OpenTelemetry 로깅 설정

OpenTelemetry를 사용하려면 azure_core_opentelemetry 크레이트가 필요합니다. azure_core 패키지에만 OpenTelemetry 지원이 포함되지 않습니다.

  1. Azure CLI에 로그인합니다.

    az login
    
  2. Azure CLI를 사용하여 Azure Monitor 리소스를 만듭니다.

    # Set variables
    RESOURCE_GROUP="rust-telemetry-rg"
    LOCATION="eastus"
    APP_INSIGHTS_NAME="rust-app-insights"
    LOG_ANALYTICS_WORKSPACE="rust-logs-workspace"
    
    # Create resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
    # Create Log Analytics workspace
    WORKSPACE_ID=$(az monitor log-analytics workspace create \
      --resource-group $RESOURCE_GROUP \
      --workspace-name $LOG_ANALYTICS_WORKSPACE \
      --location $LOCATION \
      --query id -o tsv)
    
    # Create Application Insights instance
    az extension add --name application-insights
    INSTRUMENTATION_KEY=$(az monitor app-insights component create \
      --app $APP_INSIGHTS_NAME \
      --location $LOCATION \
      --resource-group $RESOURCE_GROUP \
      --workspace $WORKSPACE_ID \
      --query instrumentationKey -o tsv)
    
    # Get connection string
    CONNECTION_STRING=$(az monitor app-insights component show \
      --app $APP_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query connectionString -o tsv)
    
    echo "Application Insights Connection String: $CONNECTION_STRING"
    
  3. Rust 프로젝트를 구성합니다. 필요한 종속성을 귀하의 Cargo.toml에 추가합니다.

    [dependencies]
    azure_core_opentelemetry = "*"
    azure_security_keyvault_secrets = "*"
    azure_identity = "*"
    opentelemetry = "0.31"
    opentelemetry_sdk = "0.31"
    opentelemetry-otlp = "0.31"  # For exporting to OpenTelemetry Collector
    tokio = { version = "1.47.1", features = ["full"] }
    

    비고

    OpenTelemetry 수집기로 원격 분석 데이터를 내보내고, Azure Monitor로 데이터를 전달하기 위해 포함된 opentelemetry-otlp 크레이트입니다. Rust 애플리케이션에서 직접 Azure Monitor 내보내기는 지원되지 않습니다.

  4. OpenTelemetry 구성을 사용하여 기본 애플리케이션을 만듭니다. 자세한 내용은 azure_core_opentelemetry 설명서를 참조하세요.

  5. 필요한 환경 변수를 설정하고 애플리케이션을 실행합니다.

    # Set Key Vault URL (replace with your actual Key Vault URL)
    export AZURE_KEYVAULT_URL="https://mykeyvault.vault.azure.net/"
    
    # Run the application
    cargo run
    

애플리케이션에서 OpenTelemetry를 구성하고 실행한 후 사용자 지정 계측을 추가하고 원격 분석 데이터를 모니터링할 수 있습니다.

Azure Monitor로 원격 분석 내보내기

Rust에는 직접 Azure Monitor OpenTelemetry 내보내기가 없으므로 원격 분석 데이터를 Azure Monitor로 가져오는 간접 접근 방식을 구현해야 합니다. 권장되는 방법은 다음과 같습니다.

OpenTelemetry 수집기는 Rust 애플리케이션에서 원격 분석을 수신하고 Azure Monitor로 전달할 수 있는 중간 계층 역할을 합니다.

  1. 환경에 오픈 텔레메트리 수집기를 사이드카, 에이전트, 혹은 게이트웨이로 배포하십시오.
  2. Rust 애플리케이션을 구성하여 OTLP(OpenTelemetry 프로토콜)을 사용해 Collector로 내보내기
  3. Application Insights에 데이터를 전달하도록 Azure Monitor 내보내기를 사용하여 수집기 구성

옵션 2: Azure Storage + 데이터 수집 API

데이터 처리에 대한 더 많은 제어가 필요한 시나리오의 경우:

  1. Azure Storage로 원격 분석 내보내기 (Blob Storage 또는 Data Lake)
  2. Azure Functions, Logic Apps 또는 사용자 지정 애플리케이션을 사용하여 데이터 처리
  3. Logs Ingestion API를 사용하여 처리된 데이터를 Azure Monitor로 수집

옵션 3: Event Hubs 스트리밍

실시간 원격 분석 처리의 경우:

  1. Rust 애플리케이션에서 원격 분석을 Azure Event Hubs로 스트리밍하기
  2. Azure Stream Analytics, Azure Functions 또는 사용자 지정 소비자를 사용하여 이벤트 처리
  3. 처리된 원격 분석을 Azure Monitor 또는 Application Insights로 전달

원격 분석 데이터 사용자 지정

OpenTelemetry는 애플리케이션의 요구에 맞게 원격 분석 데이터를 사용자 지정하기 위한 유연한 프레임워크를 제공합니다. 다음 전략을 사용하여 텔레메트리를 개선하세요.

애플리케이션 코드 계측

애플리케이션 코드에 사용자 지정 계측을 추가하면 비즈니스 논리와 Azure SDK 작업의 상관 관계를 지정할 수 있습니다. 이러한 상관 관계를 통해 작업의 전체 흐름을 더 쉽게 이해할 수 있습니다.

Technique 목적 Implementation
Azure 작업에 대한 사용자 지정 범위 애플리케이션 논리가 Azure 작업과 어떻게 관련되는지 보여 주는 명확한 계층 구조 만들기 OpenTelemetry 스팬 생성 메서드를 사용하여 Azure SDK 호출을 래핑하기
SDK 호출과 애플리케이션 논리 상관 관계 지정 기본 Azure SDK 호출을 사용하여 비즈니스 작업 연결 범위 컨텍스트를 사용하여 트리거된 Azure 서비스 호출과 비즈니스 작업 연결
진단 추적 만들기 워크플로 간 원격 분석에 대한 중요한 컨텍스트 캡처 범위에 구조화된 필드(사용자 ID, 요청 ID, 비즈니스 개체 식별자) 추가

성능 분석

OpenTelemetry는 Azure SDK 성능 패턴에 대한 자세한 인사이트를 제공합니다. 이러한 인사이트는 성능 병목 상태를 식별하고 해결하는 데 도움이 됩니다.

분석 유형 그것이 드러내는 것 사용 방법
SDK 작업 기간 다른 Azure 작업에 걸리는 시간 OpenTelemetry가 자동으로 캡처하는 범위 타이밍을 사용하여 느린 작업을 식별합니다.
서비스 호출 병목 상태 애플리케이션이 Azure 응답을 기다리는 데 시간을 소비하는 위치 Azure 서비스 및 작업 간 타이밍을 비교하여 성능 문제를 찾습니다.
동시 작업 패턴 작업 간의 겹침 및 종속성 원격 분석 데이터를 분석하여 여러 Azure를 호출할 때의 병렬화 기회를 파악하기

오류 진단

OpenTelemetry는 간단한 오류 메시지를 넘어서는 풍부한 오류 컨텍스트를 캡처합니다. 이 컨텍스트는 실패한 것뿐만 아니라 그 이유와 상황을 이해하는 데 도움이 됩니다.

SDK 오류 전파 이해: 애플리케이션 코드 및 Azure SDK 계층을 통해 오류가 어떻게 버블업되는지 추적합니다. 이 추적은 전체 오류 경로를 이해하고 근본 원인을 식별하는 데 도움이 됩니다.

로그 일시적 오류 및 영구 오류: 임시 오류(예: 다시 시도 시 성공할 수 있는 네트워크 시간 제한)와 영구 오류(예: 구성 변경이 필요한 인증 오류)를 구분합니다. 이러한 구분은 복원력 있는 애플리케이션을 빌드하는 데 도움이 됩니다.

로그, 메트릭 및 경고 이해

애플리케이션 및 서비스는 원격 분석 데이터를 생성하여 상태, 성능 및 사용량을 모니터링하는 데 도움이 됩니다. Azure는 이 원격 분석을 로그, 메트릭 및 경고로 분류합니다.

Azure는 다음과 같은 네 가지 종류의 원격 분석을 제공합니다.

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

질문에 적합한 원격 분석을 선택합니다.

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

Azure Monitor에서 원격 분석 데이터 보기

Rust 애플리케이션에서 OpenTelemetry를 설정하고 중간 내보내기 메커니즘을 구성한 후 Application Insights를 통해 Azure Monitor에서 원격 분석 데이터를 볼 수 있습니다. Rust에는 직접 Azure Monitor 내보내기 기능이 없으므로 다음 방법 중 하나를 구현해야 합니다.

  • OpenTelemetry 수집기: Rust 애플리케이션에서 데이터를 수신하고 Azure Monitor로 전달하도록 OpenTelemetry 수집 기를 구성합니다.
  • Azure Storage 통합: Azure Storage로 원격 분석 내보내기 및 Azure Monitor 데이터 수집 API 를 사용하여 데이터 가져오기
  • Event Hubs 스트리밍: Azure Event Hubs를 통해 원격 분석 데이터를 스트리밍하여 Azure Monitor로 수집할 준비를 합니다.

원격 분석 데이터가 다음 방법 중 하나를 통해 Azure Monitor에 도달하면 분석할 수 있습니다.

  1. Azure Portal에서 Application Insights로 이동합니다.

    az monitor app-insights component show \
      --app $APP_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query "{name:name,appId:appId,instrumentationKey:instrumentationKey}"
    
  2. 추적 및 로그 보기:

    • Application Insights>트랜잭션 검색으로 이동
    • 다음과 같은 작업 이름이 있는 추적을 찾습니다. get_keyvault_secrets
    • 로그 섹션을 확인하고 KQL 쿼리를 실행합니다.
    traces
    | where timestamp > ago(1h)
    | where message contains "Azure operations" or message contains "secrets"
    | order by timestamp desc
    
  3. 분산 추적 보기:

    • 애플리케이션 맵으로 이동하여 서비스 종속성 확인
    • 성능을 선택하여 작업 타이밍 확인
    • 엔드 투 엔드 트랜잭션 세부 정보를 사용하여 전체 요청 흐름 보기
  4. Rust 애플리케이션에 대한 사용자 지정 KQL 쿼리:

    // View all custom logs from your Rust app
    traces
    | where customDimensions.["service.name"] == "rust-azure-app"
    | order by timestamp desc
    
    // View Azure SDK HTTP operations
    dependencies
    | where type == "HTTP"
    | where target contains "vault.azure.net"
    | order by timestamp desc
    
    // Monitor error rates
    traces
    | where severityLevel >= 3  // Warning and above
    | summarize count() by bin(timestamp, 1m), severityLevel
    | render timechart
    

실시간으로 모니터링

라이브 모니터링을 설정하여 데이터가 도착하는 것을 확인합니다.

# Stream live logs (requires Azure CLI)
az monitor app-insights events show \
  --app $APP_INSIGHTS_NAME \
  --resource-group $RESOURCE_GROUP \
  --event traces \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%S)

비용 최적화

구성 옵션에 대한모범 사례와 Azure Monitor가 수집하는 데이터의 양을 줄일 수 있는 기회를 이해하여 Azure Monitor에 대한 비용을 크게 줄일 수 있습니다.

Rust 애플리케이션에 대한 주요 전략:

  • 적절한 로그 수준 사용: 볼륨을 줄이기 위해 프로덕션에 적합한 OpenTelemetry 로그 수준 구성
  • 샘플링 구현: 대용량 애플리케이션에 대한 OpenTelemetry 샘플링 구성
  • 중요한 데이터 필터링: 비용을 증가시키는 비밀, 토큰 또는 대용량 페이로드 로깅 방지
  • 데이터 수집 모니터링: Application Insights 데이터 사용량 및 비용을 정기적으로 검토합니다.

리소스 및 다음 단계