LOGPile
LOGPile — standalone Go-приложение для анализа диагностических данных BMC.
Поддерживает два сценария:
- Загрузка архивов/снапшотов и оффлайн-анализ в веб-интерфейсе.
- Live-сбор через Redfish API с последующим экспортом и повторной загрузкой оффлайн.
Что умеет
- Standalone бинарник с embedded UI (без внешних статических файлов).
- Парсинг vendor-архивов (Supermicro, Inspur/Kaytus, NVIDIA, fallback generic).
- Live-сбор по Redfish (
/api/collect) с прогрессом и журналом шагов. - Расширенный Redfish snapshot:
- нормализованные данные (CPU/RAM/Storage/GPU/PSU/NIC/PCIe/Firmware),
- сырой
redfish_treeдля будущего анализа.
- Загрузка JSON snapshot обратно через
/api/uploadдля оффлайн-работы. - Экспорт в CSV / JSON.
Дополнительные источники данных (Inspur/Kaytus)
Для архивов Inspur/Kaytus парсер использует не только asset.json и component.log,
но и runtime-снимок onekeylog/runningdata/redis-dump.rdb (если файл присутствует).
Что это даёт:
- обогащение GPU:
serial_number,firmware(VBIOS/FW), часть runtime telemetry; - обогащение NIC: firmware/serial/part-number (когда в текстовых логах поля пустые).
Внешний PCI IDs (без хардкода моделей)
Источник PCI IDs в проекте: официальный репозиторий
pciutils/pciids, подключён как git submodule:
third_party/pciids.
Локальная копия для встроенного lookup хранится в:
internal/parser/vendors/pciids/pci.ids.
Обновление локальной копии:
make update-pci-ids
Команда запускает scripts/update-pci-ids.sh, который скачивает актуальный
pci.ids из submodule (git submodule update --init --remote third_party/pciids)
и синхронизирует его в internal/parser/vendors/pciids/pci.ids.
Автообновление при сборке:
make buildиmake build-allзапускаютscripts/update-pci-ids.sh --best-effort;- если submodule уже инициализирован,
pci.idsсинхронизируется перед сборкой; - если submodule не инициализирован/недоступен, используется текущая копия файла, сборка не прерывается.
Отключить автообновление при сборке:
SKIP_PCI_IDS_UPDATE=1 make build
Если репозиторий клонирован без submodule:
git submodule update --init third_party/pciids
Парсер использует такой порядок lookup:
- встроенный в бинарник
internal/parser/vendors/pciids/pci.ids; ./pci.ids;/usr/share/hwdata/pci.ids;/usr/share/misc/pci.ids;/opt/homebrew/share/pciids/pci.ids;LOGPILE_PCI_IDS_PATH(можно передать несколько путей через:; имеет наивысший приоритет и переопределяет предыдущие значения).
Пример запуска:
LOGPILE_PCI_IDS_PATH=/path/to/pci.ids ./bin/logpile
Требования
- Go 1.22+
Сборка
make build
Бинарник будет в bin/logpile.
Для кросс-сборки:
make build-all
Артефакты:
bin/logpile-linux-amd64bin/logpile-linux-arm64bin/logpile-darwin-amd64bin/logpile-darwin-arm64bin/logpile-windows-amd64.exe
Запуск
./bin/logpile
./bin/logpile --port 8082
./bin/logpile --no-browser
./bin/logpile --version
Отладка падений (чтобы консоль не закрывалась):
./bin/logpile --hold-on-crash
На Windows
--hold-on-crashвключён по умолчанию.
Форматы загрузки
POST /api/upload принимает:
- архивы:
.tar,.tar.gz,.tgz - JSON snapshot (
AnalysisResult)
Live Redfish
Запуск live-сбора:
POST /api/collect
Пример body:
{
"host": "bmc01.example.local",
"protocol": "redfish",
"port": 443,
"username": "admin",
"auth_type": "password",
"password": "secret",
"tls_mode": "insecure"
}
Жизненный цикл задачи:
queued -> running -> success|failed|canceled
Статус и прогресс:
GET /api/collect/{id}POST /api/collect/{id}/cancel
Экспорт
GET /api/export/csv— серийные номераGET /api/export/json— полныйAnalysisResult(включаяraw_payloads)
Имена экспортируемых файлов:
YYYY-MM-DD (SERVER MODEL) - SERVER SN.<ext>
Пример:
2026-02-04 (SYS-421GE-TNHR2) - C8X123456789.json
API
POST /api/upload
POST /api/collect
GET /api/collect/{id}
POST /api/collect/{id}/cancel
GET /api/status
GET /api/parsers
GET /api/events
GET /api/sensors
GET /api/config
GET /api/serials
GET /api/firmware
GET /api/export/csv
GET /api/export/json
DELETE /api/clear
POST /api/shutdown
/api/status и /api/config содержат метаданные источника:
source_type:archive|apiprotocol:redfish|ipmi(для архивов может быть пустым)target_hostcollected_at
Структура
cmd/logpile/main.go # entrypoint
internal/collector/ # live collectors (redfish, ipmi mock)
internal/parser/ # archive parsers
internal/server/ # HTTP handlers
internal/exporter/ # CSV/JSON export
internal/models/ # data contracts
web/ # embedded templates/static
Лицензия
MIT — см. LICENSE.