# sFlow - Мониторинг сетевого трафика

> Настройка sFlow в VyOS - packet sampling, экспорт потоков на коллектор, мониторинг трафика и анализ производительности сети

Source: https://opennix.org/docs/vyos/system/vyos-sflow/


## Обзор

sFlow (Sampled Flow)  - это отраслевой стандарт технологии мониторинга сетевого трафика, основанный на методе статистической выборки пакетов. В отличие от NetFlow, который анализирует каждый поток, sFlow производит выборку случайных пакетов, что обеспечивает более низкую нагрузку на маршрутизатор при сохранении точности статистики.

### Основные характеристики sFlow

**Принцип работы:**
- Статистическая выборка пакетов (например, 1 из 1000)
- Отправка образцов пакетов на коллектор
- Опрос интерфейсных счетчиков (counters polling)
- Поддержка IPv4 и IPv6
- Экспорт в реальном времени

**Преимущества sFlow:**
- Низкая нагрузка на CPU и память маршрутизатора
- Масштабируемость для высокоскоростных каналов
- Детальная информация о содержимом пакетов
- Стандартизированный формат данных (RFC 3967)
- Поддержка мультивендорных сред

**Применение:**
- Мониторинг производительности сети
- Анализ трафика и поведения приложений
- Обнаружение DDoS-атак и аномалий
- Планирование емкости каналов
- Устранение неполадок сети
- Учет использования полосы пропускания

### sFlow vs NetFlow

| Характеристика | sFlow | NetFlow |
|---------------|-------|---------|
| Метод сбора | Статистическая выборка пакетов | Анализ всех потоков |
| Нагрузка на CPU | Низкая | Средняя/Высокая |
| Использование памяти | Минимальное | Значительное |
| Масштабируемость | Отлично для 10G+ | Ограничена на высоких скоростях |
| Детализация | Образцы пакетов + счетчики | Агрегированные потоки |
| Латентность экспорта | Реальное время | Задержка до окончания потока |
| Стандартизация | RFC 3967, открытый стандарт | Cisco proprietary, IPFIX (стандарт) |
| Поддержка L2 | Да | Ограниченная |

### Архитектура sFlow

```
┌─────────────────────────────────────────────────────────┐
│                     VyOS Router                         │
│                                                         │
│  ┌────────────┐    ┌──────────────┐   ┌─────────────┐ │
│  │ Interface  │───>│ sFlow Agent  │──>│ sFlow       │ │
│  │ eth0       │    │              │   │ Exporter    │ │
│  └────────────┘    │ - Sampling   │   └──────┬──────┘ │
│                    │ - Polling    │          │         │
│  ┌────────────┐    │              │          │         │
│  │ Interface  │───>│              │          │         │
│  │ eth1       │    └──────────────┘          │         │
│  └────────────┘                              │         │
│                                               │ UDP 6343│
└───────────────────────────────────────────────┼─────────┘
                                                │
                                                v
                                    ┌───────────────────┐
                                    │ sFlow Collector   │
                                    │                   │
                                    │ - sFlowTrend      │
                                    │ - ntopng          │
                                    │ - Prometheus      │
                                    └───────────────────┘
```

### Компоненты sFlow

1. **sFlow Agent**  - программный агент на маршрутизаторе, выполняющий выборку и экспорт
2. **Sampling**  - механизм статистической выборки пакетов
3. **Counter Polling**  - периодический сбор статистики интерфейсов
4. **sFlow Collector**  - сервер, принимающий и анализирующий данные sFlow
5. **Analyzer**  - инструмент визуализации и анализа данных

## Реализация в VyOS

VyOS использует **hsflowd** (Host sFlow Daemon) для реализации функциональности sFlow. Это легковесный и эффективный агент, поддерживающий стандарт sFlow версии 5.

**Поддерживаемые возможности:**
- Конфигурация агента sFlow
- Выбор интерфейсов для мониторинга
- Настройка частоты выборки (sampling rate)
- Настройка интервала опроса счетчиков (polling interval)
- Поддержка нескольких коллекторов
- IPv4 и IPv6 коллекторы
- Мониторинг потерянных пакетов (drop monitor)
- Выборка исходящего трафика (egress sampling)

## Базовая конфигурация

### Минимальная настройка

Для работы sFlow необходимо настроить минимум три параметра:

```bash
# Адрес агента sFlow (источник экспорта)
set system sflow agent-address '192.168.1.1'

# Интерфейс для мониторинга
set system sflow interface 'eth0'

# Коллектор sFlow
set system sflow server 192.168.100.10 port 6343

# Применить конфигурацию
commit
save
```

### Полная конфигурация с параметрами

```bash
# Настройка агента sFlow
set system sflow agent-address '10.0.0.1'
set system sflow agent-interface 'eth0'

# Интерфейсы для мониторинга
set system sflow interface 'eth0'
set system sflow interface 'eth1'
set system sflow interface 'eth2'

# Параметры выборки
set system sflow sampling-rate '2000'
set system sflow polling '20'

# Коллекторы sFlow
set system sflow server 10.100.1.5 port 6343
set system sflow server 10.100.1.6 port 6343

# Дополнительные параметры
set system sflow drop-monitor-limit '100'
set system sflow enable-egress

# Применить конфигурацию
commit
save
```

## Детальная настройка параметров

### Конфигурация агента

#### Адрес агента (Agent Address)

Адрес агента указывает IP-адрес, который будет использоваться как источник в экспортируемых sFlow датаграммах:

```bash
set system sflow agent-address '192.168.1.1'
```

**Рекомендации:**
- Используйте IP-адрес интерфейса управления
- Адрес должен быть доступен с коллектора
- Для идентификации источника в мультироутерной среде

#### Интерфейс агента (Agent Interface)

Альтернатива указанию фиксированного IP-адреса  - выбор интерфейса:

```bash
set system sflow agent-interface 'eth0'
```

Агент будет использовать первичный IP-адрес указанного интерфейса. Полезно при динамической адресации.

### Выбор интерфейсов для мониторинга

Указывайте все интерфейсы, трафик которых нужно мониторить:

```bash
# Физические интерфейсы
set system sflow interface 'eth0'
set system sflow interface 'eth1'
set system sflow interface 'eth2'
set system sflow interface 'eth3'

# VLAN интерфейсы
set system sflow interface 'eth0.100'
set system sflow interface 'eth0.200'

# Bond интерфейсы
set system sflow interface 'bond0'

# Туннельные интерфейсы
set system sflow interface 'tun0'
set system sflow interface 'wg0'
```

**Важно:**
- Каждый интерфейс добавляется отдельной командой
- Можно мониторить физические, VLAN, bond, туннельные интерфейсы
- Интерфейс должен быть активен (up)

### Частота выборки (Sampling Rate)

Sampling rate определяет, какой пакет из N будет выбран для анализа:

```bash
set system sflow sampling-rate '1000'
```

**Значение по умолчанию:** 1000 (каждый тысячный пакет)

**Рекомендации по выбору sampling rate:**

| Скорость канала | Рекомендуемый sampling rate | Обоснование |
|----------------|----------------------------|-------------|
| 100 Mbps | 500-1000 | Низкая скорость, можно увеличить точность |
| 1 Gbps | 1000-2000 | Стандартное значение |
| 10 Gbps | 5000-10000 | Высокая нагрузка, снижаем частоту |
| 40 Gbps | 20000-40000 | Очень высокая скорость |
| 100 Gbps | 50000-100000 | Максимальная оптимизация |

**Баланс точности и производительности:**

```bash
# Высокая точность, повышенная нагрузка (малый трафик)
set system sflow sampling-rate '500'

# Стандартная точность (обычный случай)
set system sflow sampling-rate '1000'

# Оптимизация для высокоскоростных каналов
set system sflow sampling-rate '5000'

# Минимальная нагрузка (очень высокий трафик)
set system sflow sampling-rate '10000'
```

**Формула расчета:**
```
Sampling Rate = Interface Speed (Mbps) / Desired Samples per Second
```

Пример: для канала 1 Gbps и желаемых 1000 образцов/сек:
```
Sampling Rate = 1000 Mbps / 1 Mbps/sample = 1000
```

### Интервал опроса (Polling Interval)

Polling interval определяет частоту сбора счетчиков интерфейсов (в секундах):

```bash
set system sflow polling '30'
```

**Значение по умолчанию:** 30 секунд

**Рекомендации:**

```bash
# Частый опрос для детального мониторинга
set system sflow polling '10'

# Стандартный интервал
set system sflow polling '30'

# Редкий опрос для снижения нагрузки
set system sflow polling '60'
```

**Что включают счетчики интерфейса:**
- Байты входящего/исходящего трафика
- Пакеты входящего/исходящего трафика
- Ошибки и потерянные пакеты
- Широковещательные и multicast пакеты
- Состояние интерфейса

**Выбор интервала:**
- **10-20 секунд:** Активный мониторинг, быстрое обнаружение проблем
- **30 секунд:** Стандартное значение, баланс точности и нагрузки
- **60+ секунд:** Длительный мониторинг трендов, минимальная нагрузка

### Конфигурация коллектора

#### Добавление коллектора

```bash
set system sflow server <IP-address> port <port>
```

**Стандартный порт sFlow:** 6343 (UDP)

**Примеры:**

```bash
# IPv4 коллектор
set system sflow server 192.168.100.10 port 6343

# IPv6 коллектор
set system sflow server 2001:db8::100 port 6343

# Альтернативный порт
set system sflow server 10.0.0.100 port 9999
```

#### Несколько коллекторов

sFlow поддерживает экспорт данных на несколько коллекторов одновременно:

```bash
# Основной коллектор (производственный мониторинг)
set system sflow server 10.100.1.5 port 6343

# Резервный коллектор
set system sflow server 10.100.1.6 port 6343

# Коллектор для анализа безопасности
set system sflow server 10.200.1.10 port 6343

# Тестовый коллектор
set system sflow server 192.168.1.100 port 6343
```

**Применение нескольких коллекторов:**
- Резервирование мониторинга
- Разделение по функциям (мониторинг, безопасность, биллинг)
- Интеграция с разными системами
- Тестирование без прерывания основного мониторинга

### Дополнительные параметры

#### Мониторинг потерянных пакетов (Drop Monitor)

Отслеживание пакетов, отброшенных ядром Linux:

```bash
set system sflow drop-monitor-limit '100'
```

Параметр задает максимальное количество отслеживаемых точек отбрасывания пакетов. Полезно для диагностики проблем с производительностью и конфигурацией.

**Причины отбрасывания пакетов:**
- Переполнение буферов
- Отсутствие маршрута
- Правила файрвола
- Ошибки пересылки
- Превышение MTU

#### Выборка исходящего трафика (Egress Sampling)

По умолчанию sFlow выполняет выборку только входящего трафика. Для включения выборки исходящего трафика:

```bash
set system sflow enable-egress
```

**Применение:**
- Полный учет трафика (ingress + egress)
- Анализ симметричности потоков
- Мониторинг QoS на выходе
- Обнаружение аномалий в исходящем трафике

**Внимание:** Удваивает количество экспортируемых образцов для транзитного трафика.

## Примеры конфигурации

### Пример 1: Базовый мониторинг офисного маршрутизатора

**Сценарий:** Офисный VyOS маршрутизатор с каналом 100 Mbps, экспорт sFlow на внутренний сервер мониторинга.

```bash
configure

# Агент sFlow на интерфейсе управления
set system sflow agent-address '192.168.1.1'

# Мониторинг WAN интерфейса
set system sflow interface 'eth0'

# Мониторинг LAN интерфейса
set system sflow interface 'eth1'

# Частая выборка для небольшого трафика
set system sflow sampling-rate '500'

# Стандартный интервал опроса
set system sflow polling '30'

# Коллектор на сервере мониторинга
set system sflow server 192.168.1.100 port 6343

commit
save
exit
```

### Пример 2: Датацентр с высокоскоростными каналами

**Сценарий:** VyOS как пограничный маршрутизатор датацентра с каналами 10 Gbps, экспорт на кластер коллекторов.

```bash
configure

# Агент на loopback интерфейсе для стабильности
set interfaces loopback lo address '10.255.255.1/32'
set system sflow agent-address '10.255.255.1'

# Мониторинг всех uplink интерфейсов
set system sflow interface 'eth0'
set system sflow interface 'eth1'
set system sflow interface 'eth2'
set system sflow interface 'eth3'

# Оптимизированная частота для 10G
set system sflow sampling-rate '8000'

# Редкий опрос для снижения нагрузки
set system sflow polling '60'

# Основной коллектор
set system sflow server 10.100.1.5 port 6343

# Резервный коллектор
set system sflow server 10.100.1.6 port 6343

# Мониторинг потерь
set system sflow drop-monitor-limit '100'

# Двусторонняя выборка
set system sflow enable-egress

commit
save
exit
```

### Пример 3: Мультиарендный провайдер

**Сценарий:** VyOS для сервис-провайдера с изоляцией клиентов через VLAN, детальный учет трафика.

```bash
configure

# Агент на управляющем интерфейсе
set system sflow agent-address '10.0.0.1'

# Мониторинг транковых портов
set system sflow interface 'eth0'
set system sflow interface 'eth1'

# Мониторинг VLAN интерфейсов клиентов
set system sflow interface 'eth0.100'
set system sflow interface 'eth0.101'
set system sflow interface 'eth0.102'
set system sflow interface 'eth0.200'
set system sflow interface 'eth0.201'

# Высокая точность для биллинга
set system sflow sampling-rate '1000'

# Частый опрос для точной статистики
set system sflow polling '20'

# Коллектор биллинговой системы
set system sflow server 10.200.1.10 port 6343

# Коллектор мониторинга
set system sflow server 10.100.1.5 port 6343

# Коллектор анализа безопасности
set system sflow server 10.150.1.20 port 6343

commit
save
exit
```

### Пример 4: VPN-концентратор с туннелями

**Сценарий:** VyOS как VPN-концентратор с множеством туннелей IPsec и WireGuard, мониторинг зашифрованного трафика.

```bash
configure

# Агент на loopback
set interfaces loopback lo address '172.16.255.1/32'
set system sflow agent-address '172.16.255.1'

# Мониторинг физических интерфейсов
set system sflow interface 'eth0'
set system sflow interface 'eth1'

# Мониторинг IPsec туннелей
set system sflow interface 'vti0'
set system sflow interface 'vti1'
set system sflow interface 'vti2'

# Мониторинг WireGuard
set system sflow interface 'wg0'
set system sflow interface 'wg1'

# Стандартная выборка
set system sflow sampling-rate '2000'

# Частый опрос для VPN метрик
set system sflow polling '15'

# Коллектор мониторинга VPN
set system sflow server 10.100.1.15 port 6343

# Включение egress для полного учета
set system sflow enable-egress

commit
save
exit
```

### Пример 5: Yandex Cloud  - Экспорт sFlow в систему мониторинга

**Сценарий:** VyOS в Yandex Cloud как NAT-шлюз, экспорт sFlow на виртуальную машину с коллектором для мониторинга потребления трафика тенантами.

```bash
configure

# Агент на внутреннем интерфейсе
set system sflow agent-address '10.128.0.10'

# Мониторинг внешнего интерфейса (к интернету)
set system sflow interface 'eth0'

# Мониторинг внутренних интерфейсов (подсети в VPC)
set system sflow interface 'eth1'
set system sflow interface 'eth2'

# Оптимизация для облачной среды (1 Gbps каналы)
set system sflow sampling-rate '2000'
set system sflow polling '30'

# Коллектор на отдельной ВМ в той же VPC
set system sflow server 10.128.0.100 port 6343

# Резервный коллектор в другой зоне доступности
set system sflow server 10.129.0.100 port 6343

# Мониторинг отброшенных пакетов
set system sflow drop-monitor-limit '50'

commit
save
exit
```

**Дополнительная настройка коллектора в Yandex Cloud:**

На виртуальной машине с Ubuntu 22.04:

```bash
# Установка sFlowTrend (коммерческий коллектор с бесплатной версией)
# или ntopng, или Prometheus с sFlow экспортером

# Для ntopng:
sudo apt update
sudo apt install ntopng

# Настройка ntopng для приема sFlow
sudo nano /etc/ntopng/ntopng.conf
# Добавить:
# -i=sflow:6343
# --http-port=3000

sudo systemctl enable ntopng
sudo systemctl start ntopng

# Настройка Security Group для разрешения UDP 6343
# В веб-консоли Yandex Cloud: VPC -> Security Groups
# Входящий трафик: UDP, порт 6343, источник - CIDR VyOS подсети
# Входящий трафик: TCP, порт 3000, источник - ваш IP (для веб-интерфейса)
```

### Пример 6: VK Cloud  - Мультиинтерфейсный мониторинг

**Сценарий:** VyOS в VK Cloud как пограничный маршрутизатор для микросервисной архитектуры, экспорт sFlow на sFlowTrend для анализа межсервисного трафика.

```bash
configure

# Агент на loopback для независимости от интерфейсов
set interfaces loopback lo address '172.31.255.1/32'
set system sflow agent-address '172.31.255.1'

# Мониторинг интерфейса к интернету
set system sflow interface 'eth0'

# Мониторинг интерфейсов к микросервисам
set system sflow interface 'eth1.100'  # Frontend subnet
set system sflow interface 'eth1.200'  # Backend subnet
set system sflow interface 'eth1.300'  # Database subnet
set system sflow interface 'eth1.400'  # Cache subnet

# Мониторинг интерфейса к системам хранения
set system sflow interface 'eth2'

# Высокая точность для анализа микросервисов
set system sflow sampling-rate '1500'

# Частый опрос для быстрого обнаружения проблем
set system sflow polling '20'

# Коллектор sFlowTrend в той же VPC
set system sflow server 172.31.10.50 port 6343

# Мониторинг входящего и исходящего трафика
set system sflow enable-egress

# Отслеживание потерь для диагностики
set system sflow drop-monitor-limit '100'

commit
save
exit
```

**Настройка sFlowTrend в VK Cloud:**

```bash
# На виртуальной машине Ubuntu 22.04
# sFlowTrend доступен как Docker контейнер

# Установка Docker
sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker

# Запуск sFlowTrend
sudo docker run -d \
  --name sflowtrend \
  -p 6343:6343/udp \
  -p 8087:8087 \
  --restart=always \
  sflow/sflowtrend:latest

# Проверка
sudo docker logs sflowtrend

# Доступ к веб-интерфейсу: http://<VM-IP>:8087
```

## Проверка конфигурации

### Просмотр конфигурации sFlow

```bash
show configuration commands | grep sflow
```

Вывод:
```
set system sflow agent-address '192.168.1.1'
set system sflow interface 'eth0'
set system sflow interface 'eth1'
set system sflow polling '30'
set system sflow sampling-rate '1000'
set system sflow server 192.168.100.10 port '6343'
```

### Проверка работы sFlow агента

```bash
show system sflow
```

Вывод предоставляет информацию о состоянии агента sFlow:
```
Agent Address: 192.168.1.1
Agent Interface: eth0
Polling Interval: 30
Sampling Rate: 1000
Drop Monitor Limit: not configured
Egress: disabled

Collectors:
  192.168.100.10:6343

Monitored Interfaces:
  eth0
  eth1
```

### Проверка процесса hsflowd

```bash
show process hsflowd
```

Или через операционный режим Linux:

```bash
run show processes | grep hsflow
```

```bash
ps aux | grep hsflowd
```

Ожидаемый вывод:
```
root      1234  0.0  0.1  12345  6789 ?        Ss   10:30   0:00 /usr/sbin/hsflowd
```

### Мониторинг логов sFlow

Логи hsflowd находятся в системных логах:

```bash
show log | match sflow
```

Или напрямую:

```bash
journalctl -u hsflowd -f
```

Пример логов при запуске:

```
hsflowd[1234]: agent address set to 192.168.1.1
hsflowd[1234]: monitoring interface eth0
hsflowd[1234]: monitoring interface eth1
hsflowd[1234]: collector 192.168.100.10:6343 configured
hsflowd[1234]: sampling rate: 1000
hsflowd[1234]: polling interval: 30s
```

### Проверка отправки sFlow пакетов

Проверка сетевой активности на порту коллектора:

```bash
sudo tcpdump -i any udp port 6343 -n
```

Вывод (если экспорт работает):
```
10:35:01.123456 IP 192.168.1.1.54321 > 192.168.100.10.6343: UDP, length 1400
10:35:02.234567 IP 192.168.1.1.54321 > 192.168.100.10.6343: UDP, length 1400
10:35:03.345678 IP 192.168.1.1.54321 > 192.168.100.10.6343: UDP, length 1400
```

### Тестирование доступности коллектора

```bash
ping 192.168.100.10
```

```bash
traceroute 192.168.100.10
```

Проверка доступности UDP порта (с машины VyOS):

```bash
nc -u -v 192.168.100.10 6343
```

### Статистика интерфейсов

Проверка счетчиков, которые экспортирует sFlow:

```bash
show interfaces ethernet eth0
```

```bash
show interfaces statistics
```

Важные поля:
- RX packets/bytes (входящий трафик)
- TX packets/bytes (исходящий трафик)
- RX errors (ошибки приема)
- TX errors (ошибки передачи)
- RX dropped (отброшенные при приеме)
- TX dropped (отброшенные при передаче)

## Мониторинг и анализ

### Популярные коллекторы и анализаторы sFlow

**Open Source решения:**

1. **sFlowTrend**
   - Бесплатный коллектор и анализатор
   - Веб-интерфейс для визуализации
   - Поддержка алертов
   - URL: https://inmon.com/products/sFlowTrend.php

2. **ntopng**
   - Мощный анализатор сетевого трафика
   - Поддержка sFlow, NetFlow, IPFIX
   - Детальная аналитика приложений
   - URL: https://www.ntop.org/products/traffic-analysis/ntop/

3. **pmacct (Promiscuous mode IP Accounting)**
   - Коллектор для биллинга и учета
   - Экспорт в MySQL, PostgreSQL, MongoDB
   - Интеграция с Kafka
   - URL: http://www.pmacct.net/

4. **ElastiFlow**
   - Коллектор для Elasticsearch + Kibana
   - Готовые дашборды
   - Масштабируемая архитектура
   - URL: https://github.com/robcowart/elastiflow

**Коммерческие решения:**

1. **Kentik**
   - SaaS платформа для анализа трафика
   - DDoS detection
   - Облачная интеграция

2. **Plixer Scrutinizer**
   - Enterprise решение
   - Расширенная аналитика
   - Compliance reporting

3. **SolarWinds NetFlow Traffic Analyzer**
   - Интеграция с экосистемой SolarWinds
   - Анализ производительности приложений

### Настройка базового коллектора на Linux

Пример установки ntopng на Ubuntu 22.04:

```bash
# Добавление репозитория ntop
sudo apt-get install software-properties-common wget
sudo add-apt-repository universe
wget -qO - https://packages.ntop.org/apt-stable/22.04/all/apt-ntop-stable.deb.gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.ntop.org/apt-stable/22.04/all/ x64/"

# Установка ntopng
sudo apt-get update
sudo apt-get install ntopng

# Настройка для приема sFlow
sudo nano /etc/ntopng/ntopng.conf

# Добавить строки:
-i=sflow:6343
--http-port=3000
--community

# Запуск
sudo systemctl enable ntopng
sudo systemctl start ntopng

# Проверка
sudo systemctl status ntopng

# Доступ к веб-интерфейсу: http://<server-ip>:3000
# Логин по умолчанию: admin / admin
```

### Prometheus и Grafana интеграция

Для экспорта метрик sFlow в Prometheus используется sflow_exporter:

```bash
# Установка Go (если еще не установлен)
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

# Клонирование и сборка sflow_exporter
git clone https://github.com/czerwonk/sflow_exporter.git
cd sflow_exporter
go build

# Запуск
./sflow_exporter -sflow.listen-address=:6343 -web.listen-address=:9090

# Конфигурация Prometheus (prometheus.yml)
scrape_configs:
  - job_name: 'sflow'
    static_configs:
      - targets: ['localhost:9090']
```

### Анализ данных sFlow

**Ключевые метрики для мониторинга:**

1. **Утилизация полосы пропускания**
   - Входящий/исходящий bps
   - Топ источников/назначений по объему
   - Тренды использования

2. **Производительность приложений**
   - Топ приложений по трафику
   - Распределение портов и протоколов
   - Латентность на уровне потоков

3. **Безопасность**
   - Обнаружение аномалий (всплески трафика)
   - Топ источников/назначений по PPS (packet scan detection)
   - Распределение размеров пакетов (DDoS индикаторы)

4. **Качество обслуживания**
   - Потерянные пакеты (drop monitor)
   - Ошибки на интерфейсах
   - Буферизация и задержки

**Запросы для анализа:**

В ntopng или других анализаторах:

- Top Talkers (топ источников по трафику)
- Flow Analysis (анализ потоков по 5-tuple)
- Protocol Distribution (распределение протоколов)
- Port Analysis (анализ используемых портов)
- Autonomous System Analysis (AS-level трафик)
- Geolocation Analysis (географическое распределение)

## Устранение неполадок

### sFlow данные не поступают на коллектор

**Проверка 1: Агент sFlow запущен**

```bash
ps aux | grep hsflowd
```

Если процесс не работает:

```bash
sudo systemctl status hsflowd
sudo systemctl restart hsflowd
```

**Проверка 2: Конфигурация применена**

```bash
show configuration commands | grep sflow
```

Убедитесь, что конфигурация включает:
- Agent address или agent interface
- Минимум один интерфейс для мониторинга
- Минимум один сервер коллектора

**Проверка 3: Сетевая доступность коллектора**

```bash
ping <collector-ip>
traceroute <collector-ip>
```

Проверка UDP порта:

```bash
nc -u -v <collector-ip> 6343
```

**Проверка 4: Файрвол на VyOS**

Убедитесь, что исходящий UDP трафик на порт 6343 не блокируется:

```bash
show firewall
```

Если есть правила на исходящий трафик, добавьте разрешение:

```bash
set firewall name WAN_OUT rule 100 action accept
set firewall name WAN_OUT rule 100 protocol udp
set firewall name WAN_OUT rule 100 destination port 6343
commit
```

**Проверка 5: Файрвол на коллекторе**

На сервере коллектора:

```bash
# Linux firewall
sudo ufw status
sudo ufw allow 6343/udp

# iptables
sudo iptables -I INPUT -p udp --dport 6343 -j ACCEPT
```

**Проверка 6: Коллектор слушает на правильном порту**

На сервере коллектора:

```bash
sudo netstat -ulnp | grep 6343
```

Ожидаемый вывод:
```
udp    0    0 0.0.0.0:6343    0.0.0.0:*    12345/ntopng
```

Если порт не слушается, проверьте конфигурацию коллектора.

### Высокая нагрузка на CPU от hsflowd

**Причина:** Слишком агрессивный sampling rate для объема трафика.

**Решение:** Увеличьте sampling rate (уменьшите частоту выборки):

```bash
# Было
set system sflow sampling-rate '500'

# Стало
set system sflow sampling-rate '5000'
commit
```

**Мониторинг загрузки CPU:**

```bash
show system cpu
```

```bash
top
```

Процесс hsflowd должен потреблять < 5% CPU в нормальных условиях.

### Потеря sFlow пакетов при передаче

**Симптомы:** Коллектор показывает пропуски в данных, неполную статистику.

**Причина:** Ограничение пропускной способности канала или буферов UDP.

**Диагностика:**

На VyOS:
```bash
show interfaces statistics
# Проверить TX dropped на интерфейсе, отправляющем sFlow
```

На коллекторе:
```bash
netstat -su | grep "packet receive errors"
```

**Решение 1:** Увеличить sampling rate (меньше пакетов экспорта):

```bash
set system sflow sampling-rate '10000'
commit
```

**Решение 2:** Увеличить буферы UDP на коллекторе:

```bash
# Linux
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.core.rmem_default=134217728
```

**Решение 3:** Использовать несколько коллекторов с балансировкой.

### Неправильный agent address в экспортируемых данных

**Проблема:** Коллектор показывает неверный IP-адрес источника.

**Решение:** Явно указать agent address:

```bash
set system sflow agent-address '10.0.0.1'
commit
```

Или использовать loopback:

```bash
set interfaces loopback lo address '10.255.255.1/32'
set system sflow agent-address '10.255.255.1'
commit
```

### Интерфейсы не экспортируют данные

**Проверка:** Интерфейс должен быть в состоянии up:

```bash
show interfaces
```

**Решение:** Убедитесь, что интерфейс активен и корректно настроен:

```bash
set interfaces ethernet eth0 description 'WAN'
set interfaces ethernet eth0 address 'dhcp'
commit
```

Затем добавьте в sFlow:

```bash
set system sflow interface 'eth0'
commit
```

### Коллектор не распознает трафик от VyOS

**Проблема:** Версия sFlow протокола или формат данных.

**Диагностика:** Проверьте логи коллектора на ошибки парсинга.

**Решение:** VyOS использует sFlow версии 5 (стандарт). Убедитесь, что коллектор поддерживает sFlow v5.

Проверка версии hsflowd:

```bash
hsflowd -v
```

### Отсутствуют данные о некоторых протоколах

**Причина:** Sampling  - статистический метод, некоторые протоколы с низким объемом могут не попасть в выборку.

**Решение:** Уменьшите sampling rate для увеличения точности:

```bash
set system sflow sampling-rate '500'
commit
```

**Альтернатива:** Используйте NetFlow/IPFIX для детального анализа всех потоков (дополнительная нагрузка).

## Лучшие практики

### Планирование развертывания sFlow

1. **Определение целей мониторинга**
   - Производительность сети
   - Биллинг и учет
   - Безопасность и обнаружение атак
   - Устранение неполадок

2. **Выбор интерфейсов**
   - Критичные uplink/downlink интерфейсы
   - Интерфейсы к серверам/датацентрам
   - Точки входа/выхода из сети

3. **Расчет sampling rate**
   - Баланс точности и производительности
   - Учет скорости каналов
   - Требования к детализации

4. **Архитектура коллекторов**
   - Избыточность (несколько коллекторов)
   - Масштабируемость (кластеризация)
   - Хранение данных (retention policy)

### Оптимизация производительности

**Рекомендации для VyOS:**

1. **Адаптивный sampling rate**
   - 100 Mbps: 500-1000
   - 1 Gbps: 1000-2000
   - 10 Gbps: 5000-10000
   - 40+ Gbps: 20000-50000

2. **Polling interval**
   - Активный мониторинг: 10-20 секунд
   - Стандартный: 30 секунд
   - Долгосрочные тренды: 60+ секунд

3. **Ограничение egress sampling**
   - Включайте только при необходимости
   - Учитывайте удвоение объема экспорта

4. **Использование loopback для agent address**
   - Независимость от состояния физических интерфейсов
   - Единый идентификатор устройства

### Безопасность

**Защита коллекторов:**

1. **Изоляция сети мониторинга**
   - Dedicated VLAN для sFlow трафика
   - Ограничение доступа к коллекторам

2. **Аутентификация и шифрование**
   - sFlow не поддерживает встроенное шифрование
   - Используйте VPN туннели для передачи через недоверенные сети
   - Ограничьте доступ к коллектору файрволом

3. **Валидация источников**
   - Настройте коллектор для приема только от известных IP
   - Мониторинг аномальных объемов sFlow трафика

**Пример VPN туннеля для sFlow через интернет:**

```bash
# На VyOS (sFlow exporter)
configure

# WireGuard туннель к удаленному коллектору
set interfaces wireguard wg10 address '10.99.0.1/30'
set interfaces wireguard wg10 private-key <key>
set interfaces wireguard wg10 peer remote-collector pubkey <pubkey>
set interfaces wireguard wg10 peer remote-collector endpoint 'collector.example.com:51820'
set interfaces wireguard wg10 peer remote-collector allowed-ips '10.99.0.0/30'

# sFlow через туннель
set system sflow agent-address '192.168.1.1'
set system sflow interface 'eth0'
set system sflow server 10.99.0.2 port 6343

commit
save
```

### Мониторинг самого sFlow

**Метрики для отслеживания:**

1. **Доступность hsflowd процесса**
   - Alerting при падении процесса

2. **Сетевая доступность коллектора**
   - Мониторинг пингами
   - Проверка UDP порта

3. **Объем экспортируемых данных**
   - Мониторинг TX на интерфейсе-источнике
   - Отслеживание RX на коллекторе

4. **Потери пакетов**
   - Dropped packets на VyOS
   - UDP receive errors на коллекторе

**Пример мониторинга через скрипт:**

```bash
#!/bin/bash
# Скрипт проверки sFlow

# Проверка процесса
if ! pgrep hsflowd > /dev/null; then
    echo "CRITICAL: hsflowd not running"
    exit 2
fi

# Проверка доступности коллектора
if ! ping -c 1 192.168.100.10 > /dev/null 2>&1; then
    echo "CRITICAL: Collector unreachable"
    exit 2
fi

# Проверка конфигурации
INTERFACES=$(cli-shell-api showConfig system sflow interface | wc -l)
if [ "$INTERFACES" -eq 0 ]; then
    echo "WARNING: No interfaces configured"
    exit 1
fi

echo "OK: sFlow operational"
exit 0
```

### Документация и аудит

**Поддерживайте документацию:**

1. **Инвентаризация**
   - Список устройств с sFlow
   - Адреса агентов
   - Мониторируемые интерфейсы

2. **Конфигурации**
   - Шаблоны для разных типов устройств
   - Sampling rates для разных скоростей
   - Список коллекторов и их назначение

3. **Процедуры**
   - Устранение неполадок
   - Обновление конфигурации
   - Добавление новых устройств

4. **Аудит**
   - Регулярная проверка конфигураций
   - Валидация работы экспорта
   - Анализ эффективности sampling rate

### Интеграция с системами мониторинга

**SNMP для мониторинга состояния:**

```bash
set service snmp community public authorization ro
set service snmp community public network 192.168.100.0/24
commit
```

**Syslog для централизованного логирования:**

```bash
set system syslog host 192.168.100.20 facility all
set system syslog host 192.168.100.20 facility local7 level debug
commit
```

**API для автоматизации:**

VyOS API можно использовать для программного управления sFlow:

```bash
# Включение API
set service https api keys id automation key 'YOUR_API_KEY'
commit
```

Пример автоматического добавления интерфейсов через API (Python):

```python
import requests

vyos_api = "https://192.168.1.1/configure"
api_key = "YOUR_API_KEY"
headers = {"Content-Type": "application/json"}

interfaces = ["eth0", "eth1", "eth2"]

for iface in interfaces:
    payload = {
        "key": api_key,
        "op": "set",
        "path": ["system", "sflow", "interface", iface]
    }
    response = requests.post(vyos_api, json=payload, headers=headers, verify=False)
    print(f"Added {iface}: {response.json()}")

# Commit
commit_payload = {
    "key": api_key,
    "op": "commit"
}
requests.post("https://192.168.1.1/config-file", json=commit_payload, headers=headers, verify=False)
```

## Дополнительные ресурсы

### Официальная документация

- **VyOS sFlow Documentation:** https://docs.vyos.io/en/latest/configuration/system/sflow.html
- **sFlow.org (официальный сайт):** https://sflow.org/
- **sFlow RFC 3967:** https://tools.ietf.org/html/rfc3967
- **Host sFlow Daemon:** https://github.com/sflow/host-sflow

### Коллекторы и анализаторы

- **sFlowTrend:** https://inmon.com/products/sFlowTrend.php
- **ntopng:** https://www.ntop.org/
- **pmacct:** http://www.pmacct.net/
- **ElastiFlow:** https://github.com/robcowart/elastiflow
- **Grafana sFlow plugin:** https://grafana.com/grafana/plugins/

### Статьи и руководства

- **Understanding sFlow:** https://sflow.org/sFlowOverview.pdf
- **sFlow vs NetFlow comparison:** https://sflow.org/sFlowVsNetFlow.html
- **Best practices for network monitoring:** https://sflow.org/best_practices.php

### Инструменты тестирования

- **sflowtool:** Утилита командной строки для декодирования sFlow (https://github.com/sflow/sflowtool)
  ```bash
  sudo apt install sflowtool
  sflowtool -p 6343
  ```

- **sflow-rt:** Real-time sFlow анализатор (https://sflow-rt.com/)

### Сообщество

- **VyOS Community:** https://forum.vyos.io/
- **VyOS Slack:** https://slack.vyos.io/
- **sFlow Discussion Group:** https://groups.google.com/g/sflow

## Заключение

sFlow  - это мощная и эффективная технология для мониторинга сетевого трафика, особенно подходящая для высокоскоростных каналов и облачных сред. Ключевые преимущества:

- **Масштабируемость:** Подходит для каналов от 100 Mbps до 100+ Gbps
- **Низкая нагрузка:** Минимальное влияние на производительность маршрутизатора
- **Детализация:** Образцы пакетов + счетчики интерфейсов
- **Стандартизация:** Открытый стандарт с широкой поддержкой
- **Гибкость:** Поддержка множественных коллекторов и разнообразных сценариев

При правильной настройке sampling rate и polling interval sFlow обеспечивает оптимальный баланс между точностью мониторинга и ресурсами системы. Интеграция с современными системами мониторинга (ntopng, Grafana, Elasticsearch) позволяет создать полноценную платформу для анализа сети, обнаружения проблем и планирования развития инфраструктуры.

Для облачных провайдеров (Yandex Cloud, VK Cloud) и сервис-провайдеров sFlow является критически важным инструментом для учета трафика, биллинга, обеспечения SLA и безопасности.

