Inspur/Kaytus parser: детальный разбор onekeylog-дампов (fallback FRU/sensors, diagnose-json PCIe, component-логи) #20

Closed
opened 2026-07-29 09:41:08 +03:00 by mchus · 1 comment
Owner

Контекст

Парсер internal/parser/vendors/inspur/ на реальном дампе dump_<SN>_<date>.tar.gz (HGX B200, KR9288-X3) вернул stats: {events: 1740, fru: 0, sensors: 0}. SEL разобрался, весь остальной инвентарь и диагностические логи потеряны: парсер завязан на devicefrusdr.log, которого в этом варианте дампа нет, и не читает часть богатых источников вообще.

Диагностический кейс — интермиттентное пропадание GPU с PCIe (деградация GPU-бейзборда). Именно те данные, что помогают закрыть такой кейс, LOGPile сейчас дропает.

Два layout'а дампов

  1. onekeylog/.../devicefrusdr.log — старый, парсер заточен под него.
  2. dump_<SN>_<date>/ (текущий) — нет devicefrusdr.log. Вместо него:
    • component/sensor.txt, component/sdr.txt, component/SDR.DAT — сенсоры/SDR
    • component/fru.txt — FRU (S/N сервера, партномера MB и GPU-бейзборда)
    • log/sel.csv, log/sel.log, log/bmc/struct-log/sel_json.log — SEL
    • log/bmc/diagnose/OtrdDiagnoseComponent.json — структурный PCIe-снимок
    • log/bmc/commer-comp/* — покомпонентные логи BMC

Задачи

P0 — Fallback сенсоров/FRU без devicefrusdr.log

  • Нет devicefrusdr.log → FRU из component/fru.txt, сенсоры из component/sensor.txt + component/sdr.txt (при необходимости component/SDR.DAT).
  • Acceptance: на dump_<SN>_* stats.fru > 0 и stats.sensors > 0; в FRU есть Product Serial <SN> и GPU-бейзборд (партномер YZCA-04672-101, S/N <baseboard-SN>).

P0 — Новый источник PCIe/GPU-присутствия: diagnose/OtrdDiagnoseComponent.json

  • Парсить массив "Pcie Device Info": LocString (#GPU0..#GPU7, #SlotNN), PcieSlot, PresentStatus, VendorId, DeviceId, CurrentLinkSpeed, MaxLinkSpeed, NegotiatedLinkWidth, MaxLinkWidth.
  • Маппинг VendorId 4318 (0x10de) + DeviceId 0x2901 = NVIDIA B200.
  • Прямой источник GPU-присутствия/линка на момент дампа, дополняет gpu_status.go (сейчас статус выводится только из SEL через applyGPUStatusFromEvents/extractFaultyGPUSet).
  • Флагать деградацию линка: PresentStatus=1, но CurrentLinkSpeed < MaxLinkSpeed или NegotiatedLinkWidth < MaxLinkWidth.
  • Acceptance: на этом дампе — 8 GPU в слотах 100–107, Present, Gen5 x16.

P1 — Признаки со стороны BMC-компонентов (log/bmc/commer-comp/*)

  • commerslot/commerslot.log: Data Update fail for dev serial-N как события с timestamp.
  • commerhmc (HGX Management Controller), commerswvr (switch-VR/питание свитча), commerswcpld — ERROR/фейлы как события.
  • Учесть логротейт: *.log + *.tar.gz.0..9, парсить и архивные части. Фильтровать шум (Error in update redis, MutexTimeout = 0, Invalid Comp Data — не отказы).
  • Acceptance: в события попадают Data Update fail for dev serial-6/serial-7 от 2026-07-27.

P1 — SEL: источник и дедуп

  • При отсутствии devicefrusdr.log/selelist.csv читать SEL из log/sel.csv (сейчас работает — 1740 событий) и/или log/bmc/struct-log/sel_json.log.
  • Схлопывать задвоенные SEL-строки (одно событие приходит дважды) по (timestamp, event_type, description) — сейчас дубликаты уходят в экспорт и удваивают счёт эпизодов.

P2 — Контекст перезагрузок и BIOS

  • runningdata/bmc-device/biosChangedSettings/Bios_change_settings*.json — события «BIOS settings changed».
  • log/server/progress_log/host0/* — BIOS POST-коды.

P2 — Диагностика видимости

  • Если Detect() дал высокую уверенность, но sensors==0 || fru==0 — вернуть в /api/upload предупреждение («inventory sources not found: devicefrusdr.log absent, fell back to …»).

Не ломать

  • Обратную совместимость со старым onekeylog/.../devicefrusdr.log layout.
  • Существующие тесты internal/parser/vendors/inspur/*_test.go; добавить фикстуры нового layout'а (обрезанный dump_<SN>_<date>/).

Тестовый артефакт

~/Downloads/dump_<SN>_<date>.tar.gz (6.3 МБ). Эталоны: SEL 1740 событий (после дедупа ~870 уникальных), 34 PCIe present-mismatch, 8 GPU present/Gen5x16 в diagnose-json.

## Контекст Парсер `internal/parser/vendors/inspur/` на реальном дампе `dump_<SN>_<date>.tar.gz` (HGX B200, KR9288-X3) вернул `stats: {events: 1740, fru: 0, sensors: 0}`. SEL разобрался, весь остальной инвентарь и диагностические логи потеряны: парсер завязан на `devicefrusdr.log`, которого в этом варианте дампа нет, и не читает часть богатых источников вообще. Диагностический кейс — интермиттентное пропадание GPU с PCIe (деградация GPU-бейзборда). Именно те данные, что помогают закрыть такой кейс, LOGPile сейчас дропает. ## Два layout'а дампов 1. `onekeylog/.../devicefrusdr.log` — старый, парсер заточен под него. 2. `dump_<SN>_<date>/` (текущий) — **нет** `devicefrusdr.log`. Вместо него: - `component/sensor.txt`, `component/sdr.txt`, `component/SDR.DAT` — сенсоры/SDR - `component/fru.txt` — FRU (S/N сервера, партномера MB и GPU-бейзборда) - `log/sel.csv`, `log/sel.log`, `log/bmc/struct-log/sel_json.log` — SEL - `log/bmc/diagnose/OtrdDiagnoseComponent.json` — структурный PCIe-снимок - `log/bmc/commer-comp/*` — покомпонентные логи BMC ## Задачи ### P0 — Fallback сенсоров/FRU без `devicefrusdr.log` - Нет `devicefrusdr.log` → FRU из `component/fru.txt`, сенсоры из `component/sensor.txt` + `component/sdr.txt` (при необходимости `component/SDR.DAT`). - **Acceptance:** на `dump_<SN>_*` `stats.fru > 0` и `stats.sensors > 0`; в FRU есть Product Serial `<SN>` и GPU-бейзборд (партномер `YZCA-04672-101`, S/N `<baseboard-SN>`). ### P0 — Новый источник PCIe/GPU-присутствия: `diagnose/OtrdDiagnoseComponent.json` - Парсить массив `"Pcie Device Info"`: `LocString` (`#GPU0..#GPU7`, `#SlotNN`), `PcieSlot`, `PresentStatus`, `VendorId`, `DeviceId`, `CurrentLinkSpeed`, `MaxLinkSpeed`, `NegotiatedLinkWidth`, `MaxLinkWidth`. - Маппинг `VendorId 4318 (0x10de)` + `DeviceId 0x2901` = NVIDIA B200. - Прямой источник GPU-присутствия/линка на момент дампа, дополняет `gpu_status.go` (сейчас статус выводится только из SEL через `applyGPUStatusFromEvents`/`extractFaultyGPUSet`). - Флагать деградацию линка: `PresentStatus=1`, но `CurrentLinkSpeed < MaxLinkSpeed` или `NegotiatedLinkWidth < MaxLinkWidth`. - **Acceptance:** на этом дампе — 8 GPU в слотах 100–107, Present, Gen5 x16. ### P1 — Признаки со стороны BMC-компонентов (`log/bmc/commer-comp/*`) - `commerslot/commerslot.log`: `Data Update fail for dev serial-N` как события с timestamp. - `commerhmc` (HGX Management Controller), `commerswvr` (switch-VR/питание свитча), `commerswcpld` — ERROR/фейлы как события. - Учесть логротейт: `*.log` + `*.tar.gz.0..9`, парсить и архивные части. Фильтровать шум (`Error in update redis`, `MutexTimeout = 0`, `Invalid Comp Data` — не отказы). - **Acceptance:** в события попадают `Data Update fail for dev serial-6/serial-7` от 2026-07-27. ### P1 — SEL: источник и дедуп - При отсутствии `devicefrusdr.log`/`selelist.csv` читать SEL из `log/sel.csv` (сейчас работает — 1740 событий) и/или `log/bmc/struct-log/sel_json.log`. - Схлопывать задвоенные SEL-строки (одно событие приходит дважды) по `(timestamp, event_type, description)` — сейчас дубликаты уходят в экспорт и удваивают счёт эпизодов. ### P2 — Контекст перезагрузок и BIOS - `runningdata/bmc-device/biosChangedSettings/Bios_change_settings*.json` — события «BIOS settings changed». - `log/server/progress_log/host0/*` — BIOS POST-коды. ### P2 — Диагностика видимости - Если `Detect()` дал высокую уверенность, но `sensors==0 || fru==0` — вернуть в `/api/upload` предупреждение («inventory sources not found: devicefrusdr.log absent, fell back to …»). ## Не ломать - Обратную совместимость со старым `onekeylog/.../devicefrusdr.log` layout. - Существующие тесты `internal/parser/vendors/inspur/*_test.go`; добавить фикстуры нового layout'а (обрезанный `dump_<SN>_<date>/`). ## Тестовый артефакт `~/Downloads/dump_<SN>_<date>.tar.gz` (6.3 МБ). Эталоны: SEL 1740 событий (после дедупа ~870 уникальных), 34 PCIe present-mismatch, 8 GPU present/Gen5x16 в diagnose-json.
mchus added the enhancement label 2026-07-29 09:41:08 +03:00
Author
Owner

Реализовано в 74e6bf0 (см. коммит) + bible-local/10-decisions.md ADL-048.

Реализовано в 74e6bf0 (см. коммит) + bible-local/10-decisions.md ADL-048.
mchus closed this issue 2026-07-29 10:16:20 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mchus/logpile#20