Udostępnij przez


OpenTelemetry w zestawie SDK Azure dla pakietów Rust

Podczas pracy z zestawem Azure SDK for Rust potrzebujesz wglądu w operacje zestawu SDK w celu debugowania problemów, monitorowania wydajności i zrozumienia sposobu interakcji aplikacji z usługami platformy Azure. W tym artykule pokazano, jak zaimplementować efektywne strategie rejestrowania i telemetrii oparte na protokole OpenTelemetry, które zapewniają wgląd w wewnętrzne działanie aplikacji Rust na platformie Azure.

Telemetria dla deweloperów platformy Azure

Zestaw Azure SDK for Rust zapewnia kompleksową możliwość obserwowania dzięki integracji openTelemetry, która jest zalecana w przypadku scenariuszy monitorowania i śledzenia rozproszonego. Niezależnie od tego, czy rozwiązujesz problemy z przepływami uwierzytelniania, monitorujesz cykle żądań API, czy analizujesz wąskie gardła wydajności, ten przewodnik obejmuje narzędzia i techniki OpenTelemetry potrzebne do uzyskania wglądu w operacje Azure SDK.

Zestaw Azure SDK dla Rust używa OpenTelemetry jako standardowego podejścia do obserwowalności, zapewniając:

  • Standardowe dane telemetryczne w branży: używanie formatów OpenTelemetry zgodnych z platformami monitorowania
  • Śledzenie rozproszone: monitorowanie żądań przez wiele usług i zasobów platformy Azure
  • Zaawansowani eksporterzy: wysyłanie danych do Jaeger, Prometheus, Grafana i innych platform do obserwacji
  • Korelacja między usługami: Automatyczne propagowanie kontekstu śledzenia między mikrousługami
  • Monitorowanie produkcji: wbudowane w środowiska produkcyjne o dużej skali z próbkowaniem i optymalizacjami wydajności

Ważne

Obecnie firma Microsoft nie udostępnia bezpośredniego eksportera OpenTelemetry usługi Azure Monitor dla aplikacji Rust. Dystrybucja Azure Monitor OpenTelemetry obsługuje tylko platformy .NET, Java, Node.js i Python. W przypadku aplikacji Rust należy wyeksportować dane OpenTelemetry do systemu pośredniego (takiego jak Azure Storage, Event Hubs lub OpenTelemetry Collector), a następnie zaimportować te dane do usługi Azure Monitor przy użyciu obsługiwanych metod pozyskiwania.

Konfigurowanie rejestrowania OpenTelemetry

Aby użyć metody OpenTelemetry, potrzebna jest skrzynia azure_core_opentelemetry . Sam azure_core pakiet nie obejmuje obsługi OpenTelemetry.

  1. Zaloguj się do interfejsu wiersza polecenia platformy Azure:

    az login
    
  2. Tworzenie zasobów usługi Azure Monitor przy użyciu interfejsu wiersza polecenia platformy Azure:

    # 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. Skonfiguruj projekt Rust. Dodaj wymagane zależności do elementu 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"] }
    

    Uwaga / Notatka

    Skrzynia opentelemetry-otlp jest dołączana do eksportowania danych telemetrycznych do modułu zbierającego OpenTelemetry, który może następnie przekazywać dane do usługi Azure Monitor. Bezpośrednie eksportowanie usługi Azure Monitor z aplikacji Rust nie jest obsługiwane.

  4. Utwórz główną aplikację przy użyciu konfiguracji OpenTelemetry. Aby uzyskać szczegółowe informacje, zobacz dokumentację azure_core_opentelemetry .

  5. Ustaw wymagane zmienne środowiskowe i uruchom aplikację:

    # 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
    

Po skonfigurowaniu biblioteki OpenTelemetry w aplikacji i uruchomieniu jej możesz dodać niestandardową instrumentację i monitorować dane telemetryczne.

Eksportowanie danych telemetrycznych do usługi Azure Monitor

Ponieważ Rust nie ma bezpośredniego eksportera OpenTelemetry dla usługi Azure Monitor, należy zastosować pośrednie podejście, aby przesłać dane telemetryczne do usługi Azure Monitor. Poniżej przedstawiono zalecane metody:

Moduł zbierający OpenTelemetry działa jako warstwa środkowa, która może odbierać dane telemetryczne z aplikacji Rust i przekazywać je do usługi Azure Monitor:

  1. Wdróż moduł zbierający OpenTelemetry w środowisku (jako sidecar, agenta lub bramy)
  2. Skonfiguruj swoją aplikację Rust do eksportowania do Collectora przy użyciu protokołu OTLP (OpenTelemetry Protocol)
  3. Konfigurowanie modułu zbierającego za pomocą eksportera usługi Azure Monitor w celu przekazywania danych do usługi Application Insights

Opcja 2: Usługi Azure Storage i interfejs API pozyskiwania danych

W przypadku scenariuszy, w których potrzebujesz większej kontroli nad przetwarzaniem danych:

  1. Eksportowanie danych telemetrycznych do usługi Azure Storage (Blob Storage lub Data Lake)
  2. Przetwarzanie danych przy użyciu usługi Azure Functions, Logic Apps lub aplikacji niestandardowych
  3. Ładowanie przetworzonych danych do usługi Azure Monitor za pomocą interfejsu API do ładowania dzienników

Opcja 3: Przesyłanie strumieniowe Event Hubs

W przypadku przetwarzania danych telemetrycznych w czasie rzeczywistym:

  1. Przesyłaj dane telemetryczne do usługi Azure Event Hubs z twojej aplikacji Rust.
  2. Przetwarzanie zdarzeń przy użyciu usługi Azure Stream Analytics, usługi Azure Functions lub odbiorców niestandardowych
  3. Przekazywanie przetworzonych danych telemetrycznych do usługi Azure Monitor lub Application Insights

Dostosowywanie danych telemetrycznych

OpenTelemetry zapewnia elastyczną strukturę dostosowywania danych telemetrycznych zgodnie z potrzebami aplikacji. Użyj tych strategii, aby ulepszyć dane telemetryczne:

Instrumentacja kodu aplikacji

Dodanie niestandardowej instrumentacji do kodu aplikacji pomaga skorelować logikę biznesową z operacjami zestawu Azure SDK. Ta korelacja ułatwia zrozumienie pełnego przepływu operacji.

Technique Przeznaczenie Implementation
Niestandardowe przedziały dla operacji w Azure Tworzenie jasnej hierarchii pokazującej, jak logika aplikacji odnosi się do operacji platformy Azure Zawijanie wywołań zestawu Azure SDK przy użyciu metod tworzenia zakresu OpenTelemetry
Korelowanie logiki aplikacji z wywołaniami zestawu SDK Łączenie operacji biznesowych z podstawowymi wywołaniami zestawu Azure SDK Łączenie operacji biznesowych z wywołaniami wyzwolonych usług platformy Azure za pomocą kontekstu span
Tworzenie ścieżek diagnostycznych Przechwytywanie istotnego kontekstu telemetrii na przestrzeni przepływów pracy Dodawanie pól strukturalnych (identyfikatorów użytkowników, identyfikatorów żądań, identyfikatorów obiektów biznesowych) do zakresów

Analiza wydajności

Funkcja OpenTelemetry zawiera szczegółowe informacje na temat wzorców wydajności zestawu Azure SDK. Te szczegółowe informacje ułatwiają identyfikowanie i rozwiązywanie wąskich gardeł wydajności.

Typ analizy Co ujawnia Jak stosować
Czas trwania operacji zestawu SDK Jak długo trwa różne operacje platformy Azure Wykorzystaj czas trwania zakresu, który OpenTelemetry przechwytuje automatycznie, aby zidentyfikować wolne operacje.
Wąskie gardła wywołań usług Miejsce, w którym aplikacja spędza czas na oczekiwaniu na odpowiedzi na platformę Azure Porównanie chronometrażu między usługami i operacjami platformy Azure w celu znalezienia problemów z wydajnością
Wzorce operacji współbieżnych Nakładanie się i zależności między operacjami Analizowanie danych telemetrycznych w celu zrozumienia możliwości równoległości podczas wykonywania wielu wywołań platformy Azure

Diagnostyka błędów

Funkcja OpenTelemetry przechwytuje bogaty kontekst błędu, który wykracza poza proste komunikaty o błędach. Ten kontekst pomaga zrozumieć nie tylko to, co się nie powiodło, ale także dlaczego i w jakich okolicznościach.

Zrozumienie propagacji błędów zestawu SDK: Prześledź, jak błędy przenikają przez kod aplikacji i warstwy zestawu SDK Azure. Ten ślad pomaga zrozumieć pełną ścieżkę błędu i zidentyfikować główną przyczynę.

Przejściowe i trwałe błędy dziennika: rozróżnianie tymczasowych błędów (takich jak przekroczenia limitu czasu sieci, które mogą zakończyć się powodzeniem ponawiania próby) i trwałych błędów (takich jak błędy uwierzytelniania, które wymagają zmian konfiguracji). To rozróżnienie ułatwia tworzenie odpornych aplikacji.

Omówienie dzienników, metryk i alertów

Aplikacje i usługi generują dane telemetryczne, aby ułatwić monitorowanie ich kondycji, wydajności i użycia. Platforma Azure kategoryzuje tę telemetrię na dzienniki, metryki i alerty.

Platforma Azure oferuje cztery rodzaje danych telemetrycznych:

Typ telemetrii Co to daje Gdzie ją znaleźć dla każdej usługi
Metrics Dane liczbowe, szeregi czasowe (procesor CPU, pamięć itp.) Metryki w portalu lub az monitor metrics interfejsie wiersza polecenia
Alerts Powiadomienia proaktywne po osiągnięciu progów Alerty w portalu lub w az monitor metrics alert interfejsie wiersza polecenia
Dzienniki Zdarzenia i diagnostyka oparta na tekście (internet, aplikacja) App Service Logs, Monitor Funkcji, Diagnostyka Aplikacji Kontenerowych
Dzienniki niestandardowe Własne dane telemetryczne aplikacji za pośrednictwem usługi App Insights Tabela Dzienniki (ślad) zasobu usługi Application Insights

Wybierz odpowiednią telemetrię dla swojego pytania:

Scenario Użyj dzienników... Użyj metryk... Użyj alertów...
"Czy moja aplikacja internetowa została uruchomiona i odpowiedziała?" Dzienniki serwera internetowego usługi App Service (dzienniki) N/A N/A
Czy mój limit czasu funkcji przekracza czas, czy ulega awarii? Dzienniki wywołania funkcji (Monitor) Metryka czasu trwania wykonywania funkcji Alert dotyczący "Błędy funkcji >0"
Jak bardzo obciążona jest moja usługa i czy może się skalować? N/A Wydajność usługi/procesora w metrykach Alert autoskalowania przy obciążeniu CPU > 70%
"Jakie wyjątki zgłasza mój kod?" Niestandardowe logi śledzenia w usłudze Application Insights N/A Alert dotyczący błędu "ServerExceptions >0"
Czy przekroczyłem limity transakcji lub przydziału? N/A Metryki związane z limitami przydziału (transakcje, ograniczanie przepustowości) Alert dotyczący "ThrottlingCount >0"

Wyświetlanie danych telemetrycznych w usłudze Azure Monitor

Po skonfigurowaniu biblioteki OpenTelemetry w aplikacji Rust i skonfigurowaniu pośredniego mechanizmu eksportu można wyświetlić dane telemetryczne w usłudze Azure Monitor za pomocą usługi Application Insights. Ponieważ Rust nie ma bezpośrednich możliwości eksportowania do Azure Monitor, należy zaimplementować jedną z następujących metod:

  • Moduł zbierający OpenTelemetry: skonfiguruj moduł zbierający OpenTelemetry w celu odbierania danych z aplikacji Rust i przekazywania ich do usługi Azure Monitor
  • Integracja usługi Azure Storage: eksportowanie danych telemetrycznych do usługi Azure Storage i używanie interfejsów API pozyskiwania danych usługi Azure Monitor do importowania danych
  • Przesyłanie strumieniowe za pomocą Event Hubs: Przekazywanie danych telemetrycznych za pośrednictwem usługi Azure Event Hubs i przetwarzanie ich do pozyskiwania danych w usłudze Azure Monitor

Gdy dane telemetryczne dotrą do usługi Azure Monitor za pomocą jednej z tych metod, możesz je przeanalizować:

  1. Przejdź do usługi Application Insights w witrynie Azure Portal:

    az monitor app-insights component show \
      --app $APP_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query "{name:name,appId:appId,instrumentationKey:instrumentationKey}"
    
  2. Wyświetl ślady i dzienniki:

    • Przejdź do Application Insights>wyszukiwania transakcji
    • Poszukaj śladów z nazwami operacji, takimi jak get_keyvault_secrets
    • Sprawdź sekcję Dzienniki i uruchom zapytania KQL:
    traces
    | where timestamp > ago(1h)
    | where message contains "Azure operations" or message contains "secrets"
    | order by timestamp desc
    
  3. Wyświetlanie rozproszonych śladów:

    • Przejdź do mapy aplikacji , aby wyświetlić zależności usługi
    • Wybierz pozycję Wydajność , aby wyświetlić chronometraż operacji
    • Wyświetlanie pełnych przepływów żądań przy użyciu szczegółowych informacji o transakcji typu end-to-end
  4. Niestandardowe zapytania KQL dla aplikacji Rust:

    // 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
    

Monitorowanie w czasie rzeczywistym

Skonfiguruj monitorowanie na żywo, aby wyświetlać dane w miarę ich nadejścia:

# 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)

Optymalizacja kosztów

Możesz znacznie obniżyć koszt usługi Azure Monitor , poznając najlepsze rozwiązania dotyczące opcji konfiguracji i możliwości zmniejszenia ilości zbieranych danych w usłudze Azure Monitor.

Kluczowe strategie dla aplikacji Rust:

  • Użyj odpowiednich poziomów dziennika: skonfiguruj poziomy dzienników OpenTelemetry odpowiednio dla środowiska produkcyjnego, aby zmniejszyć ilość
  • Implementowanie próbkowania: konfigurowanie próbkowania OpenTelemetry dla aplikacji o dużym wolumenie danych
  • Filtrowanie poufnych danych: unikaj rejestrowania wpisów tajnych, tokenów lub dużych ładunków, które zwiększają koszty
  • Monitorowanie pozyskiwania danych: Regularnie sprawdzaj użycie i koszty danych usługi Application Insights

Zasoby i następne kroki