Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Azure Yerel 2311.2 ve üzeri; Windows Server 2022, Windows Server 2019
Bu makale, Azure Yerel ve Windows Server'daki Sistem Sağlığı Hizmeti hataları hakkında ayrıntılı bilgi sağlar.
Sağlık Hizmeti sorunları hakkında
Sistem Sağlığı Hizmeti, sorunları algılamak ve "hatalar" oluşturmak için Depolama Alanları Doğrudan kümenizi sürekli izler. Bir cmdlet geçerli hataları görüntüleyerek her bir varlığa veya özelliğe sırayla bakmadan dağıtımınızın durumunu kolayca doğrulamanıza olanak sağlar. Hatalar doğru, kolay anlaşılabilen ve üzerinde işlem yapılabilir olacak şekilde tasarlanmıştır.
Her hata beş önemli alan içerir:
- Şiddet
- Sorunun açıklaması
- Sorunu gidermek için önerilen sonraki adımlar
- Hatalı varlığın tanımlama bilgileri
- Fiziksel konumu (varsa)
Tipik bir hataya örnek olarak şu verilebilir:
Severity: MINOR
Reason: Connectivity has been lost to the physical disk.
Recommendation: Check that the physical disk is working and properly connected.
Part: Manufacturer Contoso, Model XYZ9000, Serial 123456789
Location: Seattle DC, Rack B07, Node 4, Slot 11
Uyarı
Fiziksel konum, hatanın etki alanı yapılandırmasından çıkarılır. Hata etki alanları hakkında daha fazla bilgi için bkz . Hata etki alanı tanıma. Bu bilgileri sağlamazsanız, konum alanı daha az yararlı olur. Örneğin, yalnızca yuva numarasını gösterebilir.
Hataların referans bilgileri için bkz. Sağlık Hizmeti hataları referansı.
Kök neden analizi
Sistem Sağlığı Hizmeti, aynı temel sorunun sonuçları olan hataları belirlemek ve birleştirmek için hatalı varlıklar arasındaki olası nedenselliği değerlendirebilir. Etki zincirlerini tanımak, raporlardaki gereksiz ayrıntıları azaltır. Örneğin, bir sunucu çalışmıyorsa, sunucu içindeki tüm sürücülerin de bağlantısız olması beklenir. Bu nedenle, kök nedeni olarak yalnızca bir hata oluşturulacaktır - bu durumda, sunucu.
PowerShell'de kullanım
PowerShell'de geçerli hataları görmek için aşağıdaki cmdlet'i çalıştırın:
Get-HealthFault
Bu, genel Depolama Alanları Doğrudan kümesini etkileyen tüm hataları döndürür. Çoğu zaman, bu hatalar donanım veya yapılandırmayla ilgilidir. Hata yoksa, cmdlet hiçbir şey döndürmez.
Uyarı
Üretim dışı bir ortamda ve riski size ait olan bir ortamda, hataları kendiniz tetikleyerek bu özelliği deneyebilirsiniz. Örneğin, bir fiziksel diski kaldırarak veya bir düğümü kapatarak bunu yapabilirsiniz. Hata göründükten sonra fiziksel diski yeniden takın veya düğümü yeniden başlatarak hatanın kaybolmasına neden olun.
.NET ve C'de kullanım#
Bu bölümde Sağlık Hizmeti'ne bağlanma yolları, keşif nesnelerini kullanma ve hata sorgularını çalıştırma yöntemleri gösterilmektedir.
Bağlan
Sağlık Hizmeti'ni sorgulamak için kümeyle bir CimSession oluşturursunuz. Bunu yapmak için, yalnızca tam Microsoft .NET'te kullanılabilen bazı şeylere ihtiyacınız olacaktır; başka bir deyişle bunu doğrudan bir web veya mobil uygulamadan kolayca yapamazsınız. Bu bölümdeki kod örnekleri, bu veri erişim katmanı için en kolay seçenek olan C# kullanır.
using System.Security;
using Microsoft.Management.Infrastructure;
public CimSession Connect(string Domain = "...", string Computer = "...", string Username = "...", string Password = "...")
{
SecureString PasswordSecureString = new SecureString();
foreach (char c in Password)
{
PasswordSecureString.AppendChar(c);
}
CimCredential Credentials = new CimCredential(
PasswordAuthenticationMechanism.Default, Domain, Username, PasswordSecureString);
WSManSessionOptions SessionOptions = new WSManSessionOptions();
SessionOptions.AddDestinationCredentials(Credentials);
Session = CimSession.Create(Computer, SessionOptions);
return Session;
}
Sağlanan kullanıcı adı, hedef bilgisayarın yerel yöneticisi olmalıdır.
Parolanın hiçbir zaman cleartext biçiminde bellekte depolanmaması için Password SecureString'i gerçek zamanlı olarak doğrudan kullanıcı girişinden oluşturmanızı öneririz. Bu, çeşitli güvenlik sorunlarını azaltmaya yardımcı olur. Ancak pratikte, prototip oluşturma amacıyla yukarıdaki gibi oluşturmak yaygındır.
Nesneleri bulma
CimSession oluşturulduysa, kümede Windows Yönetim Araçları'nı (WMI) sorgulayabilirsiniz.
Hataları veya Ölçümleri alabilmeniz için önce birkaç ilgili nesnenin örneklerini almanız gerekir. İlk olarak, kümedeki Depolama Alanları Doğrudan'ı temsil eden MSFT_StorageSubSystem'i alın. Bunu kullanarak kümedeki tüm MSFT_StorageNode ve veri birimlerinin her MSFT_Volume alabilirsiniz. Son olarak, MSCluster_ClusterHealthService'i, yani Sağlık Hizmeti'nin kendisini almanız gerekir.
CimInstance Cluster;
List<CimInstance> Nodes;
List<CimInstance> Volumes;
CimInstance HealthService;
public void DiscoverObjects(CimSession Session)
{
// Get MSFT_StorageSubSystem for Storage Spaces Direct
Cluster = Session.QueryInstances(@"root\microsoft\windows\storage", "WQL", "SELECT * FROM MSFT_StorageSubSystem")
.First(Instance => (Instance.CimInstanceProperties["FriendlyName"].Value.ToString()).Contains("Cluster"));
// Get MSFT_StorageNode for each cluster node
Nodes = Session.EnumerateAssociatedInstances(Cluster.CimSystemProperties.Namespace,
Cluster, "MSFT_StorageSubSystemToStorageNode", null, "StorageSubSystem", "StorageNode").ToList();
// Get MSFT_Volumes for each data volume
Volumes = Session.EnumerateAssociatedInstances(Cluster.CimSystemProperties.Namespace,
Cluster, "MSFT_StorageSubSystemToVolume", null, "StorageSubSystem", "Volume").ToList();
// Get MSFT_StorageHealth itself
HealthService = Session.EnumerateAssociatedInstances(Cluster.CimSystemProperties.Namespace,
Cluster, "MSFT_StorageSubSystemToStorageHealth", null, "StorageSubSystem", "StorageHealth").First();
}
Bunlar Get-StorageSubSystem, Get-StorageNode ve Get-Volume gibi cmdlet'leri kullanarak PowerShell'de edindiğiniz nesnelerle aynıdır.
Depolama Yönetimi API Sınıfları sayfasında belgelenen tüm özelliklere erişebilirsiniz.
using System.Diagnostics;
foreach (CimInstance Node in Nodes)
{
// For illustration, write each node's Name to the console. You could also write State (up/down), or anything else!
Debug.WriteLine("Discovered Node " + Node.CimInstanceProperties["Name"].Value.ToString());
}
Sorgu hataları
Tanılama'yı çağırarak, hedef CimInstance için küme veya herhangi bir birim olabilecek mevcut hataları alın.
public void GetFaults(CimSession Session, CimInstance Target)
{
// Set Parameters (None)
CimMethodParametersCollection FaultsParams = new CimMethodParametersCollection();
// Invoke API
CimMethodResult Result = Session.InvokeMethod(Target, "Diagnose", FaultsParams);
IEnumerable<CimInstance> DiagnoseResults = (IEnumerable<CimInstance>)Result.OutParameters["DiagnoseResults"].Value;
// Unpack
if (DiagnoseResults != null)
{
foreach (CimInstance DiagnoseResult in DiagnoseResults)
{
// TODO: Whatever you want!
}
}
}
İsteğe bağlı: MyFault sınıfı
Hataların kendi temsilini oluşturmak ve sürdürülebilir kılmak mantıklı olabilir. Örneğin, MyFault sınıfı, daha sonra güncelleştirmeleri ilişkilendirmek, bildirimleri kaldırmak veya aynı hatanın birden çok kez algılanması durumunda yinelenenleri kaldırmak için kullanılabilen FaultId dahil olmak üzere hataların çeşitli temel özelliklerini depolar.
public class MyFault {
public String FaultId { get; set; }
public String Reason { get; set; }
public String Severity { get; set; }
public String Description { get; set; }
public String Location { get; set; }
// Constructor
public MyFault(CimInstance DiagnoseResult)
{
CimKeyedCollection<CimProperty> Properties = DiagnoseResult.CimInstanceProperties;
FaultId = Properties["FaultId" ].Value.ToString();
Reason = Properties["Reason" ].Value.ToString();
Severity = Properties["PerceivedSeverity" ].Value.ToString();
Description = Properties["FaultingObjectDescription"].Value.ToString();
Location = Properties["FaultingObjectLocation" ].Value.ToString();
}
}
List<MyFault> Faults = new List<MyFault>;
foreach (CimInstance DiagnoseResult in DiagnoseResults)
{
Faults.Add(new Fault(DiagnoseResult));
}
Her hatadaki (DiagnoseResult) özelliklerin tam listesi daha sonra Hata özellikleri bölümünde belgelenmiştir.
Hata olayları
Sağlık Servisi, hatalar oluşturulduğunda, kaldırıldığında veya güncelleştirildiğinde WMI olayları oluşturur. Bunlar, sık sık yoklama yapmadan uygulama durumunuzu eşitlenmiş durumda tutmak için gereklidir ve örneğin e-posta uyarılarının ne zaman gönderilip gönderilmeyebileceğini belirleme gibi konularda yardımcı olabilir. Bu olaylara abone olmak için aşağıdaki örnek kod Gözlemci Tasarım Desenini kullanır.
İlk olarak, MSFT_StorageFaultEvent olaylara abone olun.
public void ListenForFaultEvents()
{
IObservable<CimSubscriptionResult> Events = Session.SubscribeAsync(
@"root\microsoft\windows\storage", "WQL", "SELECT * FROM MSFT_StorageFaultEvent");
// Subscribe the Observer
FaultsObserver<CimSubscriptionResult> Observer = new FaultsObserver<CimSubscriptionResult>(this);
IDisposable Disposeable = Events.Subscribe(Observer);
}
Ardından, yeni bir olay oluşturulduğunda OnNext() yöntemi çağrılan bir Gözlemci uygulayın.
Her olay, bir hatanın oluşturulup oluşturulmadığını, kaldırıldığını veya güncelleştirildiğini ve ilgili FaultId değerini gösteren ChangeType içerir.
Buna ek olarak, her olay hatanın tüm özelliklerini içerir.
class FaultsObserver : IObserver
{
public void OnNext(T Event)
{
// Cast
CimSubscriptionResult SubscriptionResult = Event as CimSubscriptionResult;
if (SubscriptionResult != null)
{
// Unpack
CimKeyedCollection<CimProperty> Properties = SubscriptionResult.Instance.CimInstanceProperties;
String ChangeType = Properties["ChangeType"].Value.ToString();
String FaultId = Properties["FaultId"].Value.ToString();
// Create
if (ChangeType == "0")
{
Fault MyNewFault = new MyFault(SubscriptionResult.Instance);
// TODO: Whatever you want!
}
// Remove
if (ChangeType == "1")
{
// TODO: Use FaultId to find and delete whatever representation you have...
}
// Update
if (ChangeType == "2")
{
// TODO: Use FaultId to find and modify whatever representation you have...
}
}
}
public void OnError(Exception e)
{
// Handle Exceptions
}
public void OnCompleted()
{
// Nothing
}
}
Hata yaşam döngüsünü anlama
Hatalar, kullanıcı tarafından "görüldü" veya çözümlendi olarak işaretlenmek üzere tasarlanmamıştır. Bunlar, Sağlık Hizmeti bir sorunu gözlemlediğinde oluşturulur ve ancak Sağlık Hizmeti artık sorunu gözlemlemediğinde otomatik olarak kaldırılır. Genel olarak bu, sorunun düzeltildiğini yansıtır.
Ancak bazı durumlarda, hatalar yük devretme sonrası, aralıklı bağlantı gibi nedenlerle Sağlık Hizmeti tarafından tekrar keşfedilebilir. Bu nedenle, kendi hata temsillerinizi saklamak mantıklı olabilir, böylece kolayca tekrarlamaları önleyebilirsiniz. Bu, özellikle e-posta uyarıları veya eşdeğeri gönderirseniz önemlidir.
Hata özellikleri
Aşağıdaki tabloda hata nesnesinin birkaç temel özelliği yer alır. Tam şema için storagewmi.mof dosyasındaki MSFT_StorageDiagnoseResult sınıfını inceleyin.
Emlak | Örnek |
---|---|
HataId | {12345-12345-12345-12345-12345} |
Hata Türü | Microsoft.Health.FaultType.Hacim (Volume).Kapasite (Capacity) |
Nedeni | "Hacim, bulunan alanı tüketiyor." |
Algılanan Ciddiyet | 5 |
Hata Veren Nesne Tanımı | Contoso XYZ9000 S.N. 123456789 |
Hatalı Nesne Konumu | Raf A06, RU 25, Yuva 11 |
Önerilen Eylemler | {"Birimi genişletin.", "İş yüklerini diğer birimlere geçirin."} |
FaultId: Bir küme kapsamındaki benzersiz kimlik.
PerceivedSeverity: PerceivedSeverity = { 4, 5, 6 } = { "Bilgilendirme", "Uyarı" ve "Hata" } ya da mavi, sarı ve kırmızı gibi eşdeğer renkler.
FaultingObjectDescription: Donanım için parça bilgileri, genellikle yazılım nesneleri için boş.
FaultingObjectLocation: Donanım için konum bilgileri, genellikle yazılım nesneleri için boş.
RecommendedActions: Bağımsız ve belirli bir sırada olmayan önerilen eylemlerin listesi. Bugün, bu liste genellikle 1 uzunluğundadır.
Arıza olayı özellikleri
Aşağıdaki tabloda hata olayının birkaç temel özelliği yer alır. Tam şema için storagewmi.mof dosyasındaki MSFT_StorageFaultEvent sınıfını inceleyin.
Hatanın oluşturulup oluşturulmadığını, kaldırıldığını veya güncelleştirildiğini ve FaultId değerini gösteren ChangeType'adikkat edin. Bir olay, etkilenen hatanın tüm özelliklerini de içerir.
Emlak | Örnek |
---|---|
DeğişimTürü | 0 |
HataId | {12345-12345-12345-12345-12345} |
Hata Türü | Microsoft.Health.FaultType.Hacim (Volume).Kapasite (Capacity) |
Nedeni | "Hacim, bulunan alanı tüketiyor." |
Algılanan Ciddiyet | 5 |
Hata Veren Nesne Tanımı | Contoso XYZ9000 S.N. 123456789 |
Hatalı Nesne Konumu | Raf A06, RU 25, Yuva 11 |
Önerilen Eylemler | {"Birimi genişletin.", "İş yüklerini diğer birimlere geçirin."} |
ChangeType: ChangeType = { 0, 1, 2 } = { "Create", "Remove", "Update" }.
Sağlık Hizmeti hatalar referansı
Azure Yerel ve Windows Server'daki Sistem Sağlığı Hizmeti depolama, ağ ve işlem kaynakları gibi çeşitli sistem bileşenlerindeki hataları algılayabilir.
Hata önem derecesi eşlemeleri, sistem durumu ayarları (veri türleri, hata ilişkilendirmeleri, varsayılan değerler ve açıklamalar) ve toplanan ölçümlerin listesi de dahil olmak üzere sistem durumu hatalarına ayrıntılı bir genel bakış için Sistem Sağlığı Hizmeti hataları elektronik tablosunu indirin.
Sağlık Hizmeti arızalarıyla ilgili dikkat edilmesi gerekenler:
Bazı hatalar varsayılan olarak devre dışı bırakılır. Bir hatayı etkinleştirmek için ilgili sistem durumu ayarını true olarak ayarlayın. Örneğin, hata türü
Microsoft.Health.FaultType.PhysicalDisk.HighLatency.AverageIO
varsayılan olarak devre dışıdır. Etkinleştirmek için sistem durumu ayarınıSystem.Storage.PhysicalDisk.HighLatency.Threshold.Tail.Enabled
true olarak ayarlayın.Fanlar, güç kaynakları ve algılayıcılar gibi depolama kasası bileşenlerinin durumu SCSI Muhafaza Hizmetleri'nden (SES) türetilir. Satıcınız bu bilgileri sağlamazsa, Sistem Sağlığı Hizmeti bu bilgileri görüntüleyemez.