CLI утилита для анализа метрик Grafana и управления пропускной способностью каналов связи.
Capacity Manager - это инструмент для ежедневного мониторинга загрузки каналов связи оператора. Утилита:
- Собирает метрики из Grafana (интерфейсный трафик, утилизация)
- Анализирует загрузку внешних каналов, транспортных каналов между оборудованием и межплощадочных каналов
- Выявляет критические и проблемные зоны (пороги >70% warning, >85% critical)
- Генерирует отчёты в разных форматах (консоль, HTML, CSV, Excel)
- Предоставляет рекомендации по расширению каналов
Идеально подходит для ежедневного просмотра высшим руководством компании оператора связи.
- Модульная архитектура: каждый компонент независим и может быть изменён без влияния на другие
- Множество форматов отчётов: красивый вывод в консоль, HTML для просмотра в браузере, CSV/Excel для анализа
- Автоматическое обнаружение каналов:
- Автоматический поиск интерфейсов в Grafana
- Классификация на основе префиксов в описании интерфейсов
- Настраиваемые правила классификации с приоритетами
- Автоматическая генерация конфигурации для новых каналов
- Фильтрация по типам, пропускной способности, исключающим паттернам
- Расширенное прогнозирование:
- Линейная регрессия для трендового анализа
- Экспоненциальное сглаживание (метод Хольта)
- Обнаружение сезонности и паттернов
- Прогноз на 90 дней вперёд с доверительными интервалами
- Определение ускорения роста загрузки
- Интеллектуальные рекомендации:
- Структурированные рекомендации с приоритетами (CRITICAL, HIGH, MEDIUM, LOW)
- Специфичные для типа канала рекомендации
- Оценка сроков реализации и бюджета
- Конкретные action items для технических команд
- Оценка бизнес-влияния
- Финансовая аналитика:
- Расчёт стоимости каналов с поддержкой разных моделей ценообразования
- Модели: фиксированная ставка, за Mbps, ступенчатая, по трафику, burstable 95%
- Burstable billing с расчётом по 95-му перцентилю (стандарт индустрии)
- Оценка стоимости расширения (CAPEX, OPEX)
- Финансовые сводки с разбивкой по типам каналов
- Выявление неиспользуемых мощностей и их стоимости
- Топ самых дорогих каналов
- ROI анализ для оптимизаций
- Анализ трендов: определение направления изменения загрузки и прогнозирование
- Гибкая конфигурация: YAML конфигурация с поддержкой переменных окружения
- Три типа каналов: внешние, транспортные, межплощадочные
- Python 3.8+
- Доступ к Grafana API
- API токен Grafana
# Клонировать репозиторий
git clone <repo-url>
cd hello_world
# Установить зависимости
pip install -r requirements.txt
# Установить пакет
pip install -e .- Скопировать пример конфигурации:
cp config.example.yaml config.yaml- Отредактировать
config.yaml:
grafana:
url: "https://your-grafana.com"
token: "$GRAFANA_TOKEN" # или вставить токен напрямую
verify_ssl: true
channels:
- name: "Internet-Provider1"
type: "external"
capacity_mbps: 10000
description: "Primary Internet uplink"
site_a: "MSK-DC1"
device_a: "CORE-RTR-01"
interface_pattern: "GigabitEthernet0/0/1"- Установить переменную окружения с токеном:
export GRAFANA_TOKEN="your-api-token-here"- Войти в Grafana
- Перейти в Configuration → API Keys
- Создать новый ключ с правами Viewer
- Скопировать токен
capacity-manager checkcapacity-manager reportcapacity-manager report --format html --output report.htmlcapacity-manager report --format excel --hours 48capacity-manager report --format allcapacity-manager alert --threshold 85capacity-manager detail "Internet-Provider1" --hours 24# Включить discovery в config.yaml (discovery.enabled: true), затем:
capacity-manager discover
# Сохранить найденные каналы в YAML файл
capacity-manager discover --output discovered_channels.yaml
# Показать только внешние каналы
capacity-manager discover --filter-type externalПроверка подключения к Grafana и доступности datasources.
Опции:
-c, --config- путь к файлу конфигурации (по умолчанию: config.yaml)-v, --verbose- подробный вывод
Генерация полного отчёта по загрузке каналов.
Опции:
-h, --hours- количество часов для анализа (по умолчанию: из config)-f, --format- формат отчёта: console, html, csv, excel, all (по умолчанию: console)-o, --output- путь для сохранения файла-c, --config- путь к конфигурации-v, --verbose- подробный вывод
Примеры:
# Консольный отчёт за последние 24 часа
capacity-manager report
# HTML отчёт за последние 48 часов
capacity-manager report --hours 48 --format html
# Все форматы
capacity-manager report --format allСписок каналов, превышающих порог загрузки.
Опции:
-t, --threshold- порог утилизации в процентах (по умолчанию: 85)-c, --config- путь к конфигурации
Пример:
# Каналы с загрузкой > 70%
capacity-manager alert --threshold 70Детальная информация по конкретному каналу.
Аргументы:
channel_name- имя канала из конфигурации
Опции:
-h, --hours- количество часов для анализа (по умолчанию: 24)-c, --config- путь к конфигурации
Пример:
capacity-manager detail "Internet-Provider1" --hours 48Автоматическое обнаружение и классификация новых каналов в Grafana.
Опции:
-o, --output- путь для сохранения YAML конфигурации найденных каналов--show-stats/--no-stats- показать/скрыть статистику (по умолчанию: показать)-t, --filter-type- фильтр по типу канала: external, inter_site, transport, all (по умолчанию: all)-c, --config- путь к конфигурации
Примеры:
# Обнаружить все новые каналы
capacity-manager discover
# Сохранить конфигурацию найденных каналов
capacity-manager discover --output discovered.yaml
# Показать только внешние каналы
capacity-manager discover --filter-type external
# Показать только транспортные каналы без статистики
capacity-manager discover -t transport --no-statsКак работает Discovery:
- Автоматический поиск: утилита ищет интерфейсы в Grafana по настроенным метрикам (например,
ifHCInOctets) - Классификация: каждый найденный интерфейс классифицируется по префиксу в описании:
EXT:,IX:,PEER:,TRANSIT:,ISP:→ externalSITE:,WAN:,MPLS:→ inter_siteTRANSPORT:,DWDM:,FIBER:,L2:,TRUNK:→ transport
- Фильтрация: исключаются уже настроенные каналы и интерфейсы, соответствующие exclude_patterns
- Генерация конфигурации: для новых каналов автоматически создаётся YAML конфигурация
Настройка правил классификации:
В config.yaml можно настроить собственные правила:
discovery:
enabled: true
datasource: "prometheus"
min_capacity_mbps: 100.0
exclude_patterns:
- "^lo" # loopback
- "^vlan" # VLANs
- "test" # тестовые интерфейсы
classification_rules:
- prefix: "IX:"
channel_type: "external"
priority: 90
description: "Internet Exchange"
- prefix: "WAN:"
channel_type: "inter_site"
priority: 90
description: "WAN links"Приоритеты правил:
- Правила с более высоким priority проверяются первыми
- Первое совпадение определяет тип канала
- Рекомендуется: 100 для точных маркеров, 80-90 для общих префиксов
Проект построен по модульному принципу:
capacity_manager/
├── models/ # Модели данных (Channel, Metrics, Analysis)
├── config/ # Управление конфигурацией
├── grafana_api/ # Клиент Grafana API
├── metrics_collector/ # Сбор метрик
├── analyzer/ # Анализ загрузки и трендов
├── forecasting/ # Прогнозирование
├── recommendations/ # Интеллектуальные рекомендации
├── cost_calculator/ # Финансовая аналитика
├── discovery/ # Автоматическое обнаружение каналов (NEW!)
├── reporters/ # Генерация отчётов (Console, HTML, CSV)
├── cli/ # CLI интерфейс
└── utils/ # Вспомогательные утилиты
Каждый модуль независим и может быть изменён/заменён без влияния на другие компоненты.
Подробнее см. ARCHITECTURE.md
Утилита использует несколько алгоритмов прогнозирования:
- Линейная регрессия - для стабильных трендов
- Экспоненциальное сглаживание (Holt's method) - для данных с трендом
- Сезонная декомпозиция - для выявления повторяющихся паттернов
Прогноз включает:
- Предсказание загрузки на 90 дней вперёд
- Доверительные интервалы (95%)
- Точные даты достижения порогов (warning, critical, capacity)
- Обнаружение ускорения роста
- Выявление сезонных паттернов (недельные, месячные)
Пример вывода:
📊 Forecast (90 days):
⚠️ Warning threshold in 23 days
🚨 Critical threshold in 45 days
📈 95% capacity in 67 days
⚡ Growth is accelerating!
📅 Seasonal pattern detected: weekly
Система генерирует структурированные рекомендации с учётом:
- Текущей загрузки и трендов
- Типа канала (external, inter-site, transport)
- Прогноза будущей загрузки
- Ошибок и проблем качества
- Паттернов трафика
Каждая рекомендация включает:
- Приоритет: CRITICAL, HIGH, MEDIUM, LOW
- Тип действия: upgrade_capacity, optimize_traffic, investigate_errors, и др.
- Описание проблемы
- Конкретные action items для команды
- Временные рамки (в неделях)
- Оценка стоимости: low, medium, high
- Бизнес-влияние
Пример рекомендации:
🚨 CRITICAL PRIORITY:
Немедленное расширение канала Internet-Provider1
Канал загружен на 89.5%, что превышает критический порог 85%.
Высокий риск перегрузки и деградации сервиса.
Timeline: 2 weeks
Estimated cost: high
Action items:
• Срочно согласовать расширение пропускной способности с провайдером
• Текущая емкость: 10000 Mbps
• Рекомендуемая емкость: 40000 Mbps
• Подготовить технико-коммерческое предложение для руководства
• Установить срок реализации: 1-2 недели
Business impact: КРИТИЧНО: Риск потери клиентов из-за деградации
качества сервиса. Возможны штрафы по SLA.
Система поддерживает расчёт стоимости каналов и финансовый анализ.
Модели ценообразования:
-
Flat Rate - фиксированная ежемесячная стоимость
pricing: model: "flat_rate" monthly_cost: 80000 setup_fee: 50000
-
Per-Mbps - оплата за каждый Mbps пропускной способности
pricing: model: "per_mbps" cost_per_mbps_month: 50 # $50 за Mbps в месяц setup_fee: 5000
-
Tiered - ступенчатое ценообразование со скидками за объём
pricing: model: "tiered" tiers: - up_to_mbps: 10000 cost_per_mbps: 30 - up_to_mbps: 40000 cost_per_mbps: 25
-
Usage-Based - оплата по фактическому использованию трафика
pricing: model: "usage_based" monthly_cost: 15000 # Базовая стоимость cost_per_gb: 0.05 # За GB сверх included included_gb_month: 100000 # 100TB included
-
Burstable 95% - стандартная модель с биллингом по 95-му перцентилю
pricing: model: "burstable_95" committed_rate_mbps: 1000 # Минимальный commit burstable_rate_mbps: 10000 # Максимальный burst cost_per_mbps_month: 40 # Цена за Mbps
Как работает burstable billing:
- Система собирает измерения трафика (обычно каждые 5 минут) за месяц
- Сортирует все значения по возрастанию
- Отбрасывает верхние 5% (пиковые нагрузки)
- Биллинг идёт по 95-му перцентилю или committed rate (что больше)
- Позволяет иметь кратковременные буртсы без дополнительной оплаты
Пример: 10G порт с 1G commit
- Если 95-й перцентиль = 3.5G → биллинг 3.5G × $40 = $140/месяц
- Если 95-й перцентиль = 0.8G → биллинг 1G × $40 = $40/месяц (commit)
- Можно буртсить до 10G в течение 5% времени без штрафов
Финансовые отчёты включают:
- Общие затраты (месяц/год)
- Разбивку по типам каналов
- Среднюю стоимость за Mbps
- Стоимость неиспользуемых мощностей
- Топ самых дорогих каналов
- Прогнозируемые затраты с учётом рекомендаций
Пример вывода:
💰 Financial Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Metric Value
───────────────────────────────────────────
Total Monthly Cost $1,189,500.00
Total Yearly Cost $14,274,000.00
External Channels $1,061,000.00
Inter-Site Channels $102,500.00
Transport Channels $26,000.00
Total Capacity 214,000 Mbps
Avg Cost per Mbps $5.56/month
Avg Utilization 62.3%
Unused Capacity 80,702 Mbps
Unused Capacity Cost $448,704.11/month
💸 Top 5 Most Expensive Channels:
1. IX-Moscow: $1,010,000.00/month (40,000 Mbps @ $25.25/Mbps)
2. MSK-DC1-to-SPB-DC1: $87,000.00/month (100,000 Mbps @ $0.87/Mbps)
...
Интернет-каналы, пиринги с другими операторами, международные каналы.
Каналы между площадками/ЦОДами компании.
Внутриплощадочные каналы между оборудованием (core-aggregation, aggregation-access).
| Уровень | Утилизация | Статус | Рекомендации |
|---|---|---|---|
| Normal | < 70% | ✅ Норма | Штатная работа |
| Warning | 70-85% | Планирование расширения в течение 1-2 месяцев | |
| Critical | > 85% | 🚨 Критично | Немедленное расширение в течение 1-2 недель |
Красивый вывод с таблицами, цветами и иконками (через Rich library).
Интерактивный HTML отчёт с графиками и визуализацией. Идеален для отправки руководству.
Простой CSV файл для импорта в Excel/Google Sheets.
Многостраничный Excel файл с:
- Summary (сводка)
- All Channels (все каналы)
- Critical (критические)
- Warning (предупреждения)
# Генерация HTML отчёта за последние 24 часа
capacity-manager report --format html --output /var/www/reports/daily.html
# Отправка по email (требуется настройка mail)
echo "Daily capacity report" | mail -s "Capacity Report" -a /var/www/reports/daily.html [email protected]# Проверка каналов с загрузкой > 85%
capacity-manager alert --threshold 85
# Если есть критические - детальный анализ
capacity-manager detail "Critical-Channel-Name" --hours 48# Добавить в crontab
# Ежедневный отчёт в 9:00
0 9 * * * /usr/local/bin/capacity-manager report --format html --output /var/www/reports/daily_$(date +\%Y\%m\%d).html
# Проверка критических каждый час
0 * * * * /usr/local/bin/capacity-manager alert --threshold 85 | mail -s "Capacity Alert" [email protected]Каждый модуль полностью независим:
- models/ - только структуры данных, без зависимостей
- config/ - зависит только от models
- grafana_api/ - только HTTP клиент, зависит от models
- metrics_collector/ - использует grafana_api, возвращает models
- analyzer/ - работает только с models, независим от источника данных
- reporters/ - работают только с models
- cli/ - оркеструет все модули
- Создать класс в
reporters/ - Реализовать метод, принимающий
CapacityReport - Добавить опцию в CLI
- Создать клиент в новом модуле (аналог
grafana_api/) - Реализовать collector, возвращающий
ChannelMetrics - Остальные модули работают без изменений
MIT
Для вопросов и предложений создавайте issues в репозитории.