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 форматы
- Автоматическое определение формата: Для upload path сейчас поддержаны tar.gz/tgz/tar (zip в плане доработки upload)
Требования
- Go 1.22+
Установка
Сборка из исходников
# Клонирование репозитория
git clone https://git.mchus.pro/mchus/logpile.git
cd logpile
# Сборка
make build
Быстрая установка (Linux)
# Скачать последнюю версию
curl -L https://git.mchus.pro/mchus/logpile/-/releases/latest/download/logpile-linux-amd64.tar.gz | tar xz
# Запуск
./logpile
Быстрый старт
# Запуск веб-сервера
./bin/logpile
# Открыть в браузере
open http://localhost:8082
# С указанием порта
./bin/logpile --port 9000
# Не открывать браузер автоматически
./bin/logpile --no-browser
Функционал
1. Анализ архивов
- Поддержка upload path: tar.gz/tgz/tar
- Автоматическое определение производителя
- Извлечение всех доступных данных из архива
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-сбора
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 # Завершить работу приложения
/api/status и /api/config теперь возвращают унифицированные метаданные источника:
source_type:archiveилиapiprotocol:redfish|ipmi(для архивов может быть пустым)target_host: BMC host для live-сбораcollected_at: timestamp времени получения данных
Контракты live-сбора (/api/collect)
POST /api/collect принимает 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илиipmiauth_type:passwordилиtokentls_mode:strictилиinsecure- При
auth_type=passwordобязателенpassword, приauth_type=token—token
Ответ 202 Accepted:
{
"job_id": "job_a1b2c3d4e5f6g7h8",
"status": "queued",
"message": "Collection job accepted",
"created_at": "2026-02-04T10:15:20Z"
}
GET /api/collect/{id} возвращает 200 OK со статусом задачи:
{
"job_id": "job_a1b2c3d4e5f6g7h8",
"status": "queued",
"progress": 0,
"logs": ["Задача поставлена в очередь"],
"created_at": "2026-02-04T10:15:20Z",
"updated_at": "2026-02-04T10:15:20Z"
}
POST /api/collect/{id}/cancel возвращает 200 OK и переводит задачу в canceled.
Жизненный цикл задачи: queued -> running -> success|failed|canceled.
Подключаемые коннекторы live-сбора
redfish: реальный сбор конфигурации с BMC по REST API (/redfish/v1/...)ipmi: временный mock-коннектор (каркас для последующей замены на реальный IPMI)
host можно передавать как обычный hostname (например, bmc01.example.local) или как полный URL (https://10.0.0.10:8443).
AnalysisResult для API-сценария обновляется на success; при failed/canceled предыдущие загруженные данные сохраняются.
Структура проекта
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 для получения подробной информации.