Перейти к основному контенту

Настройка Kafka для работы с wiSLA (и с wiProbe Aggregator)

1. Установка Docker

Перед началом работы необходимо убедиться, что Docker установлен и работает.

Проверка наличия Docker:

docker --version

Установка Docker (для Ubuntu/Debian):

Если Docker не установлен, выполните следующие команды:

sudo apt-get update
sudo apt-get install docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker

Добавление пользователя в группу docker:

Чтобы избежать необходимости использовать sudo при каждом вызове Docker:

sudo usermod -aG docker $USER
newgrp docker

Примечание для Astra Linux:
В Astra Linux установка Docker имеет специфические особенности, особенно в изолированных средах без доступа к интернету. Рекомендуется ознакомиться с инструкцией: Установка wiCore без доступа к сети интернет

2. Развертывание Kafka через Docker Compose

2.1 Создайте файл docker-compose.yml  со следующим содержимым и замените в KAFKA_CFG_ADVERTISED_LISTENERS адрес 127.0.0.1 на актуальный IP-адрес сервера wiSLA:

Актуальные данные файла docker-compose.yml на 30.07.2025:

version: '3.8'

services:
  zookeeper:
    image: bitnami/zookeeper:3.9
    container_name: zookeeper
    ports:
      - "2187:2181"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    volumes:
      - "zookeeper_data:/bitnami/zookeeper"
    restart: unless-stopped

  kafka:
    image: bitnami/kafka:3.7
    container_name: kafka
    ports:
      - "9092:9092"
      - "29092:29092"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,INTERNAL://:29092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092,INTERNAL://kafka:29092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
      - KAFKA_CFG_NUM_PARTITIONS=1
      - KAFKA_CFG_DELETE_TOPIC_ENABLE=true
      - KAFKA_CFG_LOG_RETENTION_HOURS=24
      - KAFKA_CFG_LOG_SEGMENT_BYTES=5242880
      - KAFKA_CFG_MESSAGE_MAX_BYTES=1048576
      - KAFKA_CFG_SOCKET_REQUEST_MAX_BYTES=10485760
      - KAFKA_CFG_LOG_RETENTION_BYTES=53687091

    volumes:
      - "kafka_data:/bitnami/kafka"
    depends_on:
      - zookeeper
    restart: unless-stopped

  kafka-console:
    image: docker.redpanda.com/redpandadata/console:latest
    container_name: kafka-console
    ports:
      - "8085:8080"
    environment:
      KAFKA_BROKERS: kafka:29092
      SERVER_PORT: 8080
      CONSOLE_LOG_LEVEL: info
      CONSOLE_FEATURES_TOPIC_INSPECTOR: "true"
    depends_on:
      - kafka
    restart: unless-stopped

volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local

Примечание: В этом же файле можно дополнительно настроить параметры работы системы, такие как срок хранения данных (по умолчанию - 24 часа), который может очищаться основываясь на указанный временной период, либо при максимальном объеме хранимой информации.

2.2 Запустите Kafka:

sudo docker-compose up -d

2.3 Проверьте работоспособности 

Убедитесь, что запущены три контейнера: zookeeper, kafka, kafka-console:

sudo docker ps

image.png

 Проверьте логи Kafka-контейнера (замените CONTAINER_ID_KAFKA на реальный ID):

sudo docker logs CONTAINER_ID_KAFKA

3. Установка и настройка wiProbe Aggregator (не обязательно)

3.1.Скачивание архива

Скачайте файл wisla-wiprobe-aggregator.jar с GitLab.
Подробная инструкция: Установка wiProbe Aggregator .

Примечание: Установка Nginx (который упоминался в статье) не обязательна, если не требуется балансировка нагрузки между несколькими агрегаторами.

3.2. Создайте каталог для логов (желательно рядом с агрегатором), иначе при запуске агрегатора будут ошибки, что нет прав для записи логов):

mkdir -p /home/wisla/aggrlog
chown wisla:wisla /home/wisla/aggrlog

3.3. Настройка конфигурации JAR-файла

Откройте JAR-архив с помощью архиватора (например, 7-Zip, WinRAR) и отредактируйте:

  • BOOT-INF/classes/config/application.properties указав в параметрах bootstrap.servers и wisla.dc-nodes необходимый ip:
server.servlet.context-path=/aggregator
server.port=18080
aggregator.kafka-enabled=true
aggregator.wisla-kafka.bootstrap.servers=ВАШ_IP:9092  # Например: 10.11.11.52:9092
aggregator.wisla-kafka.consumer-threads-count=4
aggregator.wisla.dc-nodes=http://ВАШ_DC_УЗЕЛ:8080  # Например: http://10.11.11.51:8080
  • BOOT-INF/classes/logback-spring.xml в параметрах property и fileNamePattern прописать правильные пути для логов:
<property name="LOG_FILE" value="/home/wisla/aggrlog/aggregator.log" />
.....
  <fileNamePattern>/home/wisla/aggrlog/aggregator.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>

image.png

3.4. Настройка автозапуска через systemd

  • Создайте systemd unit для автоматического запуска агрегатора, с указанием пути, где лежит агрегатор:
sudo nano /etc/systemd/system/aggr-jar.service
  • Вставьте конфигурацию (адаптируйте пути и имя пользователя!):
[Unit]
Description=WiProbeAggregator

[Service]
ExecStart=/usr/bin/java -jar /home/smpsadmin/wisla-wiprobe-aggregator.jar
Restart=always
User=wisla

[Install]
WantedBy=multi-user.target

3.5. Запуск и проверка:

# Обновить конфигурацию
sudo systemctl daemon-reload

# Включить автозагрузку
sudo systemctl enable aggr-jar.service

# Запустить службу
sudo systemctl start aggr-jar.service

# Проверить статус
sudo systemctl status aggr-jar.service

# Просмотр логов (реальный режим)
journalctl -u aggr-jar.service -f

4. Настройка wiSLA для работы с Kafka и Aggregator

4.1. В wiSLA Data Collection Configuration укажите адрес агрегатора:

wtProbe destination = http://ВАШ_IP_АГРЕГАТОРА:18080/aggregator

image.png

4.2. В wiSLA Resources Configuration укажите адрес Kafka:

Kafka bootstrap servers = ВАШ_IP_КАФКА:9092

image.png

5. Особенности работы с Kafka и агрегатором

5.1. Варианты конфигурации системы
  1. Standalone-режим (один сервер wiSLA):

    • Без Kafka и без агрегатора::

      • Работает через REST (прямое подключение wiProbe → wiSLA)

      • Недостаток: в логах будут постоянные ошибки об отсутствии подключения к Kafka

      • Конфиг: WISLA_WIPROBE_DESTINATION = http://wisla_ip:8080

      • Рекомендация: установите Kafka как заглушку для подавления ошибок

    • С Kafka (без агрегатора):

      • Kafka работает как заглушка (ошибки в логах пропадают)

      • Данные идут через REST (как в варианте выше)

      • Особенность: логи wiProbe не попадают в Kafka (только в файлы)

      • Конфиг: WISLA_WIPROBE_DESTINATION = http://wisla_ip:8080

      • Просмотр логов через Redpanda Console недоступен

    • С Kafka и агрегатором:

      • Полноценная работа с логированием

      • Данные идут через агрегатор → Kafka

      • Просмотр логов через Redpanda Console (http://IP_KAFKA:8085)

      • Конфиг: WISLA_WIPROBE_DESTINATION = http://aggregator_ip:18080/aggregator

      • Рекомендуется для новых установок

    1. Кластерный режим (обязательные требования):

      • ❗ Без Kafka и агрегатора – не корректная работа

      • ❗ С Kafka, но без агрегаторане корректная работа

      • ✅ Только с Kafka + агрегатором:

        • Агрегатор - модуль системы принимает данные (результаты измерений)  от агентов/зондов (по rest) и складывает в соответствующие топики kafka.

        • Конфиг: WISLA_WIPROBE_DESTINATION = http://aggregator_ip:18080/aggregator

5.2. Важные замечания
  • Redpanda доступен по указанному в docker-compose.yml порту  консоли кафки, через: http://IP_СЕРВЕРА:8085

  • Настройки WISLA_WIPROBE_DESTINATION - url получаемая wiProbe при авторегистрации для отправки данных (результатов измерений). (url авторегистрации можно изменить только при выполнении команды slamon-conf url .....)

  • Для standalone можно указать прямой REST-адрес wiSLA (http://IP_WISLA:8080)

  • В кластере обязательно указывайте адрес агрегатора (http://aggregator_ip:18080/aggregator)

5.3. Сравнение режимов
Режим Kafka Aggregator Данные через Логи в Redpanda Совместимость
Standalone REST ✅ (с ошибками логов)
Standalone+ REST ✅ (стабильно)
Standalone++ Kafka ✅ (рекомендуется)
Кластер++ Kafka ✅ (обязательно)

Примечание: Даже для standalone рекомендуется развернуть Kafka и агрегатор – это обеспечит единый подход к логированию и упростит переход на кластерную архитектуру в будущем.

image.png