Глава 0: Введение
Что такое melisai?
melisai — это единый бинарный файл на Go, который выполняет комплексный анализ производительности Linux-сервера. Он собирает метрики из ядра, анализирует их и выдаёт структурированный JSON-отчёт, который может использоваться людьми, AI/LLM или системами мониторинга.
Представьте, что вы запускаете 30+ диагностических команд одновременно, но с единым структурированным выводом и автоматическим анализом.
Проблема: «Сервер тормозит»
Каждый системный администратор слышал это. Сервер медленный. Но что значит «медленный»?
- CPU перегружен?
- Приложение ждёт дисковый I/O?
- Утечка памяти вызывает swapping?
- Сеть теряет пакеты?
- Контейнер достигает CPU-квоты?
Без системного подхода вы запускаете случайные команды и гадаете. melisai предоставляет этот системный подход.
Методология USE
melisai построен на методологии USE Брендана Грегга — фреймворке для анализа производительности систем. USE расшифровывается как:
| Буква | Значение | Вопрос |
|---|---|---|
| U | Utilization (Утилизация) | Насколько загружен этот ресурс? (0–100%) |
| S | Saturation (Насыщение) | Есть ли очередь на работу? (runqueue, swap, очередь I/O) |
| E | Errors (Ошибки) | Были ли ошибки? (drops, ретрансмиссии, ECC) |
Вы задаёте эти три вопроса для каждого системного ресурса:
┌──────────┬──────────────────────┬──────────────────────┬────────────────────┐
│ Ресурс │ Утилизация │ Насыщение │ Ошибки │
├──────────┼──────────────────────┼──────────────────────┼────────────────────┤
│ CPU │ 100% - idle% │ load_avg / num_cpus │ — │
│ Память │ (total-available)/ │ swap_used / swap_ │ major page faults │
│ │ total × 100 │ total × 100 │ (OOM events) │
│ Диск │ io_time / interval │ io_in_progress │ ошибки устройства │
│ Сеть │ использование │ drops, overflows │ errors, retrans │
│ │ полосы │ │ │
└──────────┴──────────────────────┴──────────────────────┴────────────────────┘
Почему USE работает
Без USE вы можете проверить утилизацию CPU и остановиться. Но высокая утилизация CPU без насыщения — это совершенно нормально: вы используете то, за что заплатили. Проблема начинается, когда появляется насыщение (работа стоит в очереди) или возникают ошибки.
USE гарантирует, что вы проверите все три измерения для каждого ресурса, и не пропустите ни одного узкого места.
Обзор архитектуры
┌──────────────────────────────────────────────────────────────────┐
│ melisai binary │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ CLI │ │ Оркестратор │ │ Вывод │ │
│ │ (cobra) │───▶│(параллельный)│───▶│ JSON / FlameGraph │ │
│ └─────────────┘ │ + профили │ │ + AI Prompt │ │
│ │ + сигналы │ └──────────────────────┘ │
│ └──────┬───────┘ │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ ▼ ▼ ▼ │
│ ┌───────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Уровень 1 │ │ Уровень 2 │ │ Уровень 3 │ │
│ │ Коллекторы │ │ BCC │ │ eBPF │ │
│ │ (procfs/ │ │ Executor │ │ (cilium/ │ │
│ │ sysfs) │ │ + Security │ │ ebpf) │ │
│ │ │ │ + Parsers │ │ │ │
│ │ 7 коллекторов│ │ 20 тулзов │ │ BTF/CO-RE │ │
│ └───────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └─────────────┼─────────────┘ │
│ ▼ │
│ ┌──────────────────────────┐ │
│ │ Слой модели │ │
│ │ • Report (JSON-схема) │ │
│ │ • USE-метрики │ │
│ │ • Обнаружение аномалий │ │
│ │ • Health score (0-100) │ │
│ │ • Рекомендации │ │
│ └──────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
Уровни сбора данных (Tiers)
Не каждая Linux-система имеет одинаковые возможности. Минимальный контейнер может иметь только /proc, а bare-metal сервер с современным ядром может использовать нативный eBPF. melisai справляется с этим через три уровня:
Уровень 1 — procfs/sysfs (всегда доступен)
Чтение виртуальных файловых систем, которые ядро Linux предоставляет каждому процессу:
/proc/stat— утилизация CPU по каждому ядру/proc/meminfo— детализация памяти/proc/diskstats— счётчики I/O блочных устройств/proc/net/dev— статистика сетевых интерфейсов/sys/block/*/queue/scheduler— параметры I/O планировщика/sys/fs/cgroup/— лимиты ресурсов контейнера
Не требует root. Работает на любом ядре Linux. Это 7 встроенных коллекторов.
Уровень 2 — BCC Tools (root + bcc-tools)
Инструменты BCC (BPF Compiler Collection) трассируют функции ядра в реальном времени:
runqlat— гистограмма задержки в CPU-планировщикеbiolatency— задержка блочного I/O по дискамtcpconnlat— время установления TCP-соединенияprofile— CPU flame graph через сэмплирование стеков
Активация: Используйте --profile standard (часть инструментов) или --profile deep (все инструменты). Требуют root и пакет bcc-tools.
Уровень 3 — Нативный eBPF (root + ядро ≥ 5.8)
Использование Go-библиотеки cilium/ebpf для загрузки BPF-программ напрямую — без Python, без внешних зависимостей:
- BTF (BPF Type Format) для CO-RE (Compile Once, Run Everywhere)
- Прямая трассировка ядра без внешних зависимостей
Активация: Используется автоматически вместо BCC, если доступно в профилях standard/deep. Требует root и современное ядро (≥ 5.8).
Профили сбора данных
melisai поддерживает три профиля, контролирующих время сбора и набор инструментов:
| Профиль | Длительность | Возможности |
|---|---|---|
quick |
10 секунд | Уровень 1 (procfs). Работает без root. |
standard |
30 секунд | Включает Уровень 2/3 (гистограммы). Требует root. |
deep |
60 секунд | Включает все инструменты (стеки, медленная ФС). Требует root. |
Структура отчёта
Вывод — это один JSON-документ, разработанный для людей и машин:
{
"metadata": {
"tool": "melisai",
"hostname": "web-server-01",
"profile": "standard"
},
"categories": {
"cpu": [ "... результаты коллекторов ..." ],
"memory": [ "..." ],
"disk": [ "..." ],
"network": [ "..." ]
},
"summary": {
"health_score": 78,
"anomalies": [
{ "severity": "warning", "message": "Утилизация CPU 87.3%" }
],
"recommendations": [
{ "title": "Включить TCP BBR", "commands": ["sysctl -w ..."] }
]
}
}
Команды CLI
# Основная команда — сбор метрик системы
sudo melisai collect [флаги]
--profile string Профиль: quick|standard|deep (по умолчанию "standard")
--focus string Области фокуса (через запятую): cpu,disk,network,stacks
--output string Путь к файлу вывода (по умолчанию: stdout)
--ai-prompt Включить промпт для AI-анализа
# Сравнить два отчёта
melisai diff <baseline.json> <current.json> [--json]
# Проверить возможности системы
melisai capabilities
# Установить BPF-инструменты
sudo melisai install
Далее: Глава 1 — Основы Linux для анализа производительности