Features: - Modular parser architecture for vendor-specific formats - Inspur/Kaytus parser supporting asset.json, devicefrusdr.log, component.log, idl.log, and syslog files - PCI Vendor/Device ID lookup for hardware identification - Web interface with tabs: Events, Sensors, Config, Serials, Firmware - Server specification summary with component grouping - Export to CSV, JSON, TXT formats - BMC alarm parsing from IDL logs (memory errors, PSU events, etc.) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.7 KiB
7.7 KiB
BMC Analyzer - Инструкции для Claude Code
Описание проекта
Приложение для анализа диагностической информации с BMC серверов (IPMI). Представляет собой standalone Go-бинарник со встроенным веб-интерфейсом.
Функциональность
Входные данные:
- Архив (tar.gz/zip) с диагностическими данными IPMI сервера
Обработка:
- Парсинг System Event Log (SEL) - журнал событий IPMI
- Парсинг FRU (Field Replaceable Unit) - серийные номера компонентов
- Парсинг конфигурации сервера (CPU, RAM, диски, и т.д.)
Выходные данные:
- Веб-интерфейс с человекочитаемой информацией
- Экспорт логов в TXT/JSON
- Экспорт конфигурации в JSON
- Экспорт серийных номеров в CSV
Архитектура
- Тип: Standalone бинарник с embedded веб-сервером
- Язык: Go
- UI: Embedded HTML + CSS + Vanilla JS (или Alpine.js)
- Порт: localhost:8080 (по умолчанию)
Структура проекта
bmc-analyzer/
├── cmd/bmc-analyzer/main.go # Точка входа
├── internal/
│ ├── parser/ # Парсинг архивов и IPMI данных
│ ├── models/ # Модели данных
│ ├── analyzer/ # Логика анализа
│ ├── exporter/ # Экспорт данных
│ └── server/ # HTTP сервер и handlers
├── web/ # Embedded веб-интерфейс
│ ├── static/ # CSS, JS, изображения
│ └── templates/ # HTML шаблоны
├── testdata/ # Примеры архивов для тестов
├── go.mod
├── Makefile
└── README.md
Технический стек
Backend
- Go 1.21+
- Стандартная библиотека (net/http, archive/tar, compress/gzip)
- embed для встраивания веб-ресурсов
- Возможно: fiber или gin для роутинга (на ваше усмотрение)
Frontend
- Vanilla JavaScript или Alpine.js (минимализм)
- CSS (можно Tailwind CSS через CDN)
- Без сборщиков - всё embedded в бинарник
Парсинг IPMI
- SEL формат: обычно текстовый вывод
ipmitool sel listили бинарный - FRU формат: вывод
ipmitool fru print - Конфигурация: различные текстовые файлы из архива
Этапы разработки
1. Базовая структура ✓
- Создана структура директорий
- go.mod инициализирован
- Makefile создан
2. Парсер архивов
- Распаковка tar.gz
- Распаковка zip
- Определение типов файлов внутри архива
3. Парсеры IPMI данных
- SEL parser (System Event Log)
- FRU parser (серийные номера)
- Config parser (конфигурация сервера)
4. Модели данных
- Event (события из SEL)
- Hardware (конфигурация)
- SerialNumber (серийники компонентов)
5. Веб-сервер
- HTTP сервер с embedded файлами
- Upload handler для архивов
- API endpoints для получения данных
- Handlers для экспорта
6. Веб-интерфейс
- Главная страница с upload формой
- Отображение событий (timeline/таблица)
- Отображение конфигурации
- Таблица серийных номеров
- Кнопки экспорта
7. Экспортеры
- CSV экспорт (серийники)
- JSON экспорт (конфиг, события)
- TXT отчет (логи)
8. Тестирование и сборка
- Unit тесты для парсеров
- Интеграционные тесты
- Cross-platform сборка (Linux, Windows, Mac)
Примеры использования
# Простой запуск
./bmc-analyzer
# С указанием порта
./bmc-analyzer --port 9000
# С предзагрузкой файла
./bmc-analyzer --file /path/to/bmc-archive.tar.gz
# Кросс-компиляция
make build-all
Формат данных IPMI
SEL (System Event Log)
SEL Record ID : 0001
Record Type : 02
Timestamp : 01/15/2025 14:23:45
Generator ID : 0020
EvM Revision : 04
Sensor Type : Temperature
Sensor Number : 01
Event Type : Threshold
Event Direction : Assertion Event
Event Data : 010000
Description : Upper Critical - going high
FRU (Field Replaceable Unit)
FRU Device Description : Builtin FRU Device (ID 0)
Board Mfg Date : Mon Jan 1 00:00:00 1996
Board Mfg : Supermicro
Board Product : X11DPH-T
Board Serial : WM194S001234
Board Part Number : X11DPH-TQ
API Endpoints (планируемые)
POST /api/upload # Загрузить архив
GET /api/events # Получить список событий
GET /api/config # Получить конфигурацию
GET /api/serials # Получить серийные номера
GET /api/export/csv # Экспорт в CSV
GET /api/export/json # Экспорт в JSON
GET /api/export/txt # Экспорт текстового отчета
DELETE /api/clear # Очистить загруженные данные
Следующие шаги
- Инициализировать Go модуль
- Создать базовую структуру пакетов
- Реализовать парсер архивов (tar.gz)
- Создать простой HTTP сервер с upload формой
- Реализовать парсинг SEL логов
- Добавить веб-интерфейс для отображения данных
Примечания
- Все файлы веб-интерфейса должны быть embedded в бинарник через
//go:embed - Приоритет на простоту и минимум зависимостей
- Безопасность: валидация загружаемых архивов (размер, типы файлов)
- UI должен быть простым и функциональным, не перегруженным
- Поддержка русского языка в интерфейсе
Вопросы для уточнения
- Какие конкретно производители BMC используются? (Supermicro, Dell iDRAC, HP iLO, etc.)
- Есть ли примеры реальных архивов для тестирования?
- Нужна ли поддержка разных форматов SEL (текстовый vs бинарный)?
- Какие метрики/события наиболее важны для анализа?
- Нужна ли фильтрация событий по severity (Critical, Warning, Info)?