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ınPartition
parçası olan öğelerin sistem durumunu raporlamak için veCodePackageActivationContext
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. ileFabricClient
kü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:
Bir uygulamayı dağıtmak ve durumunu denetlemek için
Visual Studio'yu yönetici olarak açın.
Durum Bilgisi Olan Hizmet şablonunu kullanarak proje oluşturun.
Uygulamayı hata ayıklama modunda çalıştırmak için F5 tuşuna basın. Uygulama yerel kümeye dağıtılır.
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.
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.
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.
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.
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.
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.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 ekleyinif (!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); }
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
sonravar 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); }
Ş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.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'ı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.
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 Partition
sistem durumunu bildirebilirsiniz.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);
, ve üzerinde Application
sistem durumunu bildirmek için kullanınCodePackageActivationContext
.DeployedServicePackage
DeployedApplication
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);