Rust kasaları için Azure SDK'da OpenTelemetry

Rust kasaları için Azure SDK ile çalışırken, sorunların hatalarını ayıklamak, performansı izlemek ve uygulamanızın Azure hizmetleriyle nasıl etkileşime geçtiğini anlamak için SDK işlemlerinin görünürlüğüne ihtiyacınız vardır. Azure'da Rust uygulamalarının iç işleyişiyle ilgili içgörüler sağlayan etkili OpenTelemetry tabanlı günlüklendirme ve telemetri stratejilerini nasıl uygulayabileceğiniz bu makalede gösterilmektedir.

Azure geliştiricileri için telemetri

Rust için Azure SDK kasaları, izleme ve dağıtılmış izleme senaryoları için önerdiğimiz OpenTelemetry tümleştirmesi aracılığıyla kapsamlı gözlemlenebilirlik sağlar. Kimlik doğrulama akışlarında sorun giderme, API istek döngülerini izleme veya performans sorunlarını analiz etme konusunda bu kılavuz, Azure SDK işlemlerinizde görünürlük elde etmek için ihtiyacınız olan OpenTelemetry araçlarını ve tekniklerini kapsar.

Rust kasaları için Azure SDK, gözlemlenebilirlik için standart yaklaşım olarak OpenTelemetry'yi kullanır ve şunları sağlar:

  • Endüstri standardı telemetri: İzleme platformlarıyla uyumlu OpenTelemetry biçimlerini kullanın
  • Dağıtılmış izleme: Birden çok hizmette ve Azure kaynağında istekleri izleme
  • Gelişmiş ihracatçılar: Jaeger, Prometheus, Grafana ve diğer gözlemlenebilirlik platformlarına veri gönderin
  • Hizmetler arasında bağıntı: mikro hizmetler arasında izleme bağlamlarını otomatik olarak yayma
  • Üretim izleme: Örnekleme ve performans iyileştirmeleri ile yüksek ölçekli üretim ortamları için tasarlanmıştır

Önemli

Microsoft şu anda Rust uygulamaları için doğrudan bir Azure İzleyici OpenTelemetry dışa aktarıcısı sunmuyor. Azure İzleyici OpenTelemetry Distro yalnızca .NET, Java, Node.jsve Python'ı destekler. Rust uygulamaları için OpenTelemetry verilerini bir ara sisteme (Azure Depolama, Event Hubs veya OpenTelemetry Collector gibi) dışarı aktarmanız ve ardından desteklenen alım yöntemlerini kullanarak bu verileri Azure İzleyici'ye aktarmanız gerekir.

OpenTelemetry günlüğünü ayarlama

OpenTelemetry'yi kullanmak için azure_core_opentelemetry paketine ihtiyacınız vardır. azure_core paketi tek başına OpenTelemetry desteği içermez.

  1. Azure CLI'da oturum açın:

    az login
    
  2. Azure CLI kullanarak Azure İzleyici kaynakları oluşturma:

    # 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 projenizi yapılandırın. Gerekli bağımlılıkları Cargo.toml öğesine ekleyin.

    [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"] }
    

    Uyarı

    OpenTelemetry Toplayıcısı'na telemetri verilerini aktarmak için opentelemetry-otlp paketi dahildir ve bu, verileri Azure İzleyici'ye iletebilir. Rust uygulamalarından doğrudan Azure İzleyici dışarı aktarma desteklenmez.

  4. OpenTelemetry yapılandırmasıyla ana uygulamanızı oluşturun. Ayrıntılar için azure_core_opentelemetry belgelerine bakın.

  5. Gerekli ortam değişkenlerini ayarlayın ve uygulamanızı çalıştırın:

    # 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
    

Uygulamanızda OpenTelemetry'yi yapılandırdıktan ve çalıştırdıktan sonra özel izleme ekleyebilir ve telemetri verilerini izleyebilirsiniz.

Telemetriyi Azure İzleyici'ye aktarma

Rust'ın doğrudan bir Azure İzleme OpenTelemetry ihracatçısı olmadığından, telemetri verilerinizi Azure İzleme'ye almak için dolaylı bir yaklaşım uygulamanız gerekir. Önerilen yöntemler şunlardır:

OpenTelemetry Collector, Rust uygulamanızdan telemetri alabilen ve Azure İzleyici'ye iletebilen bir orta katman görevi görür:

  1. Ortamınızda OpenTelemetry Toplayıcısı'nı dağıtın (yan konteyner, ajan veya ağ geçidi olarak)
  2. Rust uygulamanızı OTLP kullanarak Toplayıcıya aktaracak şekilde yapılandırma (OpenTelemetry Protokolü)
  3. Toplayıcıyı Azure İzleyici veri ihracatçısı ile Application Insights'a veri iletmek üzere yapılandırın

2. Seçenek: Azure Depolama + Veri Alımı API'si

Veri işleme üzerinde daha fazla denetime ihtiyacınız olan senaryolar için:

  1. Telemetriyi Azure Depolama'ya (Blob Depolama veya Veri Gölü) dışarı aktarma
  2. Azure İşlevleri, Logic Apps veya özel uygulamaları kullanarak verileri işleme
  3. İşlenen verileri Günlük Alımı API'si kullanarak Azure İzleyici'a aktar

Seçenek 3: Event Hubs Akış

Gerçek zamanlı telemetri işleme için:

  1. Rust uygulamanızdan Azure Event Hubs'a telemetri akışı
  2. Azure Stream Analytics, Azure İşlevleri veya özel tüketicileri kullanarak olayları işleme
  3. İşlenen telemetriyi Azure İzleyici'ye veya Application Insights'a iletme

Telemetri verilerini özelleştirme

OpenTelemetry, telemetri verilerini uygulamanızın gereksinimlerine uyacak şekilde özelleştirmeye yönelik esnek bir çerçeve sağlar. Telemetrinizi geliştirmek için şu stratejileri kullanın:

Uygulama kodunuzu izleme

Uygulama kodunuza özel ölçümleme eklemek, iş mantığınızı Azure SDK işlemleriyle ilişkilendirmenize yardımcı olur. Bu bağıntı, tam işlem akışının anlaşılmasını kolaylaştırır.

Technique Amaç Implementation
Azure işlemleri için özel yayılma alanları Uygulama mantığının Azure işlemleriyle ilişkisini gösteren net bir hiyerarşi oluşturma OpenTelemetry span oluşturma yöntemlerini kullanarak Azure SDK çağrılarını sarma
Uygulama mantığını SDK çağrılarıyla ilişkilendirme İş operasyonlarını temel alınan Azure SDK çağrılarıyla bağlama İş işlemlerini tetiklenen Azure hizmet çağrılarıyla bağlamak için span bağlamı kullanma
Tanılama izleri oluşturma İş akışları arasında telemetri için önemli bağlamı yakalama Span'lara yapılandırılmış alanlar (kullanıcı kimlikleri, istek kimlikleri, iş nesnesi tanımlayıcıları) ekleme

Performans analizi

OpenTelemetry, Azure SDK performans desenleri hakkında ayrıntılı içgörüler sağlar. Bu içgörüler performans sorunlarını belirlemenize ve çözmenize yardımcı olur.

Çözümleme Türü Ortaya Çıkardıkları Nasıl Kullanılır?
SDK işlem süresi Farklı Azure işlemleri ne kadar sürer? Yavaş işlemleri tanımlamak için OpenTelemetry'nin otomatik olarak yakaladığı yayılma zamanlamasını kullanın
Hizmet çağrısı darboğazları Uygulamanızın Azure yanıtlarını beklerken zaman harcadığı yer Performans sorunlarını bulmak için Azure hizmetleri ve işlemleri arasındaki zamanlamayı karşılaştırma
Eşzamanlı işlem desenleri İşlemler arasındaki çakışma ve bağımlılıklar Birden çok Azure çağrısı yaparken paralelleştirme fırsatlarını anlamak için telemetri verilerini analiz etme

Hata tanılama

OpenTelemetry, basit hata iletilerinin ötesine geçen zengin hata bağlamı yakalar. Bu bağlam yalnızca neyin başarısız olduğunu değil, neden ve hangi koşullar altında başarısız olduğunu anlamanıza yardımcı olur.

SDK hata yayma işlemini anlama: Uygulama kodunuz ve Azure SDK katmanlarınızda hataların nasıl patladığını takip edin. Bu izleme, hata yolunun tamamını anlamanıza ve kök nedeni belirlemenize yardımcı olur.

Günlük geçici ve kalıcı hatalar: Geçici hatalar (yeniden denemede başarılı olabilecek ağ zaman aşımları gibi) ve kalıcı hatalar (yapılandırma değişiklikleri gerektiren kimlik doğrulama hataları gibi) arasında ayrım yapın. Bu ayrım, dayanıklı uygulamalar oluşturmanıza yardımcı olur.

Günlükleri, ölçümleri ve uyarıları anlama

Uygulamalarınız ve hizmetleriniz, sistem durumlarını, performanslarını ve kullanımlarını izlemenize yardımcı olmak için telemetri verileri oluşturur. Azure bu telemetri verilerini günlüklere, ölçümlere ve uyarılara kategorilere ayırır.

Azure dört tür telemetri sunar:

Telemetri türü Size ne verir? Her hizmet için nerede bulunur?
Metrics Sayısal, zaman serisi verileri (CPU, bellek vb.) Portalda veya CLI'da az monitor metrics
Alerts Eşikler aşıldığında proaktif bildirimler Portalda veya CLI'da az monitor metrics alert
Kayıtlar Metin tabanlı olaylar ve tanılama (web, uygulama) App Service Günlükleri, İşlevler İzleyicisi, Kapsayıcı Uygulamalar Tanılama
Özel günlükler App Insights aracılığıyla kendi uygulama telemetriniz Application Insights kaynağınızın Günlükler (İzleme) tablosu

Sorunuz için doğru telemetriyi seçin:

Scenario Günlükleri kullanma Ölçümleri kullanma Uyarıları kullanma
"Web uygulamam başladı ve yanıt verdi mi?" App Service web sunucusu günlükleri (Günlükler) N/A N/A
"İşlevim zaman aşımına mı uğradı yoksa başarısız mı?" İşlev çağırma günlükleri (İzleyici) İşlev yürütme süresi ölçümü "Uyarı: 'İşlev Hataları >0'"
"Hizmetim ne kadar meşgul ve ölçeklendirilebilir mi?" N/A Ölçümlerde hizmet aktarım hızı/CPU CPU% > 70% olduğunda otomatik ölçeklendirme uyarısı
Kodum hangi hataları atıyor? Application Insights'ta Özel İzleme günlükleri N/A "ServerExceptions >0" uyarı
"İşlem veya kota sınırlarımı aştım mı?" N/A Kotaya İlişkin Ölçümler (İşlemler, Kısıtlama) "ThrottlingCount >0" uyarısı

Azure İzleyici'de telemetri verilerini görüntüleme

Rust uygulamanızda OpenTelemetry'yi ayarladıktan ve bir ara dışarı aktarma mekanizması yapılandırdıktan sonra Telemetri verilerini Application Insights aracılığıyla Azure İzleyici'de görüntüleyebilirsiniz. Rust doğrudan Azure İzleyici dışarı aktarma özelliklerine sahip olmadığından şu yaklaşımlardan birini uygulamanız gerekir:

  • OpenTelemetry Collector: OpenTelemetry Collector'ı Rust uygulamanızdan veri alacak ve Azure İzleyici'ye iletecek şekilde yapılandırın
  • Azure Depolama tümleştirmesi: Telemetri verilerini Azure Depolama'ya aktarın ve verileri içeri aktarmak için Azure İzleyici veri alımı API'lerini kullanın
  • Event Hubs akışı: Telemetriyi Azure Event Hubs üzerinden akıtın ve Azure İzleyici'e alımı için işleyin.

Telemetri verileriniz şu yöntemlerden biriyle Azure İzleyici'ye ulaştığında, bunları analiz edebilirsiniz:

  1. Azure portalında Application Insights'a gidin:

    az monitor app-insights component show \
      --app $APP_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query "{name:name,appId:appId,instrumentationKey:instrumentationKey}"
    
  2. İzlemeleri ve günlükleri görüntüle

    • Application Insights>İşlem aramasına gidin
    • "get_keyvault_secrets gibi işlem adlarına sahip izler arayın"
    • Günlükler bölümünü denetleyin ve KQL sorgularını çalıştırın:
    traces
    | where timestamp > ago(1h)
    | where message contains "Azure operations" or message contains "secrets"
    | order by timestamp desc
    
  3. Dağıtılmış izlemeleri görüntüleme:

    • Hizmet bağımlılıklarını görmek için Uygulama Haritası'na gidin
    • İşlem zamanlamasını görmek için Performans'ı seçin
    • Tam istek akışlarını görmek için uçtan uca işlem ayrıntılarını kullanma
  4. Rust uygulamanız için özel KQL sorguları:

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

Gerçek zamanlı olarak izle

Verileri geldikçe görmek için canlı izlemeyi ayarlayın:

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

Maliyet optimizasyonu

Azure İzleyici'nin topladığı veri miktarını azaltmaya yönelik yapılandırma seçeneklerine ve fırsatlarına yönelik en iyi yöntemleri anlayarak Azure İzleyici maliyetlerinizi önemli ölçüde azaltabilirsiniz.

Rust uygulamaları için temel stratejiler:

  • Uygun günlük düzeylerini kullanın: Hacmi azaltmak için OpenTelemetry günlük düzeylerini üretim için uygun şekilde yapılandırın
  • Örneklemeyi uygulama: Yüksek hacimli uygulamalar için OpenTelemetry örneklemesini yapılandırma
  • Hassas verileri filtreleyin: Maliyetleri artıran sırları, belirteçleri veya büyük yükleri günlüğe kaydetmekten kaçının.
  • Veri alımını izleme: Application Insights veri kullanımınızı ve maliyetlerinizi düzenli olarak gözden geçirin

Kaynaklar ve sonraki adımlar