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 или api
  • protocol: 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 или ipmi
  • auth_type: password или token
  • tls_mode: strict или insecure
  • При auth_type=password обязателен password, при auth_type=tokentoken

Ответ 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 для получения подробной информации.

Автор

https://mchus.pro

Description
BMC Log analyzer
Readme 26 MiB
v1.8.0 Latest
2026-03-04 08:12:17 +03:00
Languages
Go 85.9%
JavaScript 9.9%
CSS 2.4%
HTML 1.1%
Shell 0.6%
Other 0.1%