New parsers: - NVIDIA Field Diagnostics parser with dmidecode output support - NVIDIA Bug Report parser with comprehensive hardware extraction - Supermicro crashdump (CDump.txt) parser - Generic fallback parser for unrecognized text files Enhanced GPU parsing (nvidia-bug-report): - Model and manufacturer detection (NVIDIA H100 80GB HBM3) - UUID, Video BIOS version, IRQ information - Bus location (BDF), DMA size/mask, device minor - PCIe bus type details New hardware detection (nvidia-bug-report): - System Information: server S/N, UUID, manufacturer, product name - CPU: model, S/N, cores, threads, frequencies from dmidecode - Memory: P/N, S/N, manufacturer, speed for all DIMMs - Power Supplies: manufacturer, model, S/N, wattage, status - Network Adapters: Ethernet/InfiniBand controllers with VPD data - Model, P/N, S/N from lspci Vital Product Data - Port count/type detection (QSFP56, OSFP, etc.) - Support for ConnectX-6/7 adapters Archive handling improvements: - Plain .gz file support (not just tar.gz) - Increased size limit for plain gzip files (50MB) - Better error handling for mixed archive formats Web interface enhancements: - Display parser name and filename badges - Improved file info section with visual indicators Co-Authored-By: Claude (qwen3-coder:480b) <noreply@anthropic.com>
176 lines
6.2 KiB
Markdown
176 lines
6.2 KiB
Markdown
# 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. Обновите документацию
|