NVIDIA Field Diagnostics Parser
Парсер для диагностических архивов NVIDIA HGX Field Diagnostics. Универсальный парсер, не привязанный к конкретному производителю серверов.
Поддерживаемые архивы
- NVIDIA HGX Field Diag (работает с любыми серверами: Supermicro, Dell, HPE, и т.д.)
- Архивы с результатами GPU диагностики NVIDIA
Формат архива
Парсер работает с архивами в формате:
.tar(несжатый tar).tar.gz(сжатый gzip)
Распознаваемые файлы
Основные файлы
-
output.log - вывод dmidecode с информацией о системе
- Производитель сервера (Manufacturer)
- Модель сервера (Product Name) - например, SYS-821GE-TNHR
- Серийный номер сервера (Serial Number) - например, A514359X5A07900
- UUID, SKU Number, Family
-
unified_summary.json - детальная информация о системе и компонентах
- Информация о GPU (модель, производитель, VBIOS, PCI адреса)
- Информация о NVSwitch (VendorID, DeviceID, Link speed/width)
- Информация о производителе и модели сервера
-
summary.json - результаты тестов диагностики
- Результаты тестов GPU (inforom, checkinforom, gpumem, gpustress, pcie, nvlink, nvswitch, power)
- Коды ошибок и статусы тестов
-
summary.csv - альтернативный формат результатов тестов
Дополнительные файлы
gpu_fieldiag/*.log- детальные логи диагностики каждого GPUinventory/*.json- дополнительная информация о конфигурации
Извлекаемые данные
Hardware Configuration
GPUs
{
"slot": "GPUSXM1",
"model": "NVIDIA Device 2335",
"manufacturer": "NVIDIA Corporation",
"firmware": "96.00.D0.00.03",
"bdf": "0000:3a:00.0"
}
NVSwitch (как PCIe устройства)
{
"slot": "NVSWITCHNVSWITCH0",
"device_class": "NVSwitch",
"manufacturer": "NVIDIA Corporation",
"vendor_id": 4318,
"device_id": 8867,
"bdf": "0000:05:00.0",
"link_speed": "16GT/s",
"link_width": 2
}
Events
События создаются для:
- Предупреждений и ошибок тестов диагностики
- Примеры событий:
Row remapping failed- ошибка памяти GPU (Warning)- Различные тесты: connectivity, gpumem, gpustress, pcie, nvlink, nvswitch, power
Уровни severity:
info- информационные события (тесты прошли успешно)warning- предупреждения (например, Row remapping failed)critical- критические ошибки (коды ошибок 300+)
Пример использования
# Запуск веб-интерфейса
./logpile --file /path/to/A514359X5A07900_logs-20260122-074208.tar
# Веб-интерфейс будет доступен на http://localhost:8082
Автоопределение
Парсер автоматически определяет архивы NVIDIA Field Diag по наличию:
unified_summary.jsonс маркером "HGX Field Diag"summary.jsonиsummary.csvс результатами тестов- Директории
gpu_fieldiag/
Confidence score:
unified_summary.jsonс маркером "HGX Field Diag": +40summary.json: +20summary.csv: +15gpu_fieldiag/directory: +15
Версионирование
Текущая версия парсера: 1.1.0
При модификации логики парсера необходимо увеличивать версию в константе parserVersion в файле parser.go.
История версий
- 1.1.0 - Добавлен парсинг output.log (dmidecode) для извлечения модели и серийного номера сервера
- 1.0.0 - Первоначальная версия с парсингом unified_summary.json и summary.json/csv
Примеры данных
Пример unified_summary.json
{
"runInfo": {
"diagVersion": "24287-XXXX-FLD-42658",
"diagName": "HGX Field Diag",
"finalResult": "FAIL",
"errorCode": 363
},
"tests": [{
"virtualId": "inventory",
"components": [{
"componentId": "GPUSXM1",
"properties": [
{"id": "Manufacturer", "value": "Any Server Vendor"},
{"id": "VendorID", "value": "10de"},
{"id": "DeviceID", "value": "2335"}
]
}]
}]
}
Пример summary.json
[
{
"Error Code": "005-000-1-000000000363",
"Test": "gpumem",
"Component ID": "SXM5_SN_1653925025497",
"Notes": "Row remapping failed",
"Virtual ID": "gpumem"
}
]
Известные ограничения
- Парсер фокусируется на данных из
unified_summary.jsonиsummary.json - Детальные логи из
gpu_fieldiag/*.logпока не парсятся - Информация о CPU, памяти и дисках не извлекается (в архиве отсутствует)
Разработка
Добавление новых полей
- Изучите структуру JSON в архиве
- Добавьте поля в структуры
ComponentилиProperty - Обновите функции
parseGPUComponentилиparseNVSwitchComponent - Увеличьте версию парсера
Добавление новых типов файлов
- Создайте новый файл с парсером (например,
gpu_logs.go) - Добавьте парсинг в функцию
Parse()вparser.go - Обновите документацию