# LOGPile **LOGPile** - это инструмент для анализа диагностической информации с BMC серверов (IPMI). Представляет собой standalone Go-бинарник со встроенным веб-интерфейсом, который позволяет анализировать и визуализировать данные из архивов BMC. ## Особенности - **Поддержка различных производителей**: Supermicro, Inspur/Kaytus, Nvidia и другие - **Анализ различных типов данных**: - System Event Log (SEL) - журнал событий IPMI - Field Replaceable Unit (FRU) - серийные номера компонентов - Конфигурация сервера (CPU, RAM, диски, и т.д.) - **Встроенный веб-интерфейс**: Человекочитаемая визуализация данных - **Экспорт данных**: Поддержка экспорта в CSV, JSON и TXT форматы - **Автоматическое определение формата**: Поддержка различных форматов архивов (tar.gz, zip) ## Требования - Go 1.22+ ## Установка ### Сборка из исходников ```bash # Клонирование репозитория git clone https://git.mchus.pro/mchus/logpile.git cd logpile # Сборка make build ``` ### Быстрая установка (Linux) ```bash # Скачать последнюю версию curl -L https://git.mchus.pro/mchus/logpile/-/releases/latest/download/logpile-linux-amd64.tar.gz | tar xz # Запуск ./logpile serve ``` ## Быстрый старт ```bash # Запуск веб-сервера ./bin/logpile serve # Открыть в браузере open http://localhost:8080 # С указанием порта ./bin/logpile serve --port 9000 # С предзагрузкой файла ./bin/logpile serve --file /path/to/bmc-archive.tar.gz ``` ## Функционал ### 1. Анализ архивов - Поддержка форматов: tar.gz, zip - Автоматическое определение производителя - Извлечение всех доступных данных из архива ### 2. Парсинг данных IPMI - **System Event Log (SEL)**: Анализ событий системы - **Field Replaceable Unit (FRU)**: Сбор серийных номеров компонентов - **Конфигурация сервера**: CPU, RAM, диски, PCIe устройства, сетевые карты и т.д. ### 3. Визуализация данных - Интерактивный веб-интерфейс - Отображение событий в хронологическом порядке - Таблицы с конфигурацией сервера - Списки серийных номеров - Показания сенсоров ### 4. Экспорт данных - **CSV**: Экспорт серийных номеров в формате CSV - **JSON**: Экспорт конфигурации и событий в формате JSON - **TXT**: Экспорт текстового отчета ## Поддерживаемые производители - **Supermicro** - **Inspur/Kaytus** - **Nvidia** - **Generic** (fallback для неизвестных форматов) ## API Endpoints ``` POST /api/upload # Загрузить архив POST /api/collect # Создать задачу live-сбора (in-memory mock lifecycle) GET /api/collect/{id} # Получить статус задачи live-сбора POST /api/collect/{id}/cancel # Отменить задачу live-сбора 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 # Экспорт в CSV GET /api/export/json # Экспорт в JSON GET /api/export/txt # Экспорт текстового отчета DELETE /api/clear # Очистить загруженные данные POST /api/shutdown # Завершить работу приложения ``` ### Контракты live-сбора (`/api/collect`) `POST /api/collect` принимает JSON: ```json { "host": "bmc01.example.local", "protocol": "redfish", "port": 443, "username": "admin", "auth_type": "password", "password": "secret", "tls_mode": "strict" } ``` - Обязательные поля: `host`, `protocol`, `port`, `username`, `auth_type`, `tls_mode` - `protocol`: `redfish` или `ipmi` - `auth_type`: `password` или `token` - `tls_mode`: `strict` или `insecure` - При `auth_type=password` обязателен `password`, при `auth_type=token` — `token` Ответ `202 Accepted`: ```json { "job_id": "job_a1b2c3d4e5f6g7h8", "status": "queued", "message": "Collection job accepted", "created_at": "2026-02-04T10:15:20Z" } ``` `GET /api/collect/{id}` возвращает `200 OK` со статусом задачи: ```json { "job_id": "job_a1b2c3d4e5f6g7h8", "status": "queued", "progress": 0, "logs": ["Job queued"], "updated_at": "2026-02-04T10:15:20Z" } ``` `POST /api/collect/{id}/cancel` возвращает `200 OK` и переводит задачу в `canceled`. Жизненный цикл mock-задачи: `queued -> running -> success|failed` (если `host` содержит `fail`, задача переходит в `failed`). ## Структура проекта ``` logpile/ ├── cmd/logpile/main.go # Точка входа ├── internal/ │ ├── parser/ # Парсинг архивов и IPMI данных │ ├── models/ # Модели данных │ ├── analyzer/ # Логика анализа │ ├── exporter/ # Экспорт данных │ └── server/ # HTTP сервер и handlers ├── web/ # Embedded веб-интерфейс │ ├── static/ # CSS, JS, изображения │ └── templates/ # HTML шаблоны ├── testdata/ # Примеры архивов для тестов ├── go.mod ├── Makefile └── README.md ``` ## Лицензия Этот проект лицензирован под MIT License - смотрите файл [LICENSE](LICENSE) для получения подробной информации. ## Автор [https://mchus.pro](https://mchus.pro)