﻿# NT Pantera-26 G3 (Redfish) - описание шаблона Zabbix

## Назначение

Шаблон `NT Pantera-26 G3 (Redfish)` предназначен для аппаратного мониторинга сервера NT Pantera-26 G3 через Redfish API BMC. Формат экспорта - Zabbix 7.0.

Шаблон собирает инвентарные данные, состояние системы, шасси и BMC, версии firmware, журнал событий Redfish EventLog, сведения о CPU, памяти, RAID-контроллерах, PCIe-устройствах, вентиляторах, температурных и вольтажных сенсорах.

Платформенный профиль, указанный в XML:

| Параметр | Значение |
|---|---|
| Форм-фактор | 2U |
| Дисковые корзины | 24 x LFF + 2 x SFF |
| Storage enclosures | 2 |
| PCIe | 2 x PCIe x8 Low Profile, 3 x PCIe x16, 1 x OCP 3.0 x16 |
| Блоки питания | 2 |
| Назначение | Универсальный сервер с двумя дисковыми корзинами и переменным набором PCIe/OCP-периферии |

Видимость отдельных компонентов зависит от того, какие ресурсы публикует BMC через Redfish.

## Общая структура

| Объект | Количество |
|---|---:|
| Версия экспорта Zabbix | 7.0 |
| Template group | `Templates/Server hardware` |
| Обычные items | 29 |
| LLD discovery rules | 10 |
| Item prototypes | 60 |
| Trigger prototypes | 11 |
| Обычные triggers | 3 |
| User macros | 13 |
| Value maps | 0 |
| Graph prototypes | 0 |

## Требования

Для работы шаблона нужен доступ Zabbix server или proxy к Redfish API BMC сервера.

Минимальные требования:

- Zabbix 7.0 или совместимая версия, поддерживающая импорт XML-шаблона 7.0.
- Сетевой доступ к BMC по HTTP или HTTPS.
- Рабочий Redfish endpoint `/redfish/v1`.
- Учетная запись BMC с правами чтения Redfish-ресурсов.
- Корректные значения Redfish identifiers для `Systems`, `Chassis` и `Managers`.

Большая часть запросов использует HTTP agent с Basic authentication. Запрос к service root `/redfish/v1` выполняется без авторизации, остальные raw-запросы используют макросы `{$API.USER}` и `{$API.PASSWORD}`.

## Макросы

Макросы рекомендуется переопределять на уровне хоста, чтобы один шаблон можно было безопасно применять к нескольким серверам.

| Макрос | Значение по умолчанию | Назначение |
|---|---|---|
| `{$API.USER}` | `admin` | Пользователь Redfish/BMC для Basic authentication. |
| `{$API.PASSWORD}` | `change_me` | Пароль Redfish/BMC. Нужно заменить перед использованием. |
| `{$PROTOCOL}` | `https` | Протокол доступа к BMC: `https` или `http`. |
| `{$HOST_IP}` | `10.30.90.109` | IP-адрес или DNS-имя BMC. |
| `{$SYSTEM_ID}` | `system` | Идентификатор Redfish Systems: `/redfish/v1/Systems/{SYSTEM_ID}`. |
| `{$CHASSIS_ID}` | `Zvezda_Arctur_Baseboard` | Основной chassis identifier для шасси, сенсоров, thermal и power. |
| `{$FAN_CHASSIS_ID}` | `chassis` | Chassis identifier, из которого берется `/Thermal` для вентиляторов. |
| `{$MANAGER_ID}` | `bmc` | Manager identifier для `/redfish/v1/Managers/{MANAGER_ID}`. |
| `{$POLLING_INTERVAL}` | `3m` | Интервал опроса service root. |
| `{$AUTH_POLLING_INTERVAL}` | `3m` | Интервал опроса базовых авторизованных ресурсов. |
| `{$DETAIL_POLLING_INTERVAL}` | `3m` | Интервал опроса коллекций и детальных аппаратных ресурсов. |
| `{$RAW_HISTORY_PERIOD}` | `1d` | Срок хранения raw JSON-ответов. |
| `{$KEEP_LOST_RESOURCES_PERIOD}` | `0d` | Срок хранения потерянных LLD-ресурсов. При `0d` ресурсы удаляются сразу. |

Примечание: в XML у каждого макроса заполнено одинаковое длинное описание шаблона. Для эксплуатации полезнее воспринимать это как общее описание шаблона, а не как индивидуальное описание каждого макроса.

## Redfish endpoints

Основные HTTP agent items собирают raw JSON из следующих Redfish endpoints:

| Item | Key | Endpoint |
|---|---|---|
| `_RAW: Service root` | `redfish.root.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1` |
| `_RAW: System` | `redfish.system.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Systems/{$SYSTEM_ID}` |
| `_RAW: Chassis` | `redfish.chassis.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Chassis/{$CHASSIS_ID}` |
| `_RAW: Manager` | `redfish.manager.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Managers/{$MANAGER_ID}` |
| `_RAW: Sensors collection` | `redfish.sensors.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Chassis/{$CHASSIS_ID}/Sensors` |
| `_RAW: Memory collection` | `redfish.memory.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Systems/{$SYSTEM_ID}/Memory` |
| `_RAW: Processor collection` | `redfish.processors.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Systems/{$SYSTEM_ID}/Processors` |
| `_RAW: Storage collection` | `redfish.storage.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Systems/{$SYSTEM_ID}/Storage` |
| `_RAW: PCIe device collection` | `redfish.pcie.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Systems/{$SYSTEM_ID}/PCIeDevices` |
| `_RAW: Baseboard thermal` | `redfish.baseboard.thermal.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Chassis/{$CHASSIS_ID}/Thermal` |
| `_RAW: Baseboard power` | `redfish.baseboard.power.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Chassis/{$CHASSIS_ID}/Power` |
| `_RAW: Fan thermal` | `redfish.fan.thermal.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Chassis/{$FAN_CHASSIS_ID}/Thermal` |
| `_RAW: Event log` | `redfish.eventlog.raw` | `{$PROTOCOL}://{$HOST_IP}/redfish/v1/Systems/{$SYSTEM_ID}/LogServices/EventLog/Entries` |

Для обнаруженных Sensors, DIMM, CPU, Storage и PCIe-устройств шаблон дополнительно выполняет per-resource HTTP GET по URI из `@odata.id`:

| Прототип | URL |
|---|---|
| `_RAW: Sensor {#SENSOR_ID}` | `{$PROTOCOL}://{$HOST_IP}{#SENSOR_URI}` |
| `_RAW: DIMM {#DIMM_ID}` | `{$PROTOCOL}://{$HOST_IP}{#DIMM_URI}` |
| `_RAW: CPU {#CPU_ID}` | `{$PROTOCOL}://{$HOST_IP}{#CPU_URI}` |
| `_RAW: RAID controller {#STORAGE_ID}` | `{$PROTOCOL}://{$HOST_IP}{#STORAGE_URI}` |
| `_RAW: PCIe device {#PCIE_ID}` | `{$PROTOCOL}://{$HOST_IP}{#PCIE_URI}` |

## Модель сбора данных

Шаблон построен вокруг raw master items и dependent items:

- HTTP agent items получают JSON-ответы Redfish.
- Dependent items извлекают конкретные поля через JSONPath.
- LLD rules используют `$.Members`, `$.Fans`, `$.Temperatures`, `$.Voltages` и JavaScript-предобработку, чтобы сформировать массив объектов для обнаружения.
- Для метрик частоты и размера применяются множители, например MHz преобразуются в GHz, MiB - в GiB.
- При ошибке извлечения значения у многих dependent items используется `DISCARD_VALUE`, чтобы не записывать некорректные данные.

История большинства эксплуатационных метрик хранится 30 дней. Raw JSON хранится по макросу `{$RAW_HISTORY_PERIOD}`, по умолчанию 1 день. Event items для отдельных событий хранятся 7 дней.

## Обычные items

| Группа | Items |
|---|---|
| Raw Redfish | Service root, System, Chassis, Manager, Sensors collection, Memory collection, Processor collection, Storage collection, PCIe device collection, Baseboard thermal, Baseboard power, Fan thermal, Event log |
| Events | Event log entries count, Last event message, Last event severity |
| System | Redfish version, System model, System serial number, BIOS version, System power state, System health, Total memory, Processor count |
| Chassis | Chassis name, Chassis health |
| BMC | BMC firmware version, BMC date and time, BMC health |

Ключевые dependent items:

| Item | Key | Master item | Значение |
|---|---|---|---|
| `Event log entries count` | `eventlog.entries.count` | `redfish.eventlog.raw` | Количество записей в `Members`. |
| `Last event message` | `eventlog.last.message` | `redfish.eventlog.raw` | `$.Members[0].Message`. |
| `Last event severity` | `eventlog.last.severity` | `redfish.eventlog.raw` | `$.Members[0].Severity`. |
| `Redfish version` | `redfish.version` | `redfish.root.raw` | `$.RedfishVersion`. |
| `System model` | `system.model` | `redfish.system.raw` | `$.Model`. |
| `System serial number` | `system.serial` | `redfish.system.raw` | `$.SerialNumber`. |
| `BIOS version` | `system.bios.version` | `redfish.system.raw` | `$.BiosVersion`. |
| `System power state` | `system.power.state` | `redfish.system.raw` | `$.PowerState`. |
| `System health` | `system.status.health` | `redfish.system.raw` | `$.Status.Health`. |
| `Total memory` | `system.memory.total` | `redfish.system.raw` | `$.MemorySummary.TotalSystemMemoryGiB`. |
| `Processor count` | `system.processor.count` | `redfish.system.raw` | `$.ProcessorSummary.Count`. |
| `Chassis name` | `chassis.name` | `redfish.chassis.raw` | Имя chassis. |
| `Chassis health` | `chassis.status.health` | `redfish.chassis.raw` | `$.Status.Health`. |
| `BMC firmware version` | `bmc.firmware.version` | `redfish.manager.raw` | Версия firmware manager/BMC. |
| `BMC date and time` | `bmc.datetime` | `redfish.manager.raw` | Дата и время BMC. |
| `BMC health` | `bmc.status.health` | `redfish.manager.raw` | `$.Status.Health`. |

## Low-level discovery

### Redfish sensors

Rule: `Redfish sensors`  
Key: `sensors.discovery`  
Master item: `redfish.sensors.raw`  
LLD macros: `{#SENSOR_ID}` из `SensorId`, `{#SENSOR_URI}` из `@odata.id`

Прототипы:

| Item prototype | Key | Тип |
|---|---|---|
| `_RAW: Sensor {#SENSOR_ID}` | `sensor.raw[{#SENSOR_ID}]` | HTTP agent |
| `Sensor {#SENSOR_ID} reading` | `sensor.reading[{#SENSOR_ID}]` | Dependent, float |
| `Sensor {#SENSOR_ID} units` | `sensor.units[{#SENSOR_ID}]` | Dependent, char |
| `Sensor {#SENSOR_ID} health` | `sensor.health[{#SENSOR_ID}]` | Dependent, char |
| `Sensor {#SENSOR_ID} state` | `sensor.state[{#SENSOR_ID}]` | Dependent, char |

Триггер-прототип: `Sensor {#SENSOR_ID} health status is {ITEM.LASTVALUE}` с severity `WARNING`, если health не соответствует `^OK$`.

### Memory DIMMs

Rule: `Memory DIMMs`  
Key: `memory.discovery`  
Master item: `redfish.memory.raw`  
LLD macros: `{#DIMM_ID}` из `DimmId`, `{#DIMM_URI}` из `@odata.id`

Прототипы:

| Item prototype | Key | Тип |
|---|---|---|
| `_RAW: DIMM {#DIMM_ID}` | `memory.raw[{#DIMM_ID}]` | HTTP agent |
| `DIMM {#DIMM_ID} locator` | `memory.locator[{#DIMM_ID}]` | Dependent |
| `DIMM {#DIMM_ID} size` | `memory.capacity[{#DIMM_ID}]` | Dependent, GiB |
| `DIMM {#DIMM_ID} speed` | `memory.speed[{#DIMM_ID}]` | Dependent, GHz |
| `DIMM {#DIMM_ID} health` | `memory.health[{#DIMM_ID}]` | Dependent |
| `DIMM {#DIMM_ID} state` | `memory.state[{#DIMM_ID}]` | Dependent |

Триггер-прототип: `DIMM {#DIMM_ID} health status is {ITEM.LASTVALUE}` с severity `WARNING`, если health не `OK`.

### Processors

Rule: `Processors`  
Key: `processors.discovery`  
Master item: `redfish.processors.raw`  
LLD macros: `{#CPU_ID}` из `CpuId`, `{#CPU_URI}` из `@odata.id`

Шаблон собирает модель, сокет, производителя, версию, архитектуру, instruction set, максимальную частоту, текущую частоту, напряжение, L1/L2/L3 cache, количество ядер, количество потоков, health и state.

Триггер-прототип: `CPU {#CPU_ID} health status is {ITEM.LASTVALUE}` с severity `WARNING`, если health не `OK`.

### RAID controllers

Rule: `RAID controllers`  
Key: `storage.discovery`  
Master item: `redfish.storage.raw`  
LLD macros: `{#STORAGE_ID}` из `StorageId`, `{#STORAGE_URI}` из `@odata.id`

Шаблон собирает модель контроллера, firmware, серийный номер, температуру, состояние BBU, количество физических и виртуальных дисков, health и state.

Триггер-прототипы:

| Trigger prototype | Severity | Условие |
|---|---|---|
| `RAID controller {#STORAGE_ID} BBU state is {ITEM.LASTVALUE}` | `WARNING` | BBU state не `Optimal` и не `OK`. |
| `RAID controller {#STORAGE_ID} health status is {ITEM.LASTVALUE}` | `WARNING` | Health не `OK`. |

### PCIe devices

Rule: `PCIe devices`  
Key: `pcie.discovery`  
Master item: `redfish.pcie.raw`  
LLD macros: `{#PCIE_ID}` из `PcieId`, `{#PCIE_URI}` из `@odata.id`

Шаблон собирает производителя, модель, card model, locator, link width, тип устройства, BDF, health и state.

Триггер-прототип: `PCIe device {#PCIE_ID} health status is {ITEM.LASTVALUE}` с severity `WARNING`, если health не `OK`.

### Fan removal events

Rule: `Fan removal events`  
Key: `events.fan.removal.discovery`  
Master item: `redfish.eventlog.raw`  
Lifetime: удалить сразу после потери ресурса.

LLD берет `$.Members`, затем JavaScript оставляет события:

- `MessageId == OpenBMC.0.1.FanRemoved`
- или `MessageId == ResourceEvent.1.0.ResourceRemoved`, если текст сообщения содержит `fan`

Фильтр LLD оставляет только события с `{#RESOLVED} = false`.

Создается calculated item:

| Item prototype | Key | History |
|---|---|---|
| `{#MESSAGE}` | `event.fan.removal[{#ID}]` | 7d |

Триггер-прототип:

| Trigger prototype | Severity | Особенность |
|---|---|---|
| `Fan removed: {#MESSAGE}` | `HIGH` | Условие `nodata(...,6h)=0`, manual close enabled. |

### PSU events

Rule: `PSU events`  
Key: `events.psu.discovery`  
Master item: `redfish.eventlog.raw`  
Lifetime: удалить сразу после потери ресурса.

LLD берет `$.Members`, затем JavaScript оставляет события:

- `MessageId == OpenBMC.0.1.PowerSupplyPowerLost`
- `MessageId == Power.1.0.PowerSupplyFailed`
- или сообщение содержит `power supply` и одновременно `lost` или `failed`

Фильтр LLD оставляет только события с `{#RESOLVED} = false`.

Триггер-прототип:

| Trigger prototype | Severity | Особенность |
|---|---|---|
| `Power supply event: {#MESSAGE}` | `AVERAGE` | Условие `nodata(...,6h)=0`, manual close enabled. |

### Fans

Rule: `Fans`  
Key: `fans.discovery`  
Master item: `redfish.fan.thermal.raw`  
LLD macros: `{#FAN_ID}` из `FanId`, `{#FAN_CRIT}` из `LowerThresholdCritical`

Прототипы:

| Item prototype | Key | Тип |
|---|---|---|
| `_RAW: Fan {#FAN_ID}` | `fan.raw[{#FAN_ID}]` | Dependent, raw JSON |
| `Fan {#FAN_ID} speed` | `fan.reading[{#FAN_ID}]` | Dependent, RPM |
| `Fan {#FAN_ID} health` | `fan.health[{#FAN_ID}]` | Dependent |
| `Fan {#FAN_ID} state` | `fan.state[{#FAN_ID}]` | Dependent |

Триггер-прототип: `Fan {#FAN_ID} speed low: <= {#FAN_CRIT} RPM` с severity `WARNING`.

### Temperatures

Rule: `Temperatures`  
Key: `temperatures.discovery`  
Master item: `redfish.baseboard.thermal.raw`  
LLD macros: `{#TEMP_ID}`, `{#TEMP_WARN}`, `{#TEMP_CRIT}`

`{#TEMP_WARN}` берется из `UpperThresholdNonCritical`, `{#TEMP_CRIT}` - из `UpperThresholdCritical`.

Прототипы:

| Item prototype | Key | Тип |
|---|---|---|
| `_RAW: Temperature {#TEMP_ID}` | `temperature.raw[{#TEMP_ID}]` | Dependent, raw JSON |
| `Temperature {#TEMP_ID}` | `temperature.reading[{#TEMP_ID}]` | Dependent, Celsius |
| `Temperature {#TEMP_ID} health` | `temperature.health[{#TEMP_ID}]` | Dependent |

Триггер-прототипы:

| Trigger prototype | Severity | Условие |
|---|---|---|
| `Temperature {#TEMP_ID} high: >= {#TEMP_WARN} C` | `WARNING` | Температура >= warning threshold и < critical threshold. |
| `Temperature {#TEMP_ID} critical: >= {#TEMP_CRIT} C` | `HIGH` | Температура >= critical threshold. |

### Voltages

Rule: `Voltages`  
Key: `voltages.discovery`  
Master item: `redfish.baseboard.power.raw`  
LLD macro: `{#VOLT_ID}`

Прототипы:

| Item prototype | Key | Тип |
|---|---|---|
| `_RAW: Voltage {#VOLT_ID}` | `voltage.raw[{#VOLT_ID}]` | Dependent, raw JSON |
| `Voltage {#VOLT_ID}` | `voltage.reading[{#VOLT_ID}]` | Dependent, V |
| `Voltage {#VOLT_ID} health` | `voltage.health[{#VOLT_ID}]` | Dependent |

Отдельных trigger prototypes для напряжений в шаблоне нет.

## Триггеры

### Обычные триггеры

| Trigger | Severity | Условие |
|---|---|---|
| `System health status is {ITEM.LASTVALUE}` | `WARNING` | `system.status.health` не соответствует `^OK$`. |
| `Chassis health status is {ITEM.LASTVALUE}` | `WARNING` | `chassis.status.health` не соответствует `^OK$`. |
| `BMC health status is {ITEM.LASTVALUE}` | `WARNING` | `bmc.status.health` не соответствует `^OK$`. |

### Trigger prototypes

| Область | Trigger prototype | Severity |
|---|---|---|
| Sensors | `Sensor {#SENSOR_ID} health status is {ITEM.LASTVALUE}` | `WARNING` |
| Memory | `DIMM {#DIMM_ID} health status is {ITEM.LASTVALUE}` | `WARNING` |
| CPU | `CPU {#CPU_ID} health status is {ITEM.LASTVALUE}` | `WARNING` |
| Storage | `RAID controller {#STORAGE_ID} BBU state is {ITEM.LASTVALUE}` | `WARNING` |
| Storage | `RAID controller {#STORAGE_ID} health status is {ITEM.LASTVALUE}` | `WARNING` |
| PCIe | `PCIe device {#PCIE_ID} health status is {ITEM.LASTVALUE}` | `WARNING` |
| EventLog | `Fan removed: {#MESSAGE}` | `HIGH` |
| EventLog | `Power supply event: {#MESSAGE}` | `AVERAGE` |
| Fans | `Fan {#FAN_ID} speed low: <= {#FAN_CRIT} RPM` | `WARNING` |
| Temperatures | `Temperature {#TEMP_ID} high: >= {#TEMP_WARN} C` | `WARNING` |
| Temperatures | `Temperature {#TEMP_ID} critical: >= {#TEMP_CRIT} C` | `HIGH` |

EventLog-триггеры включают `manual_close=YES`. Это значит, что после проверки причины инцидента оператор должен закрывать проблему вручную.

## Теги

Items размечены тегом `Application`. Используемые значения:

- `_RAW data`
- `BMC`
- `Chassis`
- `CPU`
- `Events`
- `Fans`
- `Memory`
- `PCIe`
- `Sensors`
- `Storage`
- `System`
- `Temperatures`
- `Voltages`

Такая разметка упрощает фильтрацию latest data, проблем и dashboard widgets по аппаратным подсистемам.

## Рекомендованный порядок внедрения

1. Импортировать XML в Zabbix 7.0.
2. Проверить, что шаблон попал в группу `Templates/Server hardware`.
3. Создать или выбрать host для BMC сервера NT Pantera-26 G3.
4. Назначить шаблон host'у.
5. На уровне host переопределить как минимум `{$HOST_IP}`, `{$API.USER}`, `{$API.PASSWORD}`, `{$SYSTEM_ID}`, `{$CHASSIS_ID}`, `{$FAN_CHASSIS_ID}`, `{$MANAGER_ID}`.
6. Проверить доступность `{$PROTOCOL}://{$HOST_IP}/redfish/v1`.
7. В Latest data проверить raw items: `redfish.root.raw`, `redfish.system.raw`, `redfish.chassis.raw`, `redfish.manager.raw`.
8. Дождаться выполнения LLD и проверить появление CPU, DIMM, PCIe, Storage, Fan, Temperature и Voltage items.
9. Проверить EventLog discovery на тестовом или известном событии.

## Проверка Redfish identifiers

Если после назначения шаблона raw items получают ошибки 404, в первую очередь нужно проверить значения identifiers:

- `/redfish/v1/Systems` - фактический `{$SYSTEM_ID}`;
- `/redfish/v1/Chassis` - фактический `{$CHASSIS_ID}` и отдельный `{$FAN_CHASSIS_ID}`;
- `/redfish/v1/Managers` - фактический `{$MANAGER_ID}`.

У разных BMC identifiers могут отличаться от значений по умолчанию. Например, в шаблоне используется `{$CHASSIS_ID}=Zvezda_Arctur_Baseboard`, а для вентиляторов отдельно `{$FAN_CHASSIS_ID}=chassis`.

## Ограничения и особенности

- Шаблон не содержит graph prototypes. Графики нужно создавать отдельно, если они нужны для эксплуатации.
- Value maps не заданы, поэтому текстовые состояния `Health`, `State`, `PowerState` отображаются как строки Redfish.
- Пороговые значения fan и temperature берутся из Redfish. Если BMC не публикует `LowerThresholdCritical`, `UpperThresholdNonCritical` или `UpperThresholdCritical`, соответствующие триггеры могут не создаваться или работать некорректно.
- LLD для потерянных ресурсов использует `{$KEEP_LOST_RESOURCES_PERIOD}`. Значение `0d` удаляет потерянные ресурсы сразу, что удобно для актуального состояния, но уменьшает историческую видимость исчезнувших устройств.
- Для EventLog берется `Members[0]` как последнее событие. Корректность зависит от порядка записей, который возвращает BMC.
- События Fan removal и PSU events фильтруются по `MessageId` и тексту `Message`. Если прошивка BMC использует другие идентификаторы событий, правила LLD нужно расширить.
- Пароль `change_me` является заглушкой и должен быть заменен до эксплуатации.

## Что мониторит шаблон

Шаблон покрывает следующие эксплуатационные вопросы:

- Доступен ли Redfish service root.
- Какая версия Redfish опубликована BMC.
- Какая модель, серийный номер, версия BIOS и power state у системы.
- Какое состояние `Health` у System, Chassis и BMC.
- Какой объем памяти и сколько процессоров видит BMC.
- Какие DIMM, CPU, RAID-контроллеры и PCIe-устройства обнаружены.
- Какие вентиляторы, температуры и напряжения публикуются через Redfish Thermal/Power.
- Есть ли в EventLog незакрытые события удаления вентилятора.
- Есть ли в EventLog незакрытые события потери или отказа блока питания.

