Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Windows Server 2016
Что такое ошибки
Служба здравоохранения постоянно отслеживает кластер Storage Spaces Direct для обнаружения проблем и создания «ошибок». Один новый командлет отображает любые текущие неисправности, что позволяет легко проверить состояние развертывания без необходимости смотреть на каждую сущность или функцию по отдельности. Ошибки спроектированы так, чтобы быть точными, легко понятными и по ним можно было предпринять конкретные действия.
Каждая ошибка содержит пять важных полей:
- Severity
- Описание проблемы
- Рекомендуемые действия для устранения проблемы
- Информация для идентификации ошибочной сущности
- Физическое расположение (если применимо)
Вот пример распространенной ошибки:
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
Note
Физическое расположение основывается на конфигурации домена сбоя. Дополнительные сведения о доменах сбоя см. в разделе "Домены сбоя" в Windows Server 2016. Если вы не предоставите эти сведения, поле местоположения станет менее полезным — например, в нем может быть указан только номер слота.
Анализ первопричин
Служба здравоохранения может оценить возможные причины между генерирующими сбои сущностями, чтобы выявить и объединить ошибки, которые являются следствием одной и той же основной проблемы. Выявление таких цепочек влияния позволяет снизить объемы выводимой информации. Например, если сервер не работает, ожидается, что все диски на сервере также будут находиться без подключения. Поэтому для первопричины возникает только одна ошибка — в данном случае сервер.
Использование в PowerShell
Чтобы просмотреть текущие ошибки в PowerShell, выполните следующий командлет:
Get-StorageSubSystem Cluster* | Debug-StorageSubSystem
Это возвращает все ошибки, которые влияют на весь кластер Storage Spaces Direct. Чаще всего эти ошибки связаны с оборудованием или конфигурацией. Если ошибки отсутствуют, этот командлет не вернет ничего.
Note
В нерабородной среде и при собственном риске вы можете экспериментировать с этой функцией, активировав ошибки самостоятельно, например, удалив один физический диск или завершив работу одного узла. После появления сбоя повторно вставьте физический диск или перезапустите узел, и ошибка исчезнет снова.
Кроме того, можно просмотреть ошибки, влияющие только на определенные тома или общие папки с помощью следующих командлетов:
Get-Volume -FileSystemLabel <Label> | Debug-Volume
Get-FileShare -Name <Name> | Debug-FileShare
Это возвращает все ошибки, влияющие только на определенный том или общий файловый ресурс. Чаще всего эти ошибки связаны с планированием емкости, устойчивостью данных или функциями, такими как качество службы хранилища или реплика хранилища.
Использование в .NET и C#
Connect
Чтобы сделать запрос в службу здоровья, необходимо установить CimSession с кластером. Для этого вам потребуется некоторые вещи, доступные только в полной версии .NET, то есть вы не можете сделать это непосредственно из веб-приложения или мобильного приложения. Эти примеры кода будут использовать C#, самый простой выбор для этого уровня доступа к данным.
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;
}
Указанное имя пользователя должно быть локальным Администратором целевого компьютера.
Рекомендуется создать пароль SecureString непосредственно из входных данных пользователя в режиме реального времени, поэтому их пароль никогда не хранится в памяти в виде ясного текста. Это помогает устранить различные проблемы безопасности. Но на практике построение его, как описано выше, обычно используется в целях прототипирования.
Обнаружение объектов
Установив CimSession, вы можете запросить инструментарий управления Windows (WMI) в кластере.
Прежде чем получить ошибки или метрики, необходимо получить экземпляры нескольких соответствующих объектов. Во-первых, MSFT_StorageSubSystem, представляющий Storage Spaces Direct на кластере. С помощью этого можно получить все MSFT_StorageNode в кластере и каждый MSFT_Volume, томы данных. Наконец, вам потребуется MSFT_StorageHealth, сама служба здоровья также.
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();
}
Это те же объекты, которые вы получаете в PowerShell с помощью командлетов Get-StorageSubSystem, Get-StorageNode и Get-Volume.
Вы можете получить доступ ко всем тем же свойствам, которые описаны в классах API управления хранилищами.
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());
}
Ошибки запросов
Вызовите Diagnose, чтобы получить любые текущие ошибки, относящиеся к целевому CimInstance, будь то кластер или любой том.
Полный список ошибок, доступных в каждой области в Windows Server 2016, описан ниже.
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!
}
}
}
Опционально: класс MyFault
Возможно, имеет смысл создать и сохранить собственное представление об ошибках. Например, этот класс MyFault хранит несколько ключевых свойств ошибок, включая FaultId, которые можно использовать позже для связывания обновлений или удаления уведомлений, или дедупликации в случае обнаружения одной и той же ошибки несколько раз по какой-либо причине.
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));
}
Полный список свойств в каждой ошибке (DiagnoseResult) описан ниже.
События сбоя
При создании, удалении или обновлении сбоев служба мониторинга работоспособности создает события WMI. Это важно для поддержания состояния приложения в синхронизации без частого опроса и может помочь в таких случаях, как определить, когда отправлять оповещения электронной почты, например. Чтобы подписаться на эти события, этот пример кода снова использует шаблон конструктора наблюдателя.
Сначала подпишитесь на события 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);
}
Затем реализуйте наблюдатель, метод OnNext() которого будет вызываться при создании нового события.
Каждое событие содержит ChangeType , указывающее, создается ли ошибка, удаляется или обновляется, а также соответствующий идентификатор сбоя.
Кроме того, они содержат все свойства самого сбоя.
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
}
}
Общие сведения о жизненном цикле сбоя
Ошибки не предназначены для пометки как "просмотренные" или для разрешения пользователем. Они создаются, когда служба работоспособности фиксирует проблему, и они удаляются автоматически и только когда служба работоспособности больше не может фиксировать проблему. Как правило, это отражает, что проблема устранена.
Однако в некоторых случаях ошибки могут быть повторно обнаружены Службой здравоохранения (например, после переключения на резервный канал или из-за прерывистой связи и т. д.). По этой причине имеет смысл сохранить собственную модель ошибок, чтобы можно было легко устранить дублирование. Это особенно важно при отправке оповещений электронной почты или эквивалента.
Свойства ошибок
В этой таблице представлено несколько ключевых свойств объекта сбоя. Для полной схемы проверьте класс MSFT_StorageDiagnoseResult в storagewmi.mof.
| Property | Example |
|---|---|
| FaultId | {12345-12345-12345-12345-12345} |
| FaultType | Microsoft.Health.FaultType.Volume.Capacity |
| Reason | "Том занимает свободное место". |
| PerceivedSeverity | 5 |
| FaultingObjectDescription | Contoso XYZ9000 S.N. 123456789 |
| FaultingObjectLocation | Стойка A06, RU 25, слот 11 |
| RecommendedActions | {"Увеличить объем тома.", "Переместить рабочие нагрузки на другие тома."} |
FaultId Уникальный в пределах одного кластера.
PerceivedSeverity PerceivedSeverity = { 4, 5, 6 } = { "Информация", "Предупреждение" и "Ошибка" }, или эквивалентные цвета, такие как синий, желтый и красный.
FaultingObjectDescription Информация о части оборудования, обычно отсутствует для программных объектов.
Информация о месте расположения объекта для аппаратного обеспечения, обычно не заполняется для программных объектов.
Список рекомендуемых действий, которые являются независимыми и не зависят от определенного порядка. Сегодня этот список часто имеет длину 1.
Свойства событий сбоя
В этой таблице представлено несколько ключевых свойств события сбоя. Для полной схемы проверьте класс MSFT_StorageFaultEvent в storagewmi.mof.
Обратите внимание на Параметр ChangeType, который указывает, создается ли ошибка, удаляется или обновляется, а также идентификатор сбоя. Событие также содержит все свойства затронутого сбоя.
| Property | Example |
|---|---|
| ChangeType | 0 |
| FaultId | {12345-12345-12345-12345-12345} |
| FaultType | Microsoft.Health.FaultType.Volume.Capacity |
| Reason | "Том занимает свободное место". |
| PerceivedSeverity | 5 |
| FaultingObjectDescription | Contoso XYZ9000 S.N. 123456789 |
| FaultingObjectLocation | Стойка A06, RU 25, слот 11 |
| RecommendedActions | {"Увеличить объем тома.", "Переместить рабочие нагрузки на другие тома."} |
ChangeType ChangeType = { 0, 1, 2 } = { "Создать", "Удалить", "Обновить" }.
Coverage
В Windows Server 2016 служба мониторинга здоровья обеспечивает следующее обеспечение защиты от сбоев:
PhysicalDisk (8)
ТипНеисправности: Microsoft.Health.FaultType.PhysicalDisk.НеполадкиСМедиа.
- Серьезность : предупреждение.
- Причина: "Сбой физического диска".
- Рекомендуется: "Заменить физический диск".
FaultType: Microsoft.Health.FaultType.PhysicalDisk.ПотеряСвязи
- Серьезность : предупреждение.
- Причина: "Подключение было потеряно на физический диск".
- Рекомендуется: "Убедитесь, что физический диск работает и подключен должным образом".
Тип ошибки: Microsoft.Health.FaultType.Физический диск не отвечает
- Серьезность : предупреждение.
- Причина: "Физический диск проявляет повторяющуюся неотзывчивость".
- Рекомендуется: "Заменить физический диск".
FaultType: Microsoft.Health.FaultType.PhysicalDisk.PredictiveFailure (Предсказуемое повреждение физического диска)
- Серьезность : предупреждение.
- Причина: "Сбой физического диска прогнозируется в ближайшее время".
- Рекомендуется: "Заменить физический диск".
FaultType: Microsoft.Health.FaultType.PhysicalDisk.НеподдерживаемоеОборудование
- Серьезность : предупреждение.
- Причина: "Физический диск помещается в карантин, так как он не поддерживается поставщиком решения".
- RecommendedAction: "Замените физический диск поддерживаемым оборудованием".
ТипОшибки: Microsoft.Health.FaultType.PhysicalDisk.НеподдерживаемаяПрошивка
- Серьезность : предупреждение.
- Причина: "Физический диск находится в карантине, так как его версия встроенного ПО не поддерживается поставщиком решения".
- Рекомендуемое действие: "Обновите прошивку на физическом диске до целевой версии."
Тип ошибки: Microsoft.Health.FaultType.PhysicalDisk.UnrecognizedMetadata
- Серьезность : предупреждение.
- Причина: "Физический диск имеет нераспознанные метаданные".
- RecommendedAction: "Этот диск может содержать данные из неизвестного пула носителей. Сначала убедитесь, что на этом диске нет полезных данных, а затем сбросить диск".
ТипОшибки: Microsoft.Health.ТипОшибки.ФизическийДиск.ОшибкаОбновленияПрошивки
- Серьезность : предупреждение.
- Причина: "Не удалось обновить встроенное ПО на физическом диске".
- Рекомендуется: "Попробуйте использовать другой двоичный файл встроенного ПО".
Виртуальный диск (2)
FaultType: Microsoft.Health.FaultType.VirtualDisks.Требуется ремонт
- Уровень серьёзности: информационный
- Причина: "Некоторые данные на этом томе не полностью защищены. Они остаются доступными".
- RecommendedAction: "Восстановление устойчивости данных".
FaultType: Microsoft.Health.FaultType.ВиртуальныеДиски.Отключено
- Уровень серьезности: критический
- Причина: "Том недоступен. Возможно, часть данных утеряна".
- RecommendedAction: "Проверьте физическое и/или сетевое подключение всех устройств хранения. Возможно, потребуется восстановить данные из резервной копии".
Емкость пула (1)
FaultType: Microsoft.Health.FaultType.StoragePool.НедостаточнаяРезервнаяЕмкостьFault
- Серьезность : предупреждение.
- Причина: "Пул носителей не имеет минимально рекомендуемой емкости резервирования. Это может ограничить возможность восстановления устойчивости данных в случае сбоя диска".
- Рекомендуемое действие: "Добавить дополнительную емкость в пул хранения или освободить емкость. Минимальный рекомендуемый объём резерва зависит от развертывания, но составляет ёмкость, эквивалентную двум дискам."
Емкость тома (2)1
Тип ошибки: Microsoft.Health.FaultType.Объем.Емкость
- Серьезность : предупреждение.
- Причина: "На диске заканчивается свободное место".
- Рекомендуемое действие: "Расширить объём или перенести рабочие нагрузки на другие тома".
Тип ошибки: Microsoft.Health.FaultType.Объем.Емкость
- Уровень серьезности: критический
- Причина: "На диске заканчивается свободное место".
- Рекомендуемое действие: "Расширить объём или перенести рабочие нагрузки на другие тома".
Сервер (3)
Тип ошибки: Microsoft.Health.FaultType.Server.Down
- Уровень серьезности: критический
- Причина: "Не удается достичь сервера".
- RecommendedAction: "Пуск или замена сервера".
FaultType: Изолированный сервер (Microsoft.Health.FaultType.Server.Isolated)
- Уровень серьезности: критический
- Причина: "Сервер изолирован от кластера из-за проблем с подключением".
- Рекомендуется: "Если изоляция сохраняется, проверьте сети или перенесите рабочие нагрузки на другие узлы".
FaultType: Microsoft.Health.FaultType.Server.Quarantined (На русском: Тип ошибки: Сервер находится на карантине)
- Уровень серьезности: критический
- Причина: "Сервер помещается в карантин кластером из-за повторяющихся сбоев".
- RecommendedAction: "Замените сервер или исправьте сеть".
Кластер (1)
Тип ошибки: Microsoft.Health.FaultType.ClusterQuorumWitness.Error
- Уровень серьезности: критический
- Причина: "Кластер — это один сбой сервера от выхода из строя".
- RecommendedAction: "Проверьте ресурс-свидетель и перезапустите его при необходимости. Запустите или замените неисправные серверы".
Сетевой адаптер или интерфейс (4)
Тип ошибки: Microsoft.Health.FaultType.NetworkAdapter.Отсоединено
- Серьезность : предупреждение.
- Причина: "Сетевой интерфейс стал отключен".
- RecommendedAction: "Повторно подключите сетевой кабель".
ТипОшибки: Microsoft.Health.FaultType.NetworkInterface.Missing
- Серьезность : предупреждение.
- Причина: "Сервер {server} не имеет сетевых адаптеров, подключенных к сети кластера {cluster network}".
- RecommendedAction: "Подключите сервер к отсутствующей сети кластера".
Тип ошибки: Microsoft.Health.FaultType.NetworkAdapter.Hardware
- Серьезность : предупреждение.
- Причина: "Сетевой интерфейс имел сбой оборудования".
- RecommendedAction: "Замените сетевой адаптер."
Тип ошибки: Microsoft.Health.FaultType.NetworkAdapter.Disabled (Адаптер сети отключен)
- Серьезность : предупреждение.
- Причина: "Сетевой интерфейс {сетевой интерфейс} не включен и не используется".
- RecommendedAction: "Включить сетевой интерфейс".
Корпус (6)
Тип неисправности: Microsoft.Health.FaultType.StorageEnclosure.LostCommunication
- Серьезность : предупреждение.
- Причина: "Связь была потеряна в корпусе хранилища".
- RecommendedAction: "Запуск или замена корпуса хранилища".
Тип неисправности: Microsoft.Health.FaultType.StorageEnclosure.FanError
- Серьезность : предупреждение.
- Причина: "Сбой вентилятора в позиции {position} корпуса хранилища".
- RecommendedAction: "Замените вентилятор в корпусе хранилища".
Тип Ошибки: Microsoft.Health.FaultType.StorageEnclosure.CurrentSensorError
- Серьезность : предупреждение.
- Причина: "Датчик на позиции {позиция} хранилища вышел из строя."
- RecommendedAction: "Замените датчик тока в корпусе накопителя".
Тип неисправности: Microsoft.Health.FaultType.StorageEnclosure.VoltageSensorError
- Серьезность : предупреждение.
- Причина: "Датчик напряжения на позиции {позиция} отсека для хранения вышел из строя".
- RecommendedAction: "Замена датчика напряжения в корпусе хранилища".
FaultType: Microsoft.Health.FaultType.StorageEnclosure.IoControllerError (тип ошибки)
- Серьезность : предупреждение.
- Причина: "Сбой контроллера ввода-вывода в позиции {position} корпуса хранилища".
- RecommendedAction: "Замените контроллер ввода-вывода в корпусе хранилища".
Тип ошибки: Microsoft.Health.FaultType.StorageEnclosure.Температурный датчикОшибка
- Серьезность : предупреждение.
- Причина: "Датчик температуры в позиции {положение} корпуса хранилища завершился сбоем".
- RecommendedAction: "Замена датчика температуры в корпусе хранилища".
Развертывание встроенного ПО (3)
ТипОшибка: Microsoft.Health.FaultType.FaultDomain.РежимОбслуживанияНеУспешен
- Серьезность : предупреждение.
- Причина: "В настоящее время не удается добиться прогресса при развертывании встроенного ПО".
- Рекомендуется: "Убедитесь, что все дисковые пространства работоспособны, и что домен сбоя в настоящее время не находится в режиме обслуживания".
FaultType: Microsoft.Health.FaultType.FaultDomain.Сбой проверки версии прошивки
- Серьезность : предупреждение.
- Причина: "Развертывание встроенного ПО было отменено из-за нечитаемых или непредвиденных сведений о версии встроенного ПО после применения обновления встроенного ПО".
- Рекомендуемое действие: "Перезапустите установку встроенного ПО после устранения проблемы."
FaultType: Microsoft.Health.FaultType.FaultDomain.СлишкомМногоНеудачныхОбновлений
- Серьезность : предупреждение.
- Причина: "Развертывание встроенного ПО было отменено из-за слишком большого числа физических дисков, потерпевших неудачу при попытке обновления встроенного ПО".
- Рекомендуемое действие: "Перезапустите установку встроенного ПО после устранения проблемы."
Качество обслуживания хранилища (3)2
FaultType: Microsoft.Health.FaultType.StorQos.НедостаточнаяПропускнаяСпособность
- Серьезность : предупреждение.
- Причина: "Пропускная способность хранилища недостаточно для удовлетворения резервов".
- RecommendedAction: "Перенастройте политики QoS для хранилища".
FaultType: Microsoft.Health.FaultType.StorQos.LostCommunication (Потеря связи)
- Серьезность : предупреждение.
- Причина: "Диспетчер политик QoS хранилища утратил связь с томом".
- RecommendedAction: "Перезагрузите узлы {nodes}"
FaultType: Microsoft.Health.FaultType.StorQos.НеправильноНастроенныйПоток
- Серьезность : предупреждение.
- Причина: "Один или несколько потребителей хранилища (обычно виртуальные машины) используют несуществующую политику с идентификатором {id}".
- RecommendedAction: "Повторно создайте отсутствующие политики качества обслуживания хранилища".
1 Указывает, что объем заполнен на 80 % (незначительная степень важности) или на 90 % (значительная степень важности). 2 Указывает, что некоторые .vhd на томе не достигли своих минимальных IOPS более чем на 10% (незначительно), 30% (значительно) или 50% (критически) из скользящего 24-часового периода.
Note
Работоспособность компонентов дисковой полки (вентиляторы, источников питания, датчики и т. п.) определяется по данным SCSI Enclosure Services (SES). Если ваш поставщик не предоставляет эту информацию, служба здравоохранения не может ее отобразить.