Real-time аналитика больших данных о сетевом трафике с Apache Kafka и Spark

Автор Категория , , ,
Real-time аналитика больших данных о сетевом трафике с Apache Kafka и Spark

Продолжая добавлять в наши практические курсы по Apache Kafka и Spark еще больше интересных примеров, сегодня рассмотрим, как с помощью этих технологий Big Data анализировать метаданные сетевых потоков в реальном времени. В этой статье мы приготовили для вас кейс по потоковой аналитики больших данных о сетевом трафике с помощью Apache Kafka и Spark.

Зачем анализировать сетевой трафик и как это сделать в реальном времени

Анализ сетевого трафика позволяет обнаружить паразитный, вирусный и закольцованный трафик, чтобы снизить загрузку сетевого оборудования и каналов связи. Также это помогает выявить в сети вредоносное и несанкционированное ПО (сетевые сканеры, флудеры, троянские программы, клиенты пиринговых сетей и пр.), локализовать неисправность сети или ошибку конфигурации сетевых агентов. Раньше эта важная задача системного администратора чаще всего решалась с помощью метода захвата пакетов (package capture). Но на практике это слишком дорого, т.к. для большинства аналитических кейсов достаточно лишь метаданных сетевого пакета, без полного содержимого его полезной нагрузки [1].

Сегодня одним из популярных протоколов учёта сетевого трафика является сетевой протокол NetFlow, разработанный компанией Cisco Systems. Он стал промышленным стандартом де-факто и поддерживается не только оборудованием Cisco, но и многими другими устройствами. Для сбора информации о трафике по протоколу NetFlow требуются следующие компоненты [2]:

  • сенсор, который собирает статистику по проходящему через него трафику – L3-коммутатор или маршрутизатор. Также можно использовать и отдельно стоящие сенсоры, которые получают данные от зеркалирования порта коммутатора.
  • Коллектор для сбора данных от сенсора данные и помещения их в хранилище.
  • Анализатор для анализа собранных коллектором данных и формирования отчетов в виде графиков и таблиц.

Современные устройства анализа сетевого трафика объединяют все эти компоненты. Например, NetFlow-коллектор nProbe от итальянской компании NTOP² может проверять пакеты и извлекать их метаданные с 4-го уровня на уровень 7 модели OSI в виде сетевых потоков со скоростью до 100 Гбит на штатном оборудовании. Помимо сбора входящих пакетов и вычисления NetFlow-показателей, он подходит для классификации трафика через DPI (Deep Packet Inspection). Также он может выполнять дополнительные действия с выбранными пакетами/потоками при перенаправлении трафика в сочетании с другими приложениями, такими как IPS / IDS, регистраторы трафика и т.д. [3].

Таким образом, задача анализа трафика в реальном времени сводится к организации конвейера сбора и аналитики метаданных сетевых пакетов. Как это сделать с помощью технологий Big Data, в частности, Apache Kafka и Spark на платформе Databricks, мы рассмотрим далее.

Apache Kafka и Spark для real-time анализа сетевого трафика

Самая простая, но весьма эффективная архитектура системы аналитики сетевого трафика в реальном времени с помощью технологий Big Data и многофункциональных NetFlow-коллекторов выглядит следующим образом [1]:

  • один или несколько коллекторов nProbe постоянно собирают сетевые потоки;
  • NetFlow-данные передаются в Apache Kafka в режиме реального времени;
  • Сам процесс потоковой аналитики больших данных выполняется в кластере Apache Он может быть развернут на платформе Databricks или в Amazon EMR.
Kafka, Spark, NetFlow, network traffic analytics
Архитектура системы потоковой аналитики сетевого трафика

Коллектор nProbe позволяет указать формат потоков NetFlow v9/IPFIX и экспортировать их в Apache Kafka в формате JSON. Вообще nProbe поддерживает около 200 опций различных показателей, включая атрибуты, указанные в NetFlow v9 RFC³. Для точного задания этих настроек, помимо выбора формата JSON и экспорта потоков в топики Kafka, в файле конфигурации nprobe.conf указано 50 полей, включая настраиваемое поле с константой для идентификации коллектора.

Сам конвейер приема и обработки данных выглядит следующим образом [1]:

  • сперва выполняется считывание данных из Kafka. В рассматриваемом примере создано 2 топика Kafka: один используется коллекторами nProbe для публикации NetFlows, а во второй в реальном времени записываются подозрительные пакеты для последующей обработки.
  • Далее выполняется обогащение данных с помощью Spark-приложений;
  • Обогащенные сетевые потоки записываются в озеро данных (Data Lake) в объектном хранилище AWS S3;
  • за анализ метаданных отвечают оконные SQL-запросы Apache Spark;
  • Результаты анализа сохраняются в AWS S
Kafka, Spark, AWS, Big Data analytics
Конвейер обработки данных потоковой аналитики сетевого трафика

Отметим, что в записной книжке платформы Databricks можно легко подключить существующую пустую корзину AWS S3 к файловой системе Databricks (DBFS), чтобы предоставить доступ к данным в объектном хранилище, как будто они находятся в локальной файловой системе:

dbutils.fs.mount(s“s3a://meg-netflows”, s“/mnt/flows-datasets”)

display(dbutils.fs.ls(s“dbfs:/mnt/flows-datasets”))

При этом для правильной S3-аутентификации ключ AWS и секрет к нему должны быть установлены как переменные среды Spark в кластере Databricks или добавлены в путь корзины. Рекомендуется использовать новую версию s3a, собственного коннектора s3n, чтобы обеcпечить взаимодействие Apache Spark c Amazon S3.

Kafka является обычным источником данных для Spark, поэтому поток из топика этой платформы считывается в датафрейм Spark.

В Spark SQL есть функция from_json(), которая принимает входной столбец данных JSON и создает структурированный выходной столбец. Но для вызова этой функции необходимо предоставить схему для объектов JSON. Используемая для этого схема данных jsonDF состоит из двух атрибутов: отметки времени прибытия, добавленной Kafka, и строкового значения с JSON NetFlow.

С помощью заданной схемы можно проанализировать JSON, содержащийся в столбце значений, а функция from_json() позволит получить доступ к данным из определенного столбца.

NetFlow-данные сохраняются в озере данных на AWS S3 как сжатые объекты Parquet по мере их поступления из Kafka, по одному в минуту, иерархически организованные по году, месяцу, дню и часу. А использование метода partitionBy() приводит к разделению в стиле Hive, что увеличит скорость выполнения SQL-запросов. Подробный код рассмотренного примера приведен в источнике [1].

Таким образом, мы в очередной раз показали, что Apache Spark и Kafka – это мощные технологии Big Data, которые позволяют создавать конвейеры, сочетающие прием, анализ и агрегацию данных в реальном времени. Это весьма полезно для анализа сетевого трафика, особенно при использовании с современными коллекторами потоков, которые генерируют метаданные в результате глубокой проверки пакетов.

Еще больше интересных примеров разработки распределенных приложений потоковой аналитики больших данных с Apache Kafka и Spark вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://marcoeg.medium.com/real-time-analysis-of-network-flow-data-with-apache-spark-on-databricks-7191e4bcbcfc
  2. https://ru.wikipedia.org/wiki/Netflow
  3. https://www.ntop.org/products/netflow/nprobe-cento/