xenoeye

August 27, 2025 · View on GitHub

Легкий коллектор и анализатор Netflow/IPFIX/sFlow

С помощью этого коллектора вы сможете

  • Мониторить трафик IP-сетей, отдельных IP-адресов или сервисов
  • Быстро реагировать на всплески трафика или падение трафика ниже порога
  • Наблюдать за характером трафика, распределением сетевых пакетов используя данные из Netflow/IPFIX/sFlow

Ключевые особенности

  • Коллектор разрабатывался для средних и крупных сетей, с разными группами пользователей, которым нужны разные отчеты. Для этого используются "объекты мониторинга". Объект мониторинга может быть сетью, набором сетей, автономной системой, гео-объектом или произвольным сетевым трафиком, который можно выделить из Netflow/IPFIX/sFlow.
  • C помощью коллектора можно генерировать различные отчеты, строить графики, дашборды в Grafana, выполнять какие-то действия, когда скорость трафика превышает пороги или становится ниже порогов.
  • Мы используем коллектор для мониторинга своих сетей. У нас используется Netflow v9 и IPFIX, поэтому коллектор поддерживает их.
  • Поддерживается также Netflow v5 и sFlow.
  • В документации есть примеры построения простых отчетов. Для построения более сложных нужно хотя бы базовое знание SQL.
  • В коллекторе используются текстовые конфигурационные файлы. Это позволяет писать простые конфиги вручную, а для сложных конфигураций с большим количеством объектов можно генерировать конфиги скриптами.
  • Коллектор обрабатывает данные двумя способами: агрегирует их за периоды (временные окна фиксированного размера, для получения отчетов и графиков), и использует скользящие средние для быстрой реакции на всплески.
  • Оба способа могут использоваться как по отдельности, так и совместно. Например, если с помощью скользящего среднего обнаружилось превышение порога, можно запустить пользовательский скрипт и сразу же включить сбор расширенной статистики.
  • Мы используем скользящие средние для обнаружения объемных DoS/DDoS атак. При пробитии порогов создаются BGP-анонсы (FlowSpec фильтрация, rate-limit, перенаправление на сервера очистки или Blackhole) и пользователям приходит уведомление в мессенджер.
  • Коллектор не очень требователен к ресурсам. Он вполне может обрабатывать данные и строить отчеты даже на Orange Pi (аналог Raspberry Pi) с 4 Гб памяти. На небольших сетях он может работать в VM с одним CPU и 1Гб RAM.
  • Коллектор тестировался только под 64-битным Linux (x64, AArch64 и Эльбрус).
  • Мы используем PostgreSQL в качестве хранилища для временных рядов. Туда экспортируются агрегированные по выбранным Netflow-полям данные. Коллектор может экспортировать не все данные в СУБД, он может агрегировать и экспортировать только top-N сущностей, а остальные агрегировать в одну строку. Это полезный механизм для крупных объектов мониторинга - можно регулировать количество данных, которые пишутся в СУБД и использовать более дешевые медленные диски.
  • Кроме PostgreSQL в коллекторе есть экспериментальная поддержка хранения данных в ClickHouse.
  • Из коробки поддерживается базовый набор Netflow/IPFIX-полей, но вы можете добавить почти любое нужное поле.
  • У проекта очень либеральная лицензия ISC. У нас нет никаких планов делать коммерческие или частично коммерческие версии. Это значит, что мы не можем дать никаких прогнозов относительно будущего проекта. Но, с другой стороны:
  • В коллекторе нет никаких скрытых или искусственных ограничений.

Производительность

Пользователи обычно интересуются хотя бы приблизительной оценкой производительности, поэтому мы сделали несколько тестов: записали в pcap-файлы реальный Netflow трафик разных роутеров и проиграли их на loopback-интерфейсе с помощью tcpreplay на разной скорости.

Тесты запускались на i3-2120 CPU @ 3.30GHz.

Очень грубо можно ориентироваться на такие цифры:

В отладочном режиме, когда в файл печатается содержимое каждого флова получилось около 100K flow в секунду на одном CPU.

В немного более приближенном к продакшен-режиму, с двумя объектами мониторинга, двумя скользящими окнами - около 700K fps на одном CPU.

Эти цифры лучше читать с пессимистичным настроением:

  1. если вы нагрузите коллектор многими объектами мониторинга с кучей отчетов и отладочной печатью, он может захлебнуться на 100K fps/CPU и меньше
  2. скорее всего 700K fps и больше на одном CPU обсчитать не получится

Про масштабирование на несколько ядер написано ниже в документации

LXC контейнер

С релизом v25.02 поставляется образ LXC-контейнера xe2502.tar.xz. Это привелегированный контейнер и он сконфигурирован для использования хостовой сети, используйте такую конфигурацию с крайней осторожностью. В контейнере находится коллектор c несколькими преднастроенными объектами мониторинга, PostgreSQL и Grafana.

Краткая инструкция по использованию:

# установите lxc
$ sudo apt install lxc

# распакуйте образ контейнера
$ sudo tar Jxf xe2502.tar.xz -C /var/lib/lxc

# запустите контейнер
$ sudo lxc-start --name xe2502

# запустите шелл контейнера
$ sudo lxc-attach --name xe2502

Внутри контейнера отредактируйте файл /etc/xenoeye/xenoeye.conf.

Если вы захватываете *flow с помощью pcap, добавьте capabilities:

# setcap "cap_net_admin,cap_net_raw,cap_dac_read_search,cap_sys_ptrace+pe" /usr/local/bin/xenoeye

Отредактируйте файл /var/lib/xenoeye/iplists/mynet, напишите туда свои сети (IPv4 и IPv6), а ненужные удалите.

Перезапустите сервис

# service xenoeye restart

Перейдите браузером на http://server-address:3000, должна открыться Grafana. Логин/пароль admin/admin.

В Графане преднастроено несколько дашбордов (Overview, AS/GeoIP, Routers, DoS/DDoS) отдельно для IPv4 и IPv6 адресов. Ниже в документации написано, как добавлять другие отчеты и настраивать скользящие средние.

Proxmox-шаблон

Также доступен шаблон для Proxmox: proxmox-xe2502.tar.xz

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

Планы на будущее

Сейчас мы не планируем добавлять новые фичи. Cмотрим на стабильность, результаты работы, пытаемся исправить ошибки и сделать код более простым и понятным