Фреймворк для обработки сетевых потоков (NetFlow v5/v9, sFlow, IPFIX) через настраиваемые YAML-конвейеры. Принимает flow-данные от сетевых устройств, фильтрует, обогащает и экспортирует в JSON, CSV, Prometheus, InfluxDB, NATS, SQLite. Компоненты: фильтры по IP/порту/протоколу, аннотация геолокацией и AS-номерами, дедупликация, агрегация. Полезен для построения self-hosted системы мониторинга трафика.
# go install
go install codeberg.org/BelWue/flowpipeline@latest
# git clone + build
git clone https://codeberg.org/BelWue/flowpipeline
cd flowpipeline
go build -o flowpipeline .
# Container (Codeberg registry)
docker run -v ./myconfig.yml:/config/pipeline.yml codeberg.org/belwue/flowpipeline:latest
# Пример pipeline.yml — принять NetFlow v9, вывести в JSON
# segments:
# - type: goflow2
# config: {listen: "0.0.0.0:2055", workers: 4}
# - type: json
# config: {filename: "/dev/stdout"}
./flowpipeline -config pipeline.yml
Набор инструментов для обработки сообщений о потоках, совместимый с goflow2

bwNET — исследовательский проект федеральной земли Баден-Вюртемберг (Германия), целью которого является предоставление инновационных сервисов в рамках исследовательской и образовательной сети штата BelWü. Эта GitHub-организация содержит код, относящийся к аспекту мониторинга проекта.
Этот репозиторий содержит наш набор инструментов для обработки данных о потоках, который позволяет нам и нашим пользователям определять конвейеры (пайплайны) для обработки сообщений о потоках, совместимых с goflow2. Проект flowpipeline интегрирует большинство других компонентов нашего стека обработки потоков в единый программный продукт, который можно настроить для выполнения любой функции:
Если вы хотите внести вклад в проект, огромное спасибо! Пожалуйста, обратитесь к руководству по участию для получения дополнительной информации. В противном случае просто продолжайте чтение, чтобы начать настройку собственного экземпляра flowpipeline.
Для начала выберите один из следующих методов развёртывания.
Клонируйте этот репозиторий и используйте go build ., чтобы собрать исполняемый файл самостоятельно.
По умолчанию бинарный файл будет искать файл конфигурации с именем config.yml в своем локальном каталоге. Вы можете либо создать пользовательскую пустую конфигурацию, либо скопировать существующую конфигурацию из любого каталога с примерами.
Загрузите наш последний релиз
и запустите его так же, как если бы вы скомпилировали его сами.
Релизы flowpipeline содержат исполняемые файлы для Linux (flowpipeline-linux).
Стандартная, динамически слинкованная версия требует относительно современной системы
(glibc 2.32+, linux 5.11+ для bpf, mongodb ...) и включает все функции.
Как запасной вариант, статические бинарные файлы будут работать в старых средах
(Rocky Linux 8, Debian 11, ...), но не включают сегменты, требующие
CGO/динамической линковки (bpf, sqlite, mongodb и поддержка плагинов, см.
документацию по конфигурации).
Готовый к использованию контейнер предоставляется как belwue/flowpipeline. Вы можете посмотреть
его в нашем реестре контейнеров Codeberg.
Конфигурации, ссылающиеся на другие файлы (например, базы данных геолокации для обогащения данных о потоках),
будут работать в контейнере без дополнительных правок. Это связано с тем, что точка монтирования тома
/config добавляется в начало пути во всех сегментах, принимающих конфигурацию для
открытия файлов, если бинарный файл был собран с флагом сборки container.
podman run -v ./examples/configuration/xy:/config flowpipeline
# or
docker run -v ./examples/configuration/xy:/config flowpipeline
Мы также предоставляем контейнер, отображающий примеры визуализаций через панели мониторинга Prometheus+Grafana (codeberg.org/belwue/flowpipeline-grafana).
Пример контейнера запускается с:
- Grafana работает на порту 3000
- запускается с учетными данными администратора Grafana по умолчанию (пользователь: admin, пароль: admin)
- Приёмник netflow работает на порту 2055
- Приёмник sflow работает на порту 6343
- prometheus работает на порту 9090
docker run -p 3000:3000 -p 2055:2055/udp -p 6343:6343/udp -p 9090:9090 codeberg.org/belwue/flowpipeline-grafana

Соответствующие файлы конфигурации доступны в /examples/visualization.
Обратитесь к документации по конфигурации
для получения полного руководства. В остальном просмотр примеров даст вам
хорошее представление о том, как выглядит конфигурация и какие возможные
применения она имеет.
Файл конфигурации по умолчанию, используемый flowpipeline, — config.yml.
Для использования другого файла конфигурации его местоположение должно быть указано с помощью -c path/to/file.yml.
Файл конфигурации должен начинаться с сегмента из группы input. За ним может следовать
один или несколько сегментов. Следующие сегменты обрабатывают все потоки, выведенные предыдущим сегментом.
Большинство сегментов выводят все потоки, которые они потребили от предыдущего сегмента.
Исключением являются сегменты группы filter.
Для полноты, вот еще один минимальный пример,
который начинает прослушивание NetFlow v9 на порту 2055, применяет фильтр, указанный в
качестве первого аргумента, а затем выводит его в stdout в формате, напоминающем tcpdump.
- segment: goflow
- segment: flowfilter
config:
filter: $0
- segment: printflowdump
Вы можете вызвать его, например, так: ./flowpipeline "proto tcp and (port 80 or port 443)".
Для развёртывания в производственной среде настоятельно рекомендуется использование центрального кластера Kafka.
Это позволяет распределять несколько избыточных экземпляров flowpipeline по нескольким георезервированным площадкам.
Разные воркеры могут использовать сегмент kafkaconsumer для чтения и сегмент kafkaproducer для записи в кластер.
Избыточные воркеры должны быть настроены с использованием одной и той же группы Kafka для всех экземпляров, чтобы не дублировать потоки.

Если вы обнаружите, что существующим сегментам не хватает некоторой функциональности или вам требуется
очень специфическое поведение, можно добавлять сегменты в качестве плагина.
Это делается с помощью опции командной строки -p yourplugin.so и вашего собственного
пользовательского модуля. См.
примеры/плагин
для получения базового примера и инструкций по компиляции вашего плагина.
Обратите внимание, что это требует CGO и, следовательно, не будет работать с использованием статических бинарных релизов или в контейнере.