596eda709c7316fc9edeb732f63da31c6d7b6ad8
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+
Установка
Сборка из исходников
# Клонирование репозитория
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 serve
Быстрый старт
# Запуск веб-сервера
./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 # Завершить работу приложения
/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": ["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 для получения подробной информации.
Автор
Description