Hizmet durumunu raporlama ve denetleme

Hizmetleriniz sorunlarla karşılaştığında, olayları ve kesintileri yanıtlama ve düzeltme olanağınız, sorunları hızla algılama becerinize bağlıdır. Hizmet kodunuzdan Azure Service Fabric sistem durumu yöneticisine sorunları ve hataları bildirirseniz, sistem durumunu denetlemek için Service Fabric'in sağladığı standart sistem durumu izleme araçlarını kullanabilirsiniz.

Hizmetten sistem durumunu raporlamanın üç yolu vardır:

  • Partition veya CodePackageActivationContext nesnelerini kullanın.
    geçerli bağlamın Partition parçası olan öğelerin sistem durumunu raporlamak için ve CodePackageActivationContext nesnelerini kullanabilirsiniz. Örneğin, bir çoğaltmanın parçası olarak çalışan kod yalnızca bu çoğaltmada, ait olduğu bölümde ve bir parçası olduğu uygulamada sistem durumunu bildirebilir.
  • FabricClient adresini kullanın.
    Küme güvenli değilse veya hizmet yönetici ayrıcalıklarıyla çalışıyorsa hizmet kodundan sistem durumunu raporlamak için kullanabilirsinizFabricClient. Gerçek dünya senaryolarının çoğu güvenli olmayan kümeleri kullanmaz veya yönetici ayrıcalıkları sağlamaz. ile FabricClientkümenin parçası olan herhangi bir varlıkta sistem durumunu bildirebilirsiniz. Ancak ideal olarak hizmet kodu yalnızca kendi durumuyla ilgili raporlar göndermelidir.
  • Küme, uygulama, dağıtılan uygulama, hizmet, hizmet paketi, bölüm, çoğaltma veya düğüm düzeylerinde REST API'lerini kullanın. Bu, kapsayıcının içinden sistem durumunu raporlamak için kullanılabilir.

Bu makalede, hizmet kodundan sistem durumunu bildiren bir örnek size yol gösterir. Örnek ayrıca Service Fabric tarafından sağlanan araçların sistem durumunu denetlemek için nasıl kullanılabileceğini de gösterir. Bu makale, Service Fabric'in sistem durumu izleme özelliklerine hızlı bir giriş niteliğindedir. Daha ayrıntılı bilgi için, bu makalenin sonundaki bağlantıyla başlayan sistem durumu hakkında ayrıntılı makaleler serisini okuyabilirsiniz.

Önkoşullar

Aşağıdakilerin yüklü olması gerekir:

  • Visual Studio 2015 veya Visual Studio 2019
  • Service Fabric SDK'sı

Yerel bir güvenli geliştirme kümesi oluşturmak için

  • PowerShell'i yönetici ayrıcalıklarıyla açın ve aşağıdaki komutları çalıştırın:

Güvenli bir geliştirme kümesi oluşturmayı gösteren komutlar

Bir uygulamayı dağıtmak ve durumunu denetlemek için

  1. Visual Studio'yu yönetici olarak açın.

  2. Durum Bilgisi Olan Hizmet şablonunu kullanarak proje oluşturun.

    Durum Bilgisi Olan Hizmet ile Service Fabric uygulaması oluşturma

  3. Uygulamayı hata ayıklama modunda çalıştırmak için F5 tuşuna basın. Uygulama yerel kümeye dağıtılır.

  4. Uygulama çalıştırıldıktan sonra bildirim alanındaki Yerel Küme Yöneticisi simgesine sağ tıklayın ve kısayol menüsünden Yerel Kümeyi Yönet'i seçerek Service Fabric Explorer'ı açın.

    Bildirim alanından Service Fabric Explorer'ı açma

  5. Uygulama durumu bu görüntüde olduğu gibi görüntülenmelidir. Şu anda uygulama hiçbir hata olmadan iyi durumda olmalıdır.

    Service Fabric Explorer'da iyi durumdaki uygulama

  6. Ayrıca PowerShell'i kullanarak sistem durumunu de kontrol edebilirsiniz. Get-ServiceFabricApplicationHealth Bir uygulamanın durumunu denetlemek için ve bir hizmetin durumunu denetlemek için kullanabilirsinizGet-ServiceFabricServiceHealth. PowerShell'de aynı uygulamanın sistem durumu raporu bu görüntüde yer alır.

    PowerShell'de iyi durumdaki uygulama

Hizmet kodunuza özel sistem durumu olayları eklemek için

Visual Studio'daki Service Fabric proje şablonları örnek kod içerir. Aşağıdaki adımlarda, hizmet kodunuzdan özel sistem durumu olaylarını nasıl bildirebileceğiniz gösterilmektedir. Bu tür raporlar Service Fabric Explorer, Azure portalı sistem durumu görünümü ve PowerShell gibi Service Fabric tarafından sunulan sistem durumu izleme için standart araçlarda otomatik olarak gösterilir.

  1. Daha önce Visual Studio'da oluşturduğunuz uygulamayı yeniden açın veya Durum Bilgisi Olan Hizmet Visual Studio şablonunu kullanarak yeni bir uygulama oluşturun.

  2. Stateful1.cs dosyasını açın ve yönteminin çağrısını myDictionary.TryGetValueAsync RunAsync bulun. Bu uygulamadaki anahtar mantığı sayıyı result çalışır durumda tutmak olduğundan, bu yöntemin sayacın geçerli değerini tutan bir döndürdüğünü görebilirsiniz. Bu uygulama gerçek bir uygulamaysa ve sonuç eksikliği bir hatayı temsil ettiyse, bu olayı işaretlemek isteyebilirsiniz.

  3. Sonuç olmaması bir hatayı temsil ettiğinde bir sistem durumu olayı bildirmek için aşağıdaki adımları ekleyin.

    a. Ad alanını System.Fabric.Health Stateful1.cs dosyasına ekleyin.

    using System.Fabric.Health;
    

    b. Aramadan sonra myDictionary.TryGetValueAsync aşağıdaki kodu ekleyin

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Durum bilgisi olan bir hizmetten bildirildiği için çoğaltma durumunu bildiriyoruz. parametresi, HealthInformation bildirilen sistem durumu sorunu hakkındaki bilgileri depolar.

    Durum bilgisi olmayan bir hizmet oluşturduysanız aşağıdaki kodu kullanın

    if (!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportInstanceHealth(healthInformation);
    }
    
  4. Hizmetiniz yönetici ayrıcalıklarıyla çalışıyorsa veya küme güvenli değilse, aşağıdaki adımlarda gösterildiği gibi sistem durumunu bildirmek için de kullanabilirsinizFabricClient.

    a. Bildirimden FabricClient sonra var myDictionary örneği oluşturun.

    var fabricClient = new FabricClient(new FabricClientSettings() { HealthReportSendInterval = TimeSpan.FromSeconds(0) });
    

    b. Çağrıdan sonra myDictionary.TryGetValueAsync aşağıdaki kodu ekleyin.

    if (!result.HasValue)
    {
       var replicaHealthReport = new StatefulServiceReplicaHealthReport(
            this.Context.PartitionId,
            this.Context.ReplicaId,
            new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error));
        fabricClient.HealthManager.ReportHealth(replicaHealthReport);
    }
    
  5. Şimdi bu hatanın benzetimini yapalım ve sistem durumu izleme araçlarında gösterilmesini görelim. Hatanın benzetimini yapmak için, daha önce eklediğiniz sistem durumu raporlama kodundaki ilk satırı açıklama satırına ekleyin. İlk satırı açıklama satırına ekledikten sonra kod aşağıdaki örneğe benzer olacaktır.

    //if(!result.HasValue)
    {
        HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
        this.Partition.ReportReplicaHealth(healthInformation);
    }
    

    Bu kod, her yürütülürken RunAsync sistem durumu raporunu tetikler. Değişikliği yaptıktan sonra, uygulamayı çalıştırmak için F5 tuşuna basın.

  6. Uygulama çalıştırıldıktan sonra, uygulamanın durumunu denetlemek için Service Fabric Explorer'ı açın. Bu kez, Service Fabric Explorer uygulamanın iyi durumda olmadığını gösterir. Daha önce eklediğimiz koddan bildirilen hata nedeniyle uygulama iyi durumda değil olarak görünüyor.

    Service Fabric Explorer'da iyi durumda olmayan uygulama

  7. Service Fabric Explorer'ın ağaç görünümünde birincil çoğaltmayı seçerseniz Sistem Durumu'nun da bir hata gösterdiğini görürsünüz. Service Fabric Explorer, kodda parametresine HealthInformation eklenen sistem durumu raporu ayrıntılarını da görüntüler. PowerShell'de ve Azure portalında aynı sistem durumu raporlarını görebilirsiniz.

    Service Fabric Explorer'da çoğaltma durumu

Bu rapor, başka bir raporla değiştirilene veya bu çoğaltma silinene kadar sistem durumu yöneticisinde kalır. Nesnede HealthInformation bu sistem durumu raporu için ayarlamadığımız TimeToLive için raporun süresi hiç dolmaz.

Bu durumda çoğaltma olan en ayrıntılı düzeyde sistem durumunun bildirilmesi önerilir. Ayrıca üzerinde Partitionsistem durumunu bildirebilirsiniz.

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);

, ve üzerinde Applicationsistem durumunu bildirmek için kullanınCodePackageActivationContext.DeployedServicePackageDeployedApplication

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);

Sonraki adımlar