Files
HellreigN/README.md
T
d3m0k1d 6d6dd91241
ci-agent / build (push) Failing after 14m57s
docs
2026-04-05 09:32:12 +03:00

427 lines
15 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.
# HellreigN
Платформа централизованного мониторинга логов, управления скриптами и деплоя агентов.
## Архитектура
```
┌─────────────┐ gRPC (mTLS) ┌────────┐
│ Agent 1 │ ───────────────────────► │ │
└─────────────┘ │ │
┌─────────────┐ gRPC (mTLS) │Backend │ HTTP ┌──────────┐
│ Agent 2 │ ───────────────────────► │ :8080 │ ◄──────────────── │ Frontend │
└─────────────┘ │ :9001 │ │ :3000 │
┌─────────────┐ gRPC (mTLS) │ │ └──────────┘
│ Agent N │ ───────────────────────► │ │
└─────────────┘ └───┬────┘
┌─────────────┐
│ ClickHouse │
│ :8123/:9000│
└─────────────┘
```
### Компоненты
| Компонент | Описание |
|-----------|----------|
| **Backend** | Go (Gin + gRPC). REST API, gRPC сервер с mTLS, хранение токенов в SQLite |
| **Agent** | Go. Сбор логов (journald, docker, kubernetes, file), отправка метрик, выполнение команд |
| **Frontend** | React 19 + TypeScript + TailwindCSS + PrimeReact |
| **ClickHouse** | Хранилище логов |
## Быстрый старт
### Требования
- Docker + Docker Compose
- Go 1.26.1+ (для локальной разработки)
- protoc + protoc-gen-go (для генерации proto)
### Деплой через Docker Compose
```bash
cd infra
docker compose up -d --build
```
Это поднимет:
- **ClickHouse** — хранилище логов
- **Backend** — API на порту `8080`, gRPC на `9001`
- **Frontend** — веб-интерфейс на порту `3000`
- **Agent** — агент мониторинга (пример)
Откройте `http://localhost:3000`. Логин: `admin`, пароль: `admin123`.
### Локальная разработка
#### Backend
```bash
cd backend
go mod tidy
go run ./cmd/main.go
```
#### Frontend
```bash
cd frontend
npm install
npm run dev
```
#### Agent
```bash
cd agent
go mod tidy
CONFIG_FILE=./config.yml go run main.go
```
## Конфигурация
### Backend (`infra/backend/config.yml`)
```yaml
database:
token_db: /var/lib/hellreign/tokens.db # SQLite база токенов и пользователей
clickhouse_host: clickhouse:9000 # ClickHouse native порт
clickhouse_user: default # Пользователь ClickHouse
clickhouse_password: testpassword # Пароль ClickHouse
clickhouse_database: hellreign # База данных ClickHouse
admin:
admin_name: Admin # Имя администратора
admin_last_name: User # Фамилия администратора
admin_login: admin # Логин администратора
admin_password: admin123 # Пароль администратора (смените!)
```
### Agent (`infra/agent/config.yml`)
```yaml
backend_url: http://backend:8080 # HTTP URL бэкенда
grpc_url: backend:9001 # gRPC URL бэкенда
label: test-agent-1 # Уникальная метка агента
registration_token: "your-token-here" # Токен регистрации (сгенерировать в UI)
cert_dir: /etc/hellreign-agent/certs # Директория для mTLS сертификатов
services:
# Сбор логов из journald
- name: system
type: journald
# Сбор логов Docker контейнера
- name: nginx
type: docker
# Сбор логов из journald + проверка systemd сервиса
- name: sshd
type: journald
systemd_unit: sshd # Опционально: проверка alive/dead
# Сбор логов из файла
- name: myapp
type: file
path: /var/log/myapp/app.log
# Сбор логов из Kubernetes
- name: mypod
type: kubernetes
namespace: default
pod: my-pod
container: my-container
```
### Graph зависимостей (`infra/services.yaml`)
Описывает зависимости сервисов для построения графа и определения причин сбоев:
```yaml
nodes:
test-agent-1:
services:
nginx:
depends_on:
- sshd
sshd:
depends_on: []
system:
depends_on:
- sshd
```
## Переменные окружения
### Backend
| Переменная | По умолчанию | Описание |
|------------|-------------|----------|
| `CONFIG_FILE` | `/etc/hellreign/config.yml` | Путь к YAML конфигу |
| `GRAPH_YAML_PATH` | `/etc/hellreign/services.yaml` | Путь к графу сервисов |
| `SSL_CERT_DIR` | `/var/lib/hellreign/ssl` | Директория SSL сертификатов для mTLS |
| `SERVER_SAN_DNS` | `localhost,backend` | SAN DNS для серверного сертификата |
| `SERVER_SAN_IP` | `127.0.0.1` | SAN IP для серверного сертификата |
| `GRPC_PORT` | `9001` | Порт gRPC сервера |
| `GIN_MODE` | `release` | Режим Gin (`debug` / `release`) |
### Agent
| Переменная | По умолчанию | Описание |
|------------|-------------|----------|
| `CONFIG_FILE` | `/etc/hellreign-agent/config.yml` | Путь к YAML конфигу агента |
| `JOURNALD_LOGDIR` | `/var/log/journal` | Директория логов journald (read-only) |
| `BUFFER_DB` | `/var/lib/hellreign-agent/agent_buffer.db` | SQLite буфер для офлайн-доставки |
| `IS_DEBUG` | `0` | Включить debug логи агента (`1` / `0`) |
## Порты
| Сервис | Порт | Назначение |
|--------|------|------------|
| Frontend | `3000` | Веб-интерфейс (Nginx → React) |
| Backend HTTP | `8080` | REST API + Swagger UI |
| Backend gRPC | `9001` | gRPC с mTLS (Commander + Collector) |
| ClickHouse HTTP | `8123` | HTTP интерфейс ClickHouse |
| ClickHouse Native | `9000` | Native протокол ClickHouse |
## API
### Авторизация
```bash
# Логин
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"login":"admin","password":"admin123"}'
# Создать токен
curl -X POST http://localhost:8080/api/v1/auth/token \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"name":"my-token","permissions":["admin"]}'
```
### Регистрация агента
```bash
# Сгенерировать токен регистрации (admin)
curl -X POST http://localhost:8080/api/v1/agents/register-token \
-H "Authorization: Bearer <jwt>"
# Зарегистрировать агент
curl -X POST http://localhost:8080/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"registration_token":"<token>","csr":"<pem>"}'
```
### Логи
```bash
# Поиск логов
curl "http://localhost:8080/api/v1/logs?service=nginx&level=error&from=2024-01-01T00:00:00Z" \
-H "Authorization: Bearer <jwt>"
# Список сервисов
curl http://localhost:8080/api/v1/logs/services \
-H "Authorization: Bearer <jwt>"
```
### Агенты и метрики
```bash
# Список подключённых агентов
curl http://localhost:8080/api/v1/agents \
-H "Authorization: Bearer <jwt>"
# Метрики нагрузки (CPU, RAM, disk, network)
curl http://localhost:8080/api/v1/agents/system-metrics \
-H "Authorization: Bearer <jwt>"
```
### Скрипты
```bash
# Дерево скриптов
curl http://localhost:8080/api/v1/scripts/tree \
-H "Authorization: Bearer <jwt>"
# Создать скрипт
curl -X POST http://localhost:8080/api/v1/scripts \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"path":"deploy/restart.sh","content":"#!/bin/bash\nsystemctl restart nginx","interpreter_id":1}'
# Запустить скрипт
curl -X POST http://localhost:8080/api/v1/scripts/1/run \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"token":"agent-token","stdin":""}'
# Переименовать скрипт или папку
curl -X POST http://localhost:8080/api/v1/scripts/rename \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"old_path":"deploy/old.sh","new_path":"deploy/new.sh"}'
```
### Swagger
Swagger UI доступен по адресу: `http://localhost:8080/swagger/index.html`
Перегенерация:
```bash
cd backend
swag init -g ./cmd/main.go --parseDependency --parseInternal
```
## Proto
gRPC протокол определён в `proto/hellreign.proto`. После изменений:
```bash
cd proto
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
hellreign.proto
mv hellreign*.go proto/
```
## Миграции
SQL миграции для SQLite хранятся в `migrations/`. Применяются автоматически при старте бэкенда.
## Деплой агента на хост
### 1. Создать директорию
```bash
sudo mkdir -p /etc/hellreign-agent/certs
sudo mkdir -p /var/lib/hellreign-agent
```
### 2. Конфиг
```bash
sudo nano /etc/hellreign-agent/config.yml
```
```yaml
backend_url: https://your-backend.example.com
grpc_url: your-backend.example.com:9001
label: production-server-1
registration_token: "token-from-ui"
cert_dir: /etc/hellreign-agent/certs
services:
- name: nginx
type: journald
systemd_unit: nginx.service
- name: postgres
type: journald
systemd_unit: postgresql.service
```
### 3. Установить бинарь
Скачать релиз из Gitea или собрать:
```bash
cd agent
go build -o hellreign-agent ./main.go
sudo mv hellreign-agent /usr/bin/
```
### 4. Systemd сервис
```ini
[Unit]
Description=HellreigN Agent
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/hellreign-agent
Environment=CONFIG_FILE=/etc/hellreign-agent/config.yml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now hellreign-agent
```
## CI/CD
### GoReleaser (агент)
При пуше тега `v*` автоматически собирается релиз:
```bash
git tag v1.0.0
git push origin v1.0.0
```
Собираются `.deb` и `.rpm` пакеты для `linux/amd64` и `linux/arm64`.
Требует секрет `GITEA_TOKEN` в настройках репозитория.
## Структура проекта
```
HellreigN/
├── agent/ # Агент мониторинга
│ ├── main.go # Точка входа
│ ├── dockerfile
│ ├── .goreleaser.yml # Конфиг GoReleaser
│ └── internal/
│ ├── buffer/ # SQLite буфер логов
│ ├── client/ # gRPC клиент команд
│ ├── commander/ # Исполнитель команд
│ ├── config/ # Загрузка YAML конфига
│ ├── logger/ # Логгер
│ ├── logsource/ # Источники логов
│ │ ├── docker/ # Docker логи
│ │ ├── file/ # File логи
│ │ ├── journald/ # Journald логи
│ │ └── kubernetes/ # Kubernetes логи
│ ├── metrics/ # Сбор метрик (CPU, RAM, disk, network)
│ ├── mtls/ # mTLS credentials
│ └── registration/ # Регистрация агента
├── backend/ # Бэкенд API
│ ├── cmd/main.go # Точка входа
│ ├── dockerfile
│ ├── internal/
│ │ ├── handlers/ # HTTP хендлеры
│ │ ├── repository/ # Репозитории (SQLite)
│ │ ├── service/ # Бизнес-логика
│ │ ├── storage/ # ClickHouse storage
│ │ ├── grpcsrv/ # gRPC серверы
│ │ │ ├── commander/ # Выполнение команд на агентах
│ │ │ └── collector/ # Сбор логов и метрик
│ │ ├── auth/ # JWT авторизация
│ │ └── config/ # Загрузка конфига
│ └── docs/ # Swagger документация
├── frontend/ # Веб-интерфейс
│ ├── dockerfile
│ ├── nginx.conf
│ └── src/
├── infra/ # Docker Compose деплой
│ ├── docker-compose.yml
│ ├── services.yaml # Граф зависимостей
│ ├── backend/config.yml # Конфиг бэкенда
│ ├── agent/config.yml # Конфиг агента
│ └── clickhouse/init/ # Инициализация ClickHouse
├── migrations/ # SQL миграции SQLite
├── proto/ # Protobuf определения
│ ├── hellreign.proto
│ └── proto/ # Сгенерированный Go код
└── .gitea/workflows/ # Gitea Actions CI/CD
├── ci-agent.yml
├── ci-front.yml
└── release-agent.yml
```