Предыстория:
Я работаю с Linux больше 15 лет. Начинал с хостинга, где «сервер тормозит» означало зайти по SSH и запустить top. Потом были выделенные серверы, кластеры, Kubernetes. Задачи менялись, но вопрос оставался один и тот же:
Сервер тормозит. Что не так?
За эти годы у меня накопились инструкции, SSH-скрипты, обёртки над vmstat, iostat, ss, perf. Каждый раз, подключаясь к проблемному серверу, я тратил 20-40 минут на одни и те же действия вроде команды top
Это Tier 1 — базовый уровень. Но когда top показывает что всё вроде нормально, а приложение всё равно тормозит, начинается настоящая диагностика.
Глубже: BPF, softnet, NUMA и другие невидимые проблемы
С опытом я погружался глубже. BPF/eBPF инструменты от Brendan Gregg — runqlat, biolatency, tcpretrans, offcputime — открыли целый мир проблем, невидимых через top
Проблема в том, что подобные задачи решаются не каждый день. Между инцидентами проходят недели, иногда месяцы. И каждый раз я забывал: как называлась та утилита для softnet? Какой файл в /proc показывает conntrack drops? Какой sysctl отвечает за watermark?
Я снова гуглил, перечитывал свои же заметки, вспоминал синтаксис BCC-тулз.
AI изменила правила игры — но не до конца
Появление ChatGPT, а затем Claude изменило workflow. Теперь не нужно парсить глазами вывод cat /proc/net/netstat — можно скормить его нейронке и получить анализ. Не нужно помнить, что PruneCalled > 0 означает давление на TCP-память — AI это знает.
Но есть проблемы в том что нейросеть не умеет сама находить правильные инструменты и строить связи для вывода между ними. Давать root и SSH не безопасно. Запуски программ диагностики съедают кучу токенов и т.д.
Я понял, что нужен мост между сервером и AI: инструмент, который соберёт все данные за один прогон, в структурированном виде, и отдаст нейронке для анализа.
Что я сделал
melisai — один Go-бинарник. Без зависимостей, без конфигов, без демонов. Одна команда:
sudo melisai collect --profile quick -o report.json
За 10 секунд (quick) или 60 секунд (deep) он:
Собирает данные из 8 Tier 1 коллекторов (procfs, sysfs, ss, ethtool, nvidia-smi)
Запускает до 67 BCC/eBPF инструментов (runqlat, biolatency, tcpretrans и ещё 64)
Вычисляет rate-based метрики через двухточечный сэмплинг
Прогоняет 37 правил обнаружения аномалий
Генерирует рекомендации с готовыми командами
sysctlВыдаёт health score от 0 до 100
На выходе — один JSON-файл с полной картиной: CPU, память, диск, сеть, процессы, контейнеры, GPU.
Реальный пример: каскадная деградация на production
Подключаюсь к production Docker-хосту. 8 ядер, 32 GB RAM, HDD RAID. «Всё тормозит».
sudo melisai collect --profile deep --ai-prompt -o report.json
60 секунд. Результат:
Health Score: 46 / 100 Anomalies (6): [CRITICAL] tcp_retransmits 134/sec [WARNING] disk_utilization 80.5% [WARNING] cpu_psi_pressure 17.6% [WARNING] io_psi_pressure 12.8% [WARNING] disk_avg_latency 12.1ms [WARNING] tcp_close_wait 1 socket
Шесть аномалий. Но самое ценное — не отдельные метрики, а каскад, который melisai позволяет увидеть:
HDD p99 = 49ms → Диск не справляется. Block I/O latency из biolatency подтверждает.
PruneCalled = 105 → Ядро 105 раз обрезало TCP-буферы. Это значит: памяти не хватает для TCP-стека, ядро жертвует буферами.
TCP retransmits = 31/s → Следствие обрезки буферов. Пакеты теряются не в сети, а внутри сервера.
WireGuard tx_dropped = 226,132 → VPN-тоннель теряет пакеты. Следствие ретрансмитов выше.
Четыре симптома, одна корневая причина: HDD не справляется с нагрузкой.
Без melisai я бы потратил 30-40 минут чтобы это собрать. С melisai — 60 секунд на сбор, и дальше AI анализирует JSON.
Как это работает с AI
melisai включает встроенный MCP-сервер (Model Context Protocol). Claude Desktop или Cursor подключаются напрямую:
{ "mcpServers": { "melisai": { "command": "ssh", "args": ["root@server", "/usr/local/bin/melisai", "mcp"] } } }
После этого AI может сам:
Вызвать
get_health— получить health score и аномалииВызвать
explain_anomaly— получить root causes и рекомендацииВызвать
collect_metrics— получить полный отчёт с гистограммами и стектрейсами
Никаких copy-paste. AI видит всю картину и может задавать уточняющие вопросы.
В JSON-отчёте есть поле ai_context.prompt — динамический промпт с контекстом системы и 27 известными анти-паттернами. Это подсказка для AI: «вот что обычно бывает не так на таких системах».
Что под капотом
Трёхуровневый сбор
Tier 1: /proc, /sys, ss, ethtool, nvidia-smi Всегда работает. Root не нужен. Tier 2: 67 BCC-инструментов (runqlat, biolatency, tcpretrans...) Нужен root + установленные bcc-tools. Tier 3: Нативный eBPF через cilium/ebpf Нужен root + ядро ≥ 5.8 с BTF.
Если Tier 2 недоступен — fallback на Tier 1. Всегда что-то собрано.
Двухфазный сбор (observer effect)
Фаза 1: Tier 1 коллекторы снимают «чистый» baseline — CPU, память, диск, сеть. Фаза 2: BCC/eBPF тулзы запускаются, не влияя на baseline.
Это важно: BPF-тулзы сами потребляют CPU и I/O. Если запустить всё одновременно, baseline будет загрязнён.
Rate-based детекция
Все rate-метрики (retransmits/sec, softnet drops/sec, direct reclaim/sec) вычисляются через два замера с интервалом. Не cumulative counters с момента загрузки, а дельта за последние N секунд.
Это устраняет ложные срабатывания на серверах с uptime в 200 дней: cumulative softnet_dropped = 5000 ничего не значит, а softnet_drop_rate = 50/sec — это проблема прямо сейчас.
37 правил аномалий
Каждое правило — пороговое значение, основанное на рекомендациях Brendan Gregg и production best practices:
Категория | Примеры |
|---|---|
CPU | utilization > 95%, PSI > 5%, runqlat p99 > 50ms |
Память | direct reclaim rate > 10/s, THP splits > 1/s, NUMA miss > 5% |
Диск | utilization > 90%, avg latency > 50ms |
Сеть | retransmits > 50/s, listen overflows > 1/s, conntrack > 90% |
GPU | GPU-NIC на разных NUMA-нодах |
Рекомендации с готовыми командами
Каждая рекомендация — не абстрактный совет, а конкретная команда:
{ "type": "fix", "title": "TCP memory pressure detected (PruneCalled) — increase tcp_mem", "commands": ["sysctl -w net.ipv4.tcp_mem='1048576 2097152 4194304'"], "evidence": "PruneCalled=105, tcp_mem=1541235 8388608 33554432", "source": "Linux TCP memory management, Brendan Gregg Systems Performance ch.10" }
Тип fix — это проблема, которую нужно починить. Тип optimization — тюнинг, который можно сделать превентивно. AI различает их при анализе.
Что melisai НЕ делает
Честно о границах:
Не мониторинг. Это диагностический инструмент — запустил, получил snapshot, исправил. Для непрерывного мониторинга нужен Prometheus/Grafana.
Не алертинг. Не сидит демоном и не шлёт в Slack. Запускается по запросу или через cron.
Не профилирует приложения изнутри. melisai видит, что процесс жрёт 245% CPU, но не скажет, какая функция виновата. Для этого —
pprof,async-profiler.Только NVIDIA GPU. AMD ROCm в планах.
Установка
curl -sSL https://melisai.dev/install | sh
Один бинарник. Без Python, Ruby, Node.js. Кросс-компиляция с macOS. Apache 2.0.
Или собрать из исходников:
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o melisai ./cmd/melisai/
Итог
За 15 лет я прошёл путь от top до BPF. Каждый шаг давал больше информации, но требовал больше времени и знаний. AI сжала анализ, но не сбор данных.
melisai закрывает этот gap: 67 BCC-тулз + 8 Tier 1 коллекторов + 37 правил аномалий в одном бинарнике. Один прогон, один JSON, один health score. Дальше — AI или человек анализирует результат.
Это не замена инженера. Это инструмент, который экономит 30-40 минут рутины на каждом инциденте.
