Öğretici: Azure'da Service Fabric kümesini izleme
İzleme ve tanılama, iş yüklerini herhangi bir bulut ortamında geliştirme, test etme ve dağıtma açısından kritik öneme sahiptir. Bu öğretici bir serinin ikinci bölümüdür ve olayları, performans sayaçlarını ve sistem durumu raporlarını kullanarak Service Fabric kümesini izleme ve tanılamayı gösterir. Daha fazla bilgi için küme izleme ve altyapı izleme hakkında genel bakışı okuyun.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Service Fabric olaylarını görüntüleme
- Küme olayları için EventStore API'lerini sorgulama
- Altyapıyı izleme/performans sayaçlarını toplama
- Küme durumu raporlarını görüntüleme
Bu öğretici dizisinde şunların nasıl yapıldığını öğrenirsiniz:
- Şablon kullanarak Azure'da güvenli bir Windows kümesi oluşturma
- Kümeyi izleme
- Bir kümenin ölçeğini daraltma veya genişletme
- Bir kümenin çalışma zamanını yükseltme
- Küme silme
Not
Azure ile etkileşim kurmak için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.
Önkoşullar
Bu öğreticiye başlamadan önce:
- Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun
- Azure PowerShell veya Azure CLI'yi yükleyin.
- Güvenli bir Windows kümesi oluşturma
- Küme için tanılama koleksiyonunu ayarlama
- Kümede EventStore hizmetini etkinleştirme
- Azure İzleyici günlüklerini ve küme için Log Analytics aracısını yapılandırma
Azure İzleyici günlüklerini kullanarak Service Fabric olaylarını görüntüleme
Azure İzleyici günlükleri, bulutta barındırılan uygulama ve hizmetlerden telemetri toplar ve analiz eder ve bunların kullanılabilirliğini ve performansını en üst düzeye çıkarmanıza yardımcı olacak analiz araçları sağlar. Azure İzleyici günlüklerinde sorgu çalıştırarak içgörüler elde edebilir ve kümenizde gerçekleşen sorunları giderebilirsiniz.
Service Fabric Analytics çözümüne erişmek için Azure portalına gidin ve Service Fabric Analytics çözümünü oluşturduğunuz kaynak grubunu seçin.
ServiceFabric(mysfomsworkspace) kaynağını seçin.
Genel Bakış'ta, Service Fabric için bir tane de dahil olmak üzere etkinleştirilen çözümlerin her biri için grafik biçiminde kutucuklar görürsünüz. Service Fabric Analytics çözümüne devam etmek için Service Fabric grafiğini seçin.
Aşağıdaki görüntüde Service Fabric Analytics çözümünün giriş sayfası gösterilmektedir. Bu giriş sayfası, kümenizde neler olduğuna yönelik bir anlık görüntü görünümü sağlar.
Küme oluşturma sırasında tanılamayı etkinleştirdiyseniz,
- Service Fabric küme olayları
- Reliable Actors programlama modeli olayları
- Reliable Services programlama modeli olayları
Not
Service Fabric olaylarına ek olarak, tanılama uzantınızın yapılandırması güncelleştirilerek daha ayrıntılı sistem olayları toplanabilir.
Düğümler üzerindeki eylemler de dahil olmak üzere Service Fabric Olaylarını görüntüleme
Service Fabric Analytics sayfasında Küme Olayları grafiğine tıklayın. Toplanan tüm sistem olaylarının günlükleri görüntülenir. Sorgu Kusto sorgu dilini kullanır. Bu dili, aradığınızı geliştirmek için değiştirebilirsiniz. Örneğin, kümedeki düğümlerde kullanılabilecek tüm eylemleri bulmak için aşağıdaki sorguyu kullanabilirsiniz. Aşağıda kullanılan olay kimlikleri, işlem kanalı olay başvurusunda bulunur.
ServiceFabricOperationalEvent
| where EventId < 25627 and EventId > 25619
Kusto sorgu dili güçlüdür. Aşağıda diğer yararlı sorgular yer alır.
Sorguyu ServiceFabricEvent diğer adıyla işlev olarak kaydederek kullanıcı tanımlı işlev olarak bir ServiceFabricEvent arama tablosu oluşturun:
let ServiceFabricEvent = datatable(EventId: int, EventName: string)
[
...
18603, 'NodeUpOperational',
18604, 'NodeDownOperational',
...
];
ServiceFabricEvent
Son bir saat içinde kaydedilen operasyonel olayları döndür:
ServiceFabricOperationalEvent
| where TimeGenerated > ago(1h)
| join kind=leftouter ServiceFabricEvent on EventId
| project EventId, EventName, TaskName, Computer, ApplicationName, EventMessage, TimeGenerated
| sort by TimeGenerated
EventId == 18604 ve EventName == 'NodeDownOperational' ile işlem olaylarını döndür:
ServiceFabricOperationalEvent
| where EventId == 18604
| project EventId, EventName = 'NodeDownOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
EventId == 18604 ve EventName == 'NodeUpOperational' ile işlem olaylarını döndür:
ServiceFabricOperationalEvent
| where EventId == 18603
| project EventId, EventName = 'NodeUpOperational', TaskName, Computer, EventMessage, TimeGenerated
| sort by TimeGenerated
HealthState == 3 (Hata) ile Sistem Durumu Raporlarını döndürür ve EventMessage alanından daha fazla özellik ayıklar:
ServiceFabricOperationalEvent
| join kind=leftouter ServiceFabricEvent on EventId
| extend HealthStateId = extract(@"HealthState=(\S+) ", 1, EventMessage, typeof(int))
| where TaskName == 'HM' and HealthStateId == 3
| extend SourceId = extract(@"SourceId=(\S+) ", 1, EventMessage, typeof(string)),
Property = extract(@"Property=(\S+) ", 1, EventMessage, typeof(string)),
HealthState = case(HealthStateId == 0, 'Invalid', HealthStateId == 1, 'Ok', HealthStateId == 2, 'Warning', HealthStateId == 3, 'Error', 'Unknown'),
TTL = extract(@"TTL=(\S+) ", 1, EventMessage, typeof(string)),
SequenceNumber = extract(@"SequenceNumber=(\S+) ", 1, EventMessage, typeof(string)),
Description = extract(@"Description='([\S\s, ^']+)' ", 1, EventMessage, typeof(string)),
RemoveWhenExpired = extract(@"RemoveWhenExpired=(\S+) ", 1, EventMessage, typeof(bool)),
SourceUTCTimestamp = extract(@"SourceUTCTimestamp=(\S+)", 1, EventMessage, typeof(datetime)),
ApplicationName = extract(@"ApplicationName=(\S+) ", 1, EventMessage, typeof(string)),
ServiceManifest = extract(@"ServiceManifest=(\S+) ", 1, EventMessage, typeof(string)),
InstanceId = extract(@"InstanceId=(\S+) ", 1, EventMessage, typeof(string)),
ServicePackageActivationId = extract(@"ServicePackageActivationId=(\S+) ", 1, EventMessage, typeof(string)),
NodeName = extract(@"NodeName=(\S+) ", 1, EventMessage, typeof(string)),
Partition = extract(@"Partition=(\S+) ", 1, EventMessage, typeof(string)),
StatelessInstance = extract(@"StatelessInstance=(\S+) ", 1, EventMessage, typeof(string)),
StatefulReplica = extract(@"StatefulReplica=(\S+) ", 1, EventMessage, typeof(string))
EventId != 17523 ile olayların zaman grafiğini döndür:
ServiceFabricOperationalEvent
| join kind=leftouter ServiceFabricEvent on EventId
| where EventId != 17523
| summarize Count = count() by Timestamp = bin(TimeGenerated, 1h), strcat(tostring(EventId), " - ", case(EventName != "", EventName, "Unknown"))
| render timechart
Belirli bir hizmet ve düğümle toplanan Service Fabric işlem olaylarını alın:
ServiceFabricOperationalEvent
| where ApplicationName != "" and ServiceName != ""
| summarize AggregatedValue = count() by ApplicationName, ServiceName, Computer
Kaynaklar arası sorgu kullanarak EventId / EventName ile Service Fabric olaylarının sayısını işleyerek:
app('PlunkoServiceFabricCluster').traces
| where customDimensions.ProviderName == 'Microsoft-ServiceFabric'
| extend EventId = toint(customDimensions.EventId), TaskName = tostring(customDimensions.TaskName)
| where EventId != 17523
| join kind=leftouter ServiceFabricEvent on EventId
| extend EventName = case(EventName != '', EventName, 'Undocumented')
| summarize ["Event Count"]= count() by bin(timestamp, 30m), EventName = strcat(tostring(EventId), " - ", EventName)
| render timechart
Service Fabric uygulama olaylarını görüntüleme
Kümede dağıtılan güvenilir hizmetler ve güvenilir aktör uygulamaları için olayları görüntüleyebilirsiniz. Service Fabric Analytics sayfasında Uygulama Olayları grafiğini seçin.
Güvenilir hizmet uygulamalarınızdaki olayları görüntülemek için aşağıdaki sorguyu çalıştırın:
ServiceFabricReliableServiceEvent
| sort by TimeGenerated desc
Hizmetin runasync
ne zaman başlatılıp tamamlandığına ilişkin farklı olaylar görebilirsiniz. Bu olaylar genellikle dağıtımlarda ve yükseltmelerde gerçekleşir.
ServiceName == "fabric:/Watchdog/WatchdogService" ile güvenilir hizmetin olaylarını da bulabilirsiniz:
ServiceFabricReliableServiceEvent
| where ServiceName == "fabric:/Watchdog/WatchdogService"
| project TimeGenerated, EventMessage
| order by TimeGenerated desc
Güvenilir aktör olayları benzer şekilde görüntülenebilir:
ServiceFabricReliableActorEvent
| sort by TimeGenerated desc
Güvenilir aktörler için daha ayrıntılı olaylar yapılandırmak için, küme şablonundaki tanılama uzantısının yapılandırmasında öğesini değiştirebilirsiniz scheduledTransferKeywordFilter
. Bunlar için değerlere ilişkin ayrıntılar reliable actors olay başvurusunda yer alır.
"EtwEventSourceProviderConfiguration": [
{
"provider": "Microsoft-ServiceFabric-Actors",
"scheduledTransferKeywordFilter": "1",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableActorEventTable"
}
},
Azure İzleyici günlükleriyle performans sayaçlarını görüntüleme
Performans sayaçlarını görüntülemek için Azure portalına ve Service Fabric Analytics çözümünü oluşturduğunuz kaynak grubuna gidin.
ServiceFabric(mysfomsworkspace) kaynağını, ardından Log Analytics Çalışma Alanı'nı ve ardından Gelişmiş Ayarlar'ı seçin.
Veri'yi ve ardından Windows Performans Sayaçları'nı seçin. Etkinleştirmeyi seçebileceğiniz varsayılan sayaçların listesi vardır ve koleksiyon aralığını da ayarlayabilirsiniz. Ayrıca toplamak için ek performans sayaçları da ekleyebilirsiniz. Bu makalede uygun biçime başvurulmlanmıştır. Kaydet'e tıklayın ve tamam'ı seçin.
Gelişmiş Ayarlar dikey penceresini kapatın ve Genel başlığı altında Çalışma alanı özeti'ni seçin. Etkinleştirilen çözümlerin her biri için, Service Fabric için bir kutucuk da dahil olmak üzere bir grafik kutucuk vardır. Service Fabric Analytics çözümüne devam etmek için Service Fabric grafiğini seçin.
operasyonel kanal ve güvenilir hizmet olayları için grafik kutucuklar vardır. Seçtiğiniz sayaçlar için akan verilerin grafik gösterimi Düğüm Ölçümleri altında görünür.
Diğer ayrıntıları görmek için Kapsayıcı Ölçümü grafiğini seçin. Ayrıca performans sayacı verilerini küme olaylarına benzer şekilde sorgulayabilir ve Kusto sorgu dilini kullanarak düğümler, performans sayacı adı ve değerleri filtreleyebilirsiniz.
EventStore hizmetini sorgulama
EventStore hizmeti, kümenizin veya iş yüklerinizin belirli bir noktadaki durumunu anlamak için bir yol sağlar. EventStore, kümeden olayları koruyan durum bilgisi olan bir Service Fabric hizmetidir. Olaylar Service Fabric Explorer, REST ve API'ler aracılığıyla kullanıma sunulur. EventStore, kümenizdeki herhangi bir varlıkta tanılama verilerini almak için kümeyi doğrudan sorgular EventStore'da kullanılabilen olayların tam listesini görmek için bkz . Service Fabric olayları.
EventStore API'leri, Service Fabric istemci kitaplığı kullanılarak program aracılığıyla sorgulanabilir.
GetClusterEventListAsync işlevi aracılığıyla 2018-04-03T18:00:00Z ve 2018-04-04T18:00:00Z arasındaki tüm küme olayları için örnek bir istek aşağıda verilmiştir.
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl, settings);
var clstrEvents = sfhttpClient.EventsStore.GetClusterEventListAsync(
"2018-04-03T18:00:00Z",
"2018-04-04T18:00:00Z")
.GetAwaiter()
.GetResult()
.ToList();
Eylül 2018'de küme durumunu ve tüm düğüm olaylarını sorgulayan ve bunları yazdıran başka bir örnek aşağıda verilmiştir.
const int timeoutSecs = 60;
var clusterUrl = new Uri(@"http://localhost:19080"); // This example is for a Local cluster
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl);
var clusterHealth = sfhttpClient.Cluster.GetClusterHealthAsync().GetAwaiter().GetResult();
Console.WriteLine("Cluster Health: {0}", clusterHealth.AggregatedHealthState.Value.ToString());
Console.WriteLine("Querying for node events...");
var nodesEvents = sfhttpClient.EventsStore.GetNodesEventListAsync(
"2018-09-01T00:00:00Z",
"2018-09-30T23:59:59Z",
timeoutSecs,
"NodeDown,NodeUp")
.GetAwaiter()
.GetResult()
.ToList();
Console.WriteLine("Result Count: {0}", nodesEvents.Count());
foreach (var nodeEvent in nodesEvents)
{
Console.Write("Node event happened at {0}, Node name: {1} ", nodeEvent.TimeStamp, nodeEvent.NodeName);
if (nodeEvent is NodeDownEvent)
{
var nodeDownEvent = nodeEvent as NodeDownEvent;
Console.WriteLine("(Node is down, and it was last up at {0})", nodeDownEvent.LastNodeUpAt);
}
else if (nodeEvent is NodeUpEvent)
{
var nodeUpEvent = nodeEvent as NodeUpEvent;
Console.WriteLine("(Node is up, and it was last down at {0})", nodeUpEvent.LastNodeDownAt);
}
}
Küme durumunu izleme
Service Fabric, sistem bileşenlerinin ve watchdog'ların izledikleri yerel koşulları bildirebileceği sistem durumu varlıklarına sahip bir sistem durumu modeli sunar. Sistem durumu deposu , varlıkların iyi durumda olup olmadığını belirlemek için tüm sistem durumu verilerini toplar.
Küme, sistem bileşenleri tarafından gönderilen sistem durumu raporlarıyla otomatik olarak doldurulur. Daha fazla bilgi için bkz . Sistem durumu raporlarını kullanarak sorun giderme.
Service Fabric, desteklenen varlık türlerinin her biri için sistem durumu sorgularını kullanıma sunar. Bunlara FabricClient.HealthManager, PowerShell cmdlet'leri ve REST yöntemleri kullanılarak API aracılığıyla erişilebilir. Bu sorgular varlık hakkındaki tüm sistem durumu bilgilerini döndürür: toplanmış sistem durumu, varlık durumu olayları, alt sistem durumu durumları (uygun olduğunda), iyi durumda olmayan değerlendirmeler (varlık sağlıklı olmadığında) ve alt sistem durumu istatistikleri (uygun olduğunda).
Küme durumunu alma
Get-ServiceFabricClusterHealth cmdlet'i küme varlığının sistem durumunu döndürür ve uygulamaların ve düğümlerin sistem durumu durumlarını (kümenin alt öğeleri) içerir. İlk olarak Connect-ServiceFabricCluster cmdlet'ini kullanarak kümeye bağlanın.
Kümenin durumu 11 düğüm, sistem uygulaması ve açıklandığı gibi yapılandırılmış doku:/Voting'dır.
Aşağıdaki örnek, varsayılan sistem durumu ilkelerini kullanarak küme durumunu alır. Doku:/Voting uygulaması Error içinde olduğundan, 11 düğüm iyi durumda ancak küme toplu sistem durumu Hatadır. İyi durumda olmayan değerlendirmelerin, toplanmış durumu tetikleyen koşullar hakkında nasıl ayrıntılar sağladığını unutmayın.
Get-ServiceFabricClusterHealth
AggregatedHealthState : Error
UnhealthyEvaluations :
100% (1/1) applications are unhealthy. The evaluation tolerates 0% unhealthy applications.
Application 'fabric:/Voting' is in Error.
33% (1/3) deployed applications are unhealthy. The evaluation tolerates 0% unhealthy deployed applications.
Deployed application on node '_nt2vm_3' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '8723eb73-9b83-406b-9de3-172142ba15f3' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376195593305'.
There was an error during CodePackage activation.The service host terminated with exit code:1
NodeHealthStates :
NodeName : _nt2vm_3
AggregatedHealthState : Ok
NodeName : _nt1vm_4
AggregatedHealthState : Ok
NodeName : _nt2vm_2
AggregatedHealthState : Ok
NodeName : _nt1vm_3
AggregatedHealthState : Ok
NodeName : _nt2vm_1
AggregatedHealthState : Ok
NodeName : _nt1vm_2
AggregatedHealthState : Ok
NodeName : _nt2vm_0
AggregatedHealthState : Ok
NodeName : _nt1vm_1
AggregatedHealthState : Ok
NodeName : _nt1vm_0
AggregatedHealthState : Ok
NodeName : _nt3vm_0
AggregatedHealthState : Ok
NodeName : _nt2vm_4
AggregatedHealthState : Ok
ApplicationHealthStates :
ApplicationName : fabric:/System
AggregatedHealthState : Ok
ApplicationName : fabric:/Voting
AggregatedHealthState : Error
HealthEvents : None
HealthStatistics :
Node : 11 Ok, 0 Warning, 0 Error
Replica : 4 Ok, 0 Warning, 0 Error
Partition : 2 Ok, 0 Warning, 0 Error
Service : 2 Ok, 0 Warning, 0 Error
DeployedServicePackage : 3 Ok, 1 Warning, 1 Error
DeployedApplication : 1 Ok, 1 Warning, 1 Error
Application : 0 Ok, 0 Warning, 1 Error
Aşağıdaki örnek, özel bir uygulama ilkesi kullanarak kümenin durumunu alır. Yalnızca hata veya uyarıdaki uygulamaları ve düğümleri almak için sonuçları filtreler. Bu örnekte, hepsi iyi durumda olduğundan hiçbir düğüm döndürülmüyor. Yalnızca fabric:/Voting uygulaması uygulama filtresine uygundur. Özel ilke uyarıları fabric:/Voting uygulaması için hata olarak değerlendirmeyi belirttiğinden, uygulama hata olarak değerlendirilir ve küme de öyle olur.
$appHealthPolicy = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicy
$appHealthPolicy.ConsiderWarningAsError = $true
$appHealthPolicyMap = New-Object -TypeName System.Fabric.Health.ApplicationHealthPolicyMap
$appUri1 = New-Object -TypeName System.Uri -ArgumentList "fabric:/Voting"
$appHealthPolicyMap.Add($appUri1, $appHealthPolicy)
Get-ServiceFabricClusterHealth -ApplicationHealthPolicyMap $appHealthPolicyMap -ApplicationsFilter "Warning,Error" -NodesFilter "Warning,Error" -ExcludeHealthStatistics
AggregatedHealthState : Error
UnhealthyEvaluations :
100% (1/1) applications are unhealthy. The evaluation tolerates 0% unhealthy applications.
Application 'fabric:/Voting' is in Error.
100% (5/5) deployed applications are unhealthy. The evaluation tolerates 0% unhealthy deployed applications.
Deployed application on node '_nt2vm_3' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '8723eb73-9b83-406b-9de3-172142ba15f3' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376195593305'.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt2vm_2' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '2466f2f9-d5fd-410c-a6a4-5b1e00630cca' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376486201388'.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt2vm_4' is in Error.
100% (1/1) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '5faa5201-eede-400a-865f-07f7f886aa32' is in Error.
'System.Hosting' reported Warning for property 'CodePackageActivation:Code:SetupEntryPoint:131959376207396204'. The evaluation treats
Warning as Error.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt2vm_0' is in Error.
100% (1/1) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '204f1783-f774-4f3a-b371-d9983afaf059' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959375885791093'.
There was an error during CodePackage activation.The service host terminated with exit code:1
Deployed application on node '_nt3vm_0' is in Error.
50% (1/2) deployed service packages are unhealthy.
Service package for manifest 'VotingWebPkg' and service package activation ID '2533ae95-2d2a-4f8b-beef-41e13e4c0081' is in Error.
'System.Hosting' reported Error for property 'CodePackageActivation:Code:SetupEntryPoint:131959376108346272'.
There was an error during CodePackage activation.The service host terminated with exit code:1
NodeHealthStates : None
ApplicationHealthStates :
ApplicationName : fabric:/Voting
AggregatedHealthState : Error
HealthEvents : None
Düğüm durumunu alma
Get-ServiceFabricNodeHealth cmdlet'i bir düğüm varlığının sistem durumunu döndürür ve düğümde bildirilen sistem durumu olaylarını içerir. İlk olarak Connect-ServiceFabricCluster cmdlet'ini kullanarak kümeye bağlanın. Aşağıdaki örnek, varsayılan sistem durumu ilkelerini kullanarak belirli bir düğümün sistem durumunu alır:
Get-ServiceFabricNodeHealth _nt1vm_3
Aşağıdaki örnek, kümedeki tüm düğümlerin durumunu alır:
Get-ServiceFabricNode | Get-ServiceFabricNodeHealth | select NodeName, AggregatedHealthState | ft -AutoSize
Sistem hizmeti durumunu alma
Sistem hizmetlerinin toplu durumunu alma:
Get-ServiceFabricService -ApplicationName fabric:/System | Get-ServiceFabricServiceHealth | select ServiceName, AggregatedHealthState | ft -AutoSize
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- Service Fabric olaylarını görüntüleme
- Küme olayları için EventStore API'lerini sorgulama
- Altyapıyı izleme/performans sayaçlarını toplama
- Küme durumu raporlarını görüntüleme
Ardından, bir kümenin nasıl ölçeklendirileceğinizi öğrenmek için aşağıdaki öğreticiye ilerleyin.