Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: Azure Local 2311.2 dan yang lebih baru; Windows Server 2022, Windows Server 2019
Artikel ini menyediakan informasi terperinci tentang kesalahan Layanan Kesehatan di Azure Local dan Windows Server.
Tentang kesalahan Layanan Kesehatan
Layanan Kesehatan TI terus memantau kluster Storage Spaces Direct Anda untuk mendeteksi masalah dan menghasilkan "gangguan." Satu cmdlet menampilkan gangguan saat ini, memungkinkan Anda dengan mudah memverifikasi kesehatan penyebaran Anda tanpa harus melihat tiap entitas atau fitur satu per satu. Kesalahan dirancang agar tepat, mudah dimengerti, dan dapat ditindaklanjuti.
Setiap kesalahan berisi lima bidang penting:
- Tingkat keparahan
- Deskripsi masalah
- Langkah selanjutnya yang direkomendasikan untuk mengatasi masalah
- Mengidentifikasi informasi untuk entitas yang mengalami kesalahan
- Lokasi fisiknya (jika ada)
Misalnya, berikut adalah kesalahan umum:
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
Catatan
Lokasi fisik diperoleh dari konfigurasi wilayah kesalahan Anda. Untuk informasi selengkapnya tentang domain kesalahan, lihat Kesadaran domain kesalahan. Jika Anda tidak memberikan informasi ini, bidang lokasi kurang membantu. Misalnya, itu hanya dapat menunjukkan nomor slot.
Untuk informasi referensi tentang kesalahan, lihat Referensi kesalahan Layanan Kesehatan.
Analisis akar penyebab
Layanan Kesehatan dapat menilai potensi kausalitas di antara entitas yang salah untuk mengidentifikasi dan menggabungkan kesalahan yang merupakan konsekuensi dari masalah mendasar yang sama. Dengan mengenali rantai efek, ini membuat pelaporan menjadi lebih ringkas. Misalnya, jika server tidak berfungsi, diharapkan bahwa setiap drive dalam server juga tanpa konektivitas. Oleh karena itu, hanya satu kesalahan yang akan dilaporkan untuk akar penyebab - dalam hal ini, server.
Penggunaan di PowerShell
Untuk melihat kesalahan saat ini di PowerShell, jalankan cmdlet berikut:
Get-HealthFault
Ini menampilkan kesalahan apa pun yang memengaruhi keseluruhan kluster Storage Spaces Direct. Paling sering, kesalahan ini berhubungan dengan perangkat keras atau konfigurasi. Jika tidak ada kesalahan, cmdlet tidak menampilkan apa pun.
Catatan
Dalam lingkungan non-produksi, dan dengan risiko Anda sendiri, Anda dapat bereksperimen dengan fitur ini dengan memicu kesalahan sendiri. Misalnya, Anda dapat melakukan ini dengan menghapus satu disk fisik atau mematikan satu node. Setelah kesalahan muncul, masukkan kembali disk fisik atau mulai ulang node untuk membuat kesalahan menghilang.
Penggunaan di .NET dan C #
Bagian ini menunjukkan cara menyambungkan ke Layanan Kesehatan, menggunakan objek penemuan, dan menjalankan kueri kesalahan.
Sambungkan
Untuk mengkueri Layanan Kesehatan, Anda membuat CimSession dengan kluster. Untuk melakukannya, Anda akan memerlukan beberapa hal yang hanya tersedia secara penuh Microsoft .NET, yang berarti Anda tidak dapat dengan mudah melakukan ini langsung dari web atau aplikasi seluler. Sampel kode di bagian ini menggunakan C#, pilihan paling mudah untuk lapisan akses data ini.
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;
}
Nama pengguna yang disediakan harus menjadi administrator lokal dari komputer target.
Sebaiknya buat Kata Sandi SecureString langsung dari input pengguna secara real-time, sehingga kata sandi tidak pernah tersimpan dalam memori dalam teks biasa. Langkah ini membantu mengurangi berbagai masalah keamanan. Tetapi dalam praktiknya, membuatnya seperti di atas adalah umum untuk tujuan prototyping.
Menemukan objek
Dengan CimSession yang ditetapkan, Anda dapat mengkueri Instrumentasi Manajemen Windows (WMI) pada kluster.
Sebelum bisa mendapatkan Kesalahan atau Metrik, Anda perlu mendapatkan contoh beberapa objek yang relevan. Pertama, dapatkan MSFT_StorageSubSystem yang mewakili Storage Spaces Direct pada kluster. Dengan menggunakan itu, Anda bisa mendapatkan setiap MSFT_StorageNode pada kluster, dan setiap MSFT_Volume dari volume data. Terakhir, Anda perlu mendapatkan MSCluster_ClusterHealthService, yakni Layanan Kesehatan itu sendiri.
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();
}
Ini adalah objek yang sama yang Anda dapatkan di PowerShell menggunakan cmdlet seperti Get-StorageSubSystem, Get-StorageNode, dan Get-Volume.
Anda dapat mengakses semua properti yang sama, yang didokumentasikan di Kelas API Manajemen Penyimpanan.
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());
}
Kesalahan kueri
Panggil Diagnose untuk mendapatkan kesalahan saat ini terkait dengan CimInstance target, yang dapat berupa baik kluster maupun volume apa pun.
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!
}
}
}
Opsional: Kelas MyFault
Mungkin masuk akal untuk membuat dan mempertahankan representasi kesalahan Anda sendiri. Misalnya, kelas MyFault menyimpan beberapa properti kunci kesalahan, termasuk FaultId, yang dapat digunakan kemudian untuk mengaitkan pembaruan, menghapus pemberitahuan, atau deduplikasi jika kesalahan yang sama terdeteksi beberapa kali.
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));
}
Daftar lengkap properti di setiap kesalahan (DiagnoseResult) didokumentasikan kemudian di bagian Properti kesalahan.
Peristiwa kegagalan
Saat kesalahan dibuat, dihapus, atau diperbarui, Layanan Kesehatan menghasilkan peristiwa WMI. Ini sangat penting untuk menjaga status aplikasi Anda tetap sinkron tanpa sering melakukan polling, dan dapat membantu dengan hal-hal seperti menentukan kapan harus mengirim peringatan email, misalnya. Untuk berlangganan acara-acara ini, kode sampel berikut menggunakan Pola Desain Observasi.
Pertama, berlangganan peristiwa MSFT_StorageFaultEvent.
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);
}
Selanjutnya, terapkan Pengamat yang metode OnNext()-nya dipanggil setiap kali peristiwa baru dihasilkan.
Setiap peristiwa berisi ChangeType yang menunjukkan apakah kesalahan dibuat, dihapus, atau diperbarui, dan FaultId yang relevan.
Selain itu, setiap peristiwa berisi semua sifat kesalahan itu sendiri.
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
}
}
Memahami siklus hidup kesalahan
Kesalahan tidak dimaksudkan untuk ditandai sebagai "sudah dilihat" maupun "sudah diselesaikan" oleh pengguna. Mereka dibuat saat Layanan Kesehatan mengamati suatu masalah, dan mereka dihapus secara otomatis hanya setelah Layanan Kesehatan tidak dapat lagi mengamati masalah tersebut. Secara umum, ini mencerminkan bahwa masalah telah diperbaiki.
Namun, dalam beberapa kasus, kesalahan dapat ditemukan kembali oleh Layanan Kesehatan, seperti setelah failover, konektivitas intermiten, dan sebagainya. Untuk alasan ini, mungkin masuk akal untuk mempertahankan representasi kesalahan Anda sendiri, sehingga dapat dengan mudah melakukan pembatalan duplikasi. Ini sangat penting jika Anda mengirim peringatan email atau yang setara.
Karakteristik kerusakan
Tabel berikut menyajikan beberapa sifat kunci dari objek kesalahan. Untuk skema lengkap, periksa kelas MSFT_StorageDiagnoseResult di storagewmi.mof.
Properti | Contoh |
---|---|
ID Kesalahan | {12345-12345-12345-12345-12345} |
JenisKesalahan | Microsoft.Health.FaultType.Volume.Kapasitas |
Alasan | Volume hampir habis ruang tersedia. |
Tingkat Keparahan yang Dipersepsikan | 5 |
DeskripsiObjekKesalahan | Contoso XYZ9000 S.N. 123456789 |
LokasiObjekBermasalah | Rak A06, RU 25, Slot 11 |
Tindakan yang Direkomendasikan | {"Perluas volume.", "Migrasikan beban kerja ke volume lain."} |
FaultId: ID unik dalam cakupan satu kluster.
PerceivedSeverity: PerceivedSeverity = { 4, 5, 6 } = { "Informational", "Warning", dan "Error" }, atau warna yang setara seperti biru, kuning, dan merah.
FaultingObjectDescription: Informasi bagian untuk perangkat keras, biasanya kosong untuk objek perangkat lunak.
FaultingObjectLocation: Informasi lokasi untuk perangkat keras, biasanya kosong untuk objek perangkat lunak.
RecommendedActions: Daftar tindakan yang direkomendasikan yang independen dan tanpa urutan tertentu. Saat ini, daftar ini sering kali panjangnya 1.
Properti peristiwa kesalahan
Tabel berikut menyajikan beberapa properti utama dari peristiwa kesalahan. Untuk skema lengkap, periksa kelas MSFT_StorageFaultEvent di storagewmi.mof.
Perhatikan ChangeType yang menunjukkan apakah kesalahan sedang dibuat, dihapus, atau diperbarui, dan FaultId. Suatu peristiwa juga berisi semua sifat kesalahan yang terkena dampak.
Properti | Contoh |
---|---|
JenisPerubahan | 0 |
ID Kesalahan | {12345-12345-12345-12345-12345} |
JenisKesalahan | Microsoft.Health.FaultType.Volume.Kapasitas |
Alasan | Volume hampir habis ruang tersedia. |
Tingkat Keparahan yang Dipersepsikan | 5 |
DeskripsiObjekKesalahan | Contoso XYZ9000 S.N. 123456789 |
LokasiObjekBermasalah | Rak A06, RU 25, Slot 11 |
Tindakan yang Direkomendasikan | {"Perluas volume.", "Migrasikan beban kerja ke volume lain."} |
ChangeType: ChangeType = { 0, 1, 2 } = { "Create", "Remove", "Update" }.
Referensi kerusakan pada Layanan Kesehatan
Layanan Kesehatan di Azure Local dan Windows Server dapat mendeteksi kesalahan di berbagai komponen sistem, termasuk penyimpanan, jaringan, dan sumber daya komputasi.
Untuk gambaran umum terperinci tentang kesalahan kesehatan, termasuk pemetaan tingkat keparahan kesalahan, pengaturan kesehatan (jenis data, asosiasi kesalahan, nilai default, dan deskripsi), dan daftar metrik yang dikumpulkan, unduh spreadsheet kesalahan Layanan Kesehatan .
Pertimbangan untuk kesalahan Layanan Kesehatan:
Beberapa kesalahan dinonaktifkan secara default. Untuk mengaktifkan kesalahan, atur pengaturan kesehatan yang sesuai ke true. Misalnya, jenis kesalahan
Microsoft.Health.FaultType.PhysicalDisk.HighLatency.AverageIO
dinonaktifkan secara default. Untuk mengaktifkannya, atur pengaturan kesehatanSystem.Storage.PhysicalDisk.HighLatency.Threshold.Tail.Enabled
ke benar.Kesehatan komponen penutup penyimpanan, seperti kipas, pasokan listrik, dan sensor berasal dari SCSI Enclosure Services (SES). Jika vendor Anda tidak memberikan informasi ini, Layanan Kesehatan tidak dapat menampilkannya.