Aether
Описание
Инструмент для мониторинга сетей
Языки
- Roff33%
- Go31,9%
- Shell29,2%
- Vue3,3%
- CSS1,2%
- TypeScript0,8%
- Остальные0,6%
Aether
Распределённая высокопроизводительная система сетевого мониторинга и observability,
написанная на Go для современных гибридных инфраструктур.
· · · ·
Содержание
- Обзор
- Архитектура
- Возможности
- Требования
- Быстрый старт
- Конфигурация
- Структура проекта
- API
- Docker & Kubernetes
- Технологический стек
- Makefile
Обзор
Aether — не «ещё один Nagios». Это система мониторинга нового поколения, спроектированная для Cloud + On-Premise + Edge инфраструктур. Ключевые отличия от существующих решений:
| Проблема | Решение Aether |
|---|---|
| Тяжёлые агенты потребляют ресурсы | eBPF — аналитика прямо в ядре Linux с нулевым оверхедом |
| Плагины на Bash небезопасны и медленны | WebAssembly — изолированная песочница, любой язык |
| Единая точка отказа при мониторинге | P2P Mesh — агенты продолжают работу автономно |
| 500 алертов при падении одного коммутатора | Smart RCA — графовый анализ, один алерт на первопричину |
| Ручное обновление конфигурации | GitOps — YAML в репозитории, hot-reload без рестарта |
Архитектура
Поток данных
Возможности
Сбор данных
- ICMP — пинг с RTT и потерями
- TCP/UDP — проверка портов и connect-time
- HTTP/HTTPS — статусы, SSL-сертификаты, задержки
- SNMP v2c/v3 — асинхронный опрос сетевого оборудования
- eBPF — TCP-ретрансмиссии, DNS-латентность на уровне ядра
- Wasm-плагины — кастомные проверки на любом языке
- Autodiscovery — сканирование подсетей (ARP/ICMP)
Алертинг
- Гибкие триггеры с математическими выражениями (
)avg(cpu, 5m) > 90 - Каналы: Telegram, Webhooks (интеграция с CI/CD, auto-remediation)
- Графовый анализ первопричин (Smart RCA)
Отказоустойчивость
- P2P Mesh на базе Gossip-протокола
- Автономный мониторинг при недоступности Core
- Синтетические проверки из множества локаций
Управление
- GitOps — YAML-конфигурация, hot-reload через gRPC-стрим
- REST + GraphQL API
- Vue 3 UI c D3.js-визуализацией сетевой топологии
Требования
| Компонент | Версия |
|---|---|
| Go | ≥ 1.22 |
| Node.js | ≥ 18 (для фронтенда) |
| Docker + Compose | Для PostgreSQL и VictoriaMetrics |
| PostgreSQL | 16 |
| VictoriaMetrics | ≥ 1.95 |
Быстрый старт
1. Клонирование
2. Запуск зависимостей
Это поднимет:
- PostgreSQL на localhost:5433
- VictoriaMetrics на localhost:8428
3. Конфигурация
Рабочие игнорируются Git'ом, коммитятся только .
4. Сборка и запуск Core
Core запускается на:
- HTTP API: http://localhost:8080
- gRPC: localhost:50051
На старте применяются SQL-миграции, загружаются правила алертов и связи топологии из PostgreSQL.
5. Запуск Probe (в отдельном терминале)
Probe лениво подключается к Core по gRPC и автоматически восстанавливает поток метрик при обрыве соединения.
6. Запуск фронтенда (опционально)
UI будет доступен на .
7. Проверка работоспособности
Конфигурация
Примеры конфигов лежат в и коммитятся как .
Рабочие файлы (, ) создаются локально
и исключены из репозитория.
Aether Core (configs/core.yaml)
Aether Probe (configs/probe.yaml)
Структура проекта
aether/
├── api/
│ ├── proto/ # Protobuf-определения (buf)
│ └── pb/ # Сгенерированный Go-код
├── cmd/
│ ├── aether-core/ # Entrypoint управляющего сервера
│ └── aether-probe/ # Entrypoint агента-поллера
├── configs/ # YAML-конфигурации для локальной разработки
├── deployments/
│ ├── docker/ # Dockerfile.core, Dockerfile.probe
│ └── k8s/ # Kubernetes-манифесты
├── internal/
│ ├── core/
│ │ ├── alerting/ # Движок триггеров, RCA, Telegram, Webhooks
│ │ ├── api/ # REST-хэндлеры (chi), GraphQL (gqlgen)
│ │ ├── discovery/ # Обработка autodiscovery-данных
│ │ ├── gitops/ # Git-watcher, hot-reload конфигурации
│ │ ├── grpc/ # gRPC-сервер (метрики, конфигурация, алерты)
│ │ ├── store/ # PostgreSQL-репозиторий (pgx), миграции
│ │ ├── topology/ # Граф сетевой топологии
│ │ └── tsdb/ # VictoriaMetrics Remote Write клиент
│ ├── probe/
│ │ ├── checks/ # ICMP, TCP, UDP, HTTP/HTTPS, SNMP
│ │ ├── discovery/ # ARP/ICMP-сканирование подсетей
│ │ ├── ebpf/ # eBPF-программы (tcp_retrans, dns_latency)
│ │ ├── mesh/ # P2P Gossip (hashicorp/memberlist)
│ │ └── wasm/ # Wazero-рантайм, host-функции, загрузчик
│ └── shared/
│ ├── config/ # Загрузка и валидация YAML-конфигов
│ ├── logger/ # Structured logging (log/slog)
│ └── models/ # Общие доменные модели
├── scripts/ # Вспомогательные скрипты (eBPF codegen)
├── web/ # Vue 3 + TypeScript + Tailwind + D3.js
├── docker-compose.yml # PostgreSQL + VictoriaMetrics
├── Makefile
└── go.mod
API
REST (/api/v1/)
| Метод | Путь | Описание |
|---|---|---|
| | Health check |
| | Список узлов |
| | Upsert узла |
| | Список событий алертов (с учётом RCA) |
| | Список правил алертинга |
| | Upsert правила алертинга |
| | Удалить правило алертинга |
| | Список связей топологии (DAG) |
| | Upsert связи |
| | Удалить связь (по / query-параметрам) |
Swagger-документация доступна по и .
GraphQL (/graphql)
gRPC (:50051)
| Сервис | Метод | Тип |
|---|---|---|
| | Клиентский стрим |
| | Серверный стрим |
| | Унарный |
| | Унарный |
| | Унарный |
| / | Унарный / стрим |
Docker & Kubernetes
Сборка образов
Запуск через Docker
Kubernetes
Core деплоится как Deployment (1 реплика, Service ClusterIP), Probe — как DaemonSet на каждую ноду кластера.
Технологический стек
Backend (Go)
| Область | Библиотека |
|---|---|
| HTTP-роутер | chi |
| GraphQL | gqlgen (code-first) |
| gRPC | google.golang.org/grpc + buf |
| PostgreSQL | pgx/v5 |
| Миграции | golang-migrate |
| TSDB | VictoriaMetrics Remote Write |
| eBPF | cilium/ebpf + bpf2go |
| WebAssembly | wazero (чистый Go, без CGO) |
| P2P Gossip | hashicorp/memberlist |
| SNMP | gosnmp |
| Логирование | (stdlib, structured) |
Frontend
| Область | Технология |
|---|---|
| Фреймворк | Vue 3 + Composition API |
| Роутинг | Vue Router 5 |
| Стейт | Pinia 3 |
| Стили | Tailwind CSS 4 |
| Визуализация | D3.js 7 |
| HTTP-клиент | Axios |
| Сборка | Vite 8 |
Makefile
Aether · распределённый мониторинг нового поколения