flowpipeline

Network Analysis v2.0.7.3 · 28.01.2026 активный

Фреймворк для обработки сетевых потоков (NetFlow v5/v9, sFlow, IPFIX) через настраиваемые YAML-конвейеры. Принимает flow-данные от сетевых устройств, фильтрует, обогащает и экспортирует в JSON, CSV, Prometheus, InfluxDB, NATS, SQLite. Компоненты: фильтры по IP/порту/протоколу, аннотация геолокацией и AS-номерами, дедупликация, агрегация. Полезен для построения self-hosted системы мониторинга трафика.

v2.0.7.3
28.01.2026 current
Добавлен 16.07.2026 · Обновлён 16.07.2026 · Network Analysis
Установка
# 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
переведено ИИ

Релиз на Codeberg (последний SemVer) Документация GoDoc CI Отчёт Go Лицензия: GNU GPLv3

Flowpipeline

Набор инструментов для обработки сообщений о потоках, совместимый с goflow2


Flowpipeline


О проекте

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 и поддержка плагинов, см. документацию по конфигурации).

Контейнерные релизы

Автономный контейнер Flowpipeline

Готовый к использованию контейнер предоставляется как belwue/flowpipeline. Вы можете посмотреть его в нашем реестре контейнеров Codeberg.

Конфигурации, ссылающиеся на другие файлы (например, базы данных геолокации для обогащения данных о потоках), будут работать в контейнере без дополнительных правок. Это связано с тем, что точка монтирования тома /config добавляется в начало пути во всех сегментах, принимающих конфигурацию для открытия файлов, если бинарный файл был собран с флагом сборки container.

podman run -v ./examples/configuration/xy:/config flowpipeline
# or
docker run -v ./examples/configuration/xy:/config flowpipeline

Демо-контейнер 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

Панель Grafana, отображающая статистику flowpipeline

Соответствующие файлы конфигурации доступны в /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 и, следовательно, не будет работать с использованием статических бинарных релизов или в контейнере.

Комментарии
Войдите, чтобы оставить комментарий