Проектная работа на тему "Реализация масштабируемой системы мониторинга и аналитики в реальном времени на базе Vector, Apache Kafka и ClickHouse"
Реализация проекта по созданию масштабируемого производственного хранилища данных на базе ClickHouse с интеграцией Vector, Apache Kafka, Prometheus, Grafana и других компонентов. Ниже приведены конкретные цели реализации, подробное описание архитектуры с описанием всех контейнеров из docker-compose и разделение ключевых блоков на логические секции.
-
Обеспечить стабильную генерацию, маршрутизацию и трансформацию событий безопасности для аналитики
-
Организовать бесшовное взаимодействие между компонентами:
- Генерация событий;
- Передача сообщений через Apache Kafka;
- Трансформация и отправка данных в ClickHouse с помощью Vector.
-
Развернуть сбор метрик с ключевых сервисов и их визуализацию с помощью Prometheus и Grafana, настроить дашборды для оперативного контроля.
-
Реализовать кластер ClickHouse, состоящий из 2 шардов, каждый из которых имеет 2 реплики, а также настроить Kafka с 3 брокерами, где каждый брокер имеет репликацию по 3 и 3 партиции, что обеспечивает высокую доступность и отказоустойчивость системы
git clone https://github.com/sergei23090/otus_project.git
cd otus_project
docker-compose up -d
docker logs -f event_generator
- В адресной строке:
http://localhost:3000
- login
admin
- password
admin
- Адрес:
http://localhost:8124
- login
default
- password
secret123
Проект построен на контейнеризированной инфраструктуре, описанной в файле docker-compose.yml
. Каждый контейнер выполняет свою роль в общей системе. Ниже приведено описание основных контейнеров, разделённых по функциональным блокам.
-
Grafana
Образ:grafana/grafana:latest
Функция: Визуализация метрик и создание дашбордов для контроля работы всех компонентов. Используются provisioning файлы и настройки вgrafana.ini
.
Порты: 3000 (доступ к веб-интерфейсу). -
Prometheus
Образ:prom/prometheus:latest
Функция: Сбор и хранение метрик с различных источников (ClickHouse, Kafka, Zookeeper и др.).
Порты: 9090, используется конфигурация изprometheus.yml
. -
Kafka Exporter
Образ:danielqsj/kafka-exporter
Функция: Экспорт метрик из Apache Kafka для последующей визуализации в Prometheus. -
Zookeeper Exporter
Образ:dabealu/zookeeper-exporter:latest
Функция: Сбор метрик состояния Zookeeper, используемых Prometheus для мониторинга кластера.
-
ClickHouse Кластер
Образ:clickhouse/clickhouse-server:latest
Функция: Высокопроизводительное аналитическое хранилище данных, реализованное в виде кластера, состоящего из 2 шардов, где каждый шард имеет 2 реплики. Каждый контейнер инициализируется с SQL-скриптами (из папкиinit-scripts
) и объединяется в кластер через конфигурацию вcluster_config.xml
. -
HAProxy
Образ:haproxy:latest
Функция: Балансировка нагрузки между инстансами ClickHouse. Обеспечивает доступ к кластеру по единому адресу и равномерное распределение запросов.
-
Event Generator
Образ: Собран из Dockerfile (на основе Python)
Функция: Генерирует тестовые JSON-события логов безопасности с помощью скриптаevent_generator.py
. События записываются в файл, который монтируется как volume. -
Vector (File → Kafka)
Образ:timberio/vector:latest-alpine
Функция: Читает логи из файлов (сгенерированные Event Generator), парсит их и публикует в топик Kafka.
Конфигурация: Файлvector/vector_kafka.yaml
. -
Vector (Kafka → ClickHouse)
Образ:timberio/vector:latest-alpine
Функция: Подписывается на топик Apache Kafka, выполняет преобразования (обогащение временной меткой, валидацию данных) и отправляет данные в ClickHouse.
Конфигурация: Файлvector/vector_clickhouse.yaml
. -
Vector для Docker Logs Kafka
Образ:timberio/vector:latest-alpine
Функция: Сбор логов из Docker и отправка их в Kafka для централизованного логирования и дальнейшей аналитики.
-
Apache Kafka
Образ:bitnami/kafka:latest
Функция: Обеспечивает высокодоступную передачу сообщений между компонентами. В системе 3 брокера настроены с 3 репликациями и 3 партициями, что гарантирует высокую надежность и масштабируемость передачи данных.- kafka1
- kafka2
- kafka3
-
Zookeeper
Два контейнера для координации:- zookeeper – для ClickHouse.
- zookeeper_kafka – для Kafka.
Образ:bitnami/zookeeper:latest
Функция: Обеспечивают синхронизацию и управление состоянием кластера Kafka и ClickHouse.
-
Vector Docker Logs Kafka
Образ:timberio/vector:latest-alpine
Функция: Сбор логов Docker и их отправка в Kafka для централизации логирования. -
Источники данных для Grafana
Файлыdatasource-clickhouse.yaml
иdatasource-prometheus.yaml
настроены для подключения Grafana к ClickHouse и Prometheus соответственно.
docker-compose.yml
– Определение всех контейнеров и их взаимосвязей.cluster_config.xml
– Конфигурация кластера ClickHouse, репликация и настройки Zookeeper.event_generator.py
– Скрипт для генерации тестовых событий.- Конфигурационные файлы Vector:
vector/vector_kafka.yaml
vector/vector_clickhouse.yaml
- Конфигурация Grafana:
grafana.ini
dashboards.yaml
- Источники данных Grafana:
datasource-clickhouse.yaml
datasource-prometheus.yaml
prometheus.yml
– Конфигурация Prometheus для сбора метрик.
В ходе проекта реализовано высокопроизводительное, масштабируемое и отказоустойчивое решение для обработки и аналитики данных в реальном времени. Система охватывает полный цикл:
- Генерация событий (Event Generator),
- Передача через Kafka (3 брокера с 3 репликациями и 3 партициями),
- Трансформация данных с помощью Vector (с гибкой настройкой и мониторингом),
- Хранение и аналитика в распределённом кластере ClickHouse (2 шарда, по 2 реплики в каждом),
- Мониторинг и визуализация с помощью Prometheus и Grafana.
Преимущества интеграции с Vector:
- Возможность настраивать сложные преобразования данных до их отправки в Kafka или ClickHouse.
- Встроенные возможности мониторинга позволяют быстро выявлять и устранять ошибки в обработке данных
- Разделение процессов на независимые этапы (сбор, трансформация, маршрутизация) повышает отказоустойчивость и упрощает масштабирование.