# NVIDIA Field Diagnostics Parser Парсер для диагностических архивов NVIDIA HGX Field Diagnostics. Универсальный парсер, не привязанный к конкретному производителю серверов. ## Поддерживаемые архивы - NVIDIA HGX Field Diag (работает с любыми серверами: Supermicro, Dell, HPE, и т.д.) - Архивы с результатами GPU диагностики NVIDIA ## Формат архива Парсер работает с архивами в формате: - `.tar` (несжатый tar) - `.tar.gz` (сжатый gzip) ## Распознаваемые файлы ### Основные файлы 1. **output.log** - вывод dmidecode с информацией о системе - Производитель сервера (Manufacturer) - Модель сервера (Product Name) - например, SYS-821GE-TNHR - Серийный номер сервера (Serial Number) - например, A514359X5A07900 - UUID, SKU Number, Family 2. **unified_summary.json** - детальная информация о системе и компонентах - Информация о GPU (модель, производитель, VBIOS, PCI адреса) - Информация о NVSwitch (VendorID, DeviceID, Link speed/width) - Информация о производителе и модели сервера 3. **summary.json** - результаты тестов диагностики - Результаты тестов GPU (inforom, checkinforom, gpumem, gpustress, pcie, nvlink, nvswitch, power) - Коды ошибок и статусы тестов 4. **summary.csv** - альтернативный формат результатов тестов ### Дополнительные файлы - `gpu_fieldiag/*.log` - детальные логи диагностики каждого GPU - `inventory/*.json` - дополнительная информация о конфигурации ## Извлекаемые данные ### Hardware Configuration #### GPUs ```json { "slot": "GPUSXM1", "model": "NVIDIA Device 2335", "manufacturer": "NVIDIA Corporation", "firmware": "96.00.D0.00.03", "bdf": "0000:3a:00.0" } ``` #### NVSwitch (как PCIe устройства) ```json { "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+) ## Пример использования ```bash # Запуск веб-интерфейса ./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": +40 - `summary.json`: +20 - `summary.csv`: +15 - `gpu_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 ```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 ```json [ { "Error Code": "005-000-1-000000000363", "Test": "gpumem", "Component ID": "SXM5_SN_1653925025497", "Notes": "Row remapping failed", "Virtual ID": "gpumem" } ] ``` ## Известные ограничения 1. Парсер фокусируется на данных из `unified_summary.json` и `summary.json` 2. Детальные логи из `gpu_fieldiag/*.log` пока не парсятся 3. Информация о CPU, памяти и дисках не извлекается (в архиве отсутствует) ## Разработка ### Добавление новых полей 1. Изучите структуру JSON в архиве 2. Добавьте поля в структуры `Component` или `Property` 3. Обновите функции `parseGPUComponent` или `parseNVSwitchComponent` 4. Увеличьте версию парсера ### Добавление новых типов файлов 1. Создайте новый файл с парсером (например, `gpu_logs.go`) 2. Добавьте парсинг в функцию `Parse()` в `parser.go` 3. Обновите документацию