Комментарии 8
Костылил сборщик и анализатор на связке goflow+kafka+clickhouse+grafana ради любопытства.
Трафик конторы на 300 пользователей переваривает не напрягаясь.
Плюсы такого решения в том, что данные не нужно агрегировать, все флоу сохраняются в БД, также легко горизонтально масштабируется.
Получается, вы "изобрели" Akvorado, только без готового графического интерфейса и прочих удобных плюшек для обогащения метаданными.
Это, вроде, не очень большая сеть? Где-то /23 в терминах IPv4. У операторов, даже некрупных, бывают сотни таких сетей :)
И для них эти плюсы становятся уже не очень плюсами.
Горизонтально масштабировать, то есть покупать новые железные серверы - недешево.
Хранить все flow, то есть держать большое хранилище - тоже недешево.
Они наоборот хотят, чтобы трафик анализировался где-нибудь в мелкой виртуалке и ничего не просил.
Да, верно. Но и задачи бывают разными.
В случае задачи сбора flow в БД, postgresql работает хорошо только на небольших масштабах. postgresql больше заточен под OLTP и слабо подходит для аналитики, особенно, если данные в таблицу пишутся довольно интенсивно.
Можно применять разные трюки, например, семплирование данных, партиционирование таблиц. Можно использовать расширение TimescaleDB, в том числе с шардированием на удалённые серверы БД. Но всё равно самая простая стратегия увеличения производительности - это вертикальное масштабирование.
В отличии от postgresql, clickhouse - это самое оно для аналитики: хранение данных в колоночном формате позволяет очень сильно сжимать данные. Крайне радикально. Миллионы монотонно увеличивающихся значений может уместиться в несколько килобайт. А когда оптимизация не помогает, парты сжимаются архиватором, что ускоряет чтение с диска.
Агрегация по полю не требует вычитывания всей записи, а только нужного поля.
Отдельно можно сказать про функционал вьюшек - материализованных представлений, которые обновляются в момент поступления данных в таблицу. Например, таким образом можно сделать семплирование в несколько диапазонов (5 минут, час) и дешево хранить их годами.
Предагрегацию и т.п.
Также легко реализуется TTL жизни записи (а дальше либо удаление, либо вынос на холод).
При этом всё происходит самим движком БД, без участия приложения.
Ещё можно упомянуть про кластеризацию CH - за счёт хранения данных в партах весьма элегантно реализуется мультимастер.
Если мне не изменяет память, то у меня с одного устройства за месяц набегало порядка пары миллиардов flow, которые занимали от силы пару гигабайт.
Ну да, на raspberripi связку не запустишь, и для небольшой сети штука явно избыточная: из-за ограничений CH, для неё требуется буферизация данных - например kafka. А это тоже требует ресурсов.
Но зато, в случае сотен подсетей позволяет гибко масштабироваться - добавлять коллекторы, очереди в брокере, экземпляры СУБД...
А можно совсем для тупых ссылку на быстрый старт, что-бы хоть что-то увидеть в веб-морде, а не No data? Надо на коммутаторах перенаправление на контейнер включать или он сам что-то собирать должен?
Шаблон для проксмокса развернул.
Нужно, чтобы sFlow (наверное, он, если flow с коммутаторов) как-то попал в контейнер. Я не очень в Proxmox, но из общих соображений нужно пробросить порт sFlow (скорее всего, UDP 6343) из хоста в контейнер.
Потом, когда трафик придет в коллектор, нужно настроить его так же, как и LXC
https://github.com/vmxdev/xenoeye/blob/master/README.ru.md#lxc-контейнер
Отредактируйте /etc/xenoeye/xenoeye.conf, /var/lib/xenoeye/iplists/mynet и перезапустите.
Отредактируйте /etc/xenoeye/xenoeye.conf
Прописал eth0 вместо lo.
/var/lib/xenoeye/iplists/mynet
Оставил только одну строчку с локалкой
трафик придет в коллектор
Для этого надо sFlow настроить в коммутаторе:
Примеры выполнения команд
Установить IP-адрес 10.0.80.1 сервера 1 для сбора статистики sflow. Для Ethernet-интерфейсов te1/0/1-te1/0/24 установить среднюю скорость выборки пакетов — 10240 кбит/с и максимальный интервал между успешными выборками пакетов — 240 c.
console# configure
console(config)# sflow receiver 1 10.0.80.1
console(config)# interface range tengigabitethernet 1/0/1-24
console(config-if-range)# sflow flow-sampling 10240 1
console(config-if)# sflow counters-sampling 240 1
Это единственный Элтех, который я смог.
В ТТХ Д-Линков sFlow есть, но в мануалах - не нашёл. То-ли совсем днищенские Д-Линки не умеют, то ли я совсем тупой...
Главное, Графана начала что-то показывать - будем дальше разбираться.
Спасибо за помощь!
Анализируем сетевой трафик средних и крупных сетей с помощью Netflow/IPFIX/sFlow и боремся с DoS/DDoS с помощью BGP