Hizmet durumunu raporlama ve denetleme

Hizmetleriniz sorunlarla karşılaştığında, olaylara ve kesintilere yanıt verebilmeniz ve bunları düzeltebilmeniz, sorunları hızla algılama becerinize bağlıdır. Hizmet kodunuzdan Azure Service Fabric sistem durumu yöneticisine sorunları ve hataları bildirirseniz, Service Fabric'in sistem durumunu denetlemek iç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 komutunu 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ümeler 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 örnekte 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 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 bir 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 uygulamanın hatasız olarak iyi durumda olması gerekir.

    Service Fabric Explorer'de iyi durumda uygulama

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

    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ımlar, hizmet kodunuzdan özel sistem durumu olaylarını nasıl raporlayabileceğinizi gösterir. Bu tür raporlar Service Fabric'in sağladığı sistem durumu izleme için Service Fabric Explorer, Azure portal sistem durumu görünümü ve PowerShell gibi standart araçlarda otomatik olarak gösterilir.

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

  2. Stateful1.cs dosyasını açın ve yönteminin çağrısını myDictionary.TryGetValueAsyncRunAsync bulun. Bu uygulamadaki anahtar mantığı sayıyı çalışır durumda tutmak olduğundan, bu yöntemin sayacın geçerli değerini tutan bir döndürdüğünü result 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 kullanabilirsiniz FabricClient .

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

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

    b. Aramadan 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österilip gösterilmediğini 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 RunAsync yürütildiğinde 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'de iyi durumda olmayan uygulama

  7. Service Fabric Explorer 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 ayrıca kodda parametresine HealthInformation eklenen sistem durumu raporu ayrıntılarını da görüntüler. PowerShell'de ve Azure portal aynı sistem durumu raporlarını görebilirsiniz.

    Service Fabric Explorer çoğaltma durumu

Bu rapor, başka bir raporla değiştirilene kadar veya bu çoğaltma silinene kadar sistem durumu yöneticisinde kalır. Nesnesinde HealthInformation bu sistem durumu raporu için ayarlamadığımız TimeToLive için raporun süresi hiçbir zaman 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 raporlamak için kullanınCodePackageActivationContext.DeployedServicePackageDeployedApplication

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

Sonraki adımlar