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ı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
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. 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 ö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:
Bir uygulamayı dağıtmak ve durumunu denetlemek için
Visual Studio'yu yönetici olarak açın.
Durum Bilgisi Olan Hizmet şablonunu kullanarak bir 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 uygulamanın hatasız olarak iyi durumda olması gerekir.
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.
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.
Daha önce Visual Studio'da oluşturduğunuz uygulamayı yeniden açın veya Stateful Service 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ı ç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.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. 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); }
Ş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.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 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.
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 Partition
sistem durumunu bildirebilirsiniz.
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportPartitionHealth(healthInformation);
, ve üzerinde Application
sistem durumunu raporlamak için kullanınCodePackageActivationContext
.DeployedServicePackage
DeployedApplication
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
var activationContext = FabricRuntime.GetActivationContext();
activationContext.ReportApplicationHealth(healthInformation);