Files
logpile/README.md
2026-02-04 19:00:03 +03:00

202 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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+
## Установка
### Сборка из исходников
```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
```
## Быстрый старт
```bash
# Запуск веб-сервера
./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` или `api`
- `protocol`: `redfish` | `ipmi` (для архивов может быть пустым)
- `target_host`: BMC host для live-сбора
- `collected_at`: timestamp времени получения данных
### Контракты 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": ["Задача поставлена в очередь"],
"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](LICENSE) для получения подробной информации.
## Автор
[https://mchus.pro](https://mchus.pro)