Skip to content

Настройка журналирования Apache Kafka в Syslog (подсистема ЖУРНАЛЛИСТ)

Apache Kafka использует log4j / log4j2 для ведения журналов. Для интеграции с подсистемой ЖУРНАЛЛИСТ журналы Kafka могут быть направлены в syslog с последующей централизованной доставкой.

Общая схема

Kafka:

  • генерирует логи (broker, controller, replication, ошибки)
  • log4j отправляет их в syslog
  • syslog (rsyslog / syslog-ng) пересылает сообщения в ЖУРНАЛЛИСТ

Где настраивается логирование

В зависимости от версии Kafka:

  • Kafka ≤ 2.x → log4j.properties
  • Kafka ≥ 3.x → log4j2.xml или log4j2.properties

Файлы обычно находятся:

bash
$KAFKA_HOME/config/log4j.properties

или

bash
$KAFKA_HOME/config/log4j2.xml

Вариант 1. Kafka (log4j) — отправка в syslog

Добавление SyslogAppender

Пример для log4j.properties:

properties
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.facility=LOCAL0
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

Подключение аппендера

properties
log4j.rootLogger=INFO, SYSLOG

Вариант 2. Kafka (log4j2)

Пример log4j2.xml:

xml
<Appenders>
    <Syslog name="Syslog" host="localhost" port="514" protocol="UDP"
            facility="LOCAL0" format="RFC5424">
        <PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/>
    </Syslog>
</Appenders>

<Loggers>
    <Root level="info">
        <AppenderRef ref="Syslog"/>
    </Root>
</Loggers>

Настройка пересылки в ЖУРНАЛЛИСТ

Kafka отправляет сообщения в локальный syslog, далее требуется настроить пересылку.

rsyslog

bash
/etc/rsyslog.d/kafka.conf

Пример:

bash
if $programname == 'kafka' then @@journalist-server:514
& stop

или по facility:

bash
local0.* @@journalist-server:514

syslog-ng

bash
filter f_kafka { program("kafka"); };

destination d_journalist {
    tcp("journalist-server" port(514));
};

log {
    source(src);
    filter(f_kafka);
    destination(d_journalist);
};

Перезапуск сервисов

bash
systemctl restart kafka
systemctl restart rsyslog

Проверка

  1. Проверить локальный syslog:
bash
tail -f /var/log/syslog
  1. Проверить события в ЖУРНАЛЛИСТ

  2. Создать нагрузку:

  • отправка сообщений в Kafka
  • остановка/запуск брокера
  • создание topic

Какие события попадают

  • запуск и остановка брокера
  • ошибки репликации
  • проблемы с Zookeeper / KRaft
  • сетевые ошибки
  • операции с топиками
  • события контроллера

Рекомендации

  • использовать отдельный facility (например, local0)
  • разделять логи Kafka и других сервисов
  • использовать TCP для передачи
  • контролировать verbosity

Альтернативный вариант (через файл)

Если используется файловое логирование:

Kafka пишет в:

bash
logs/server.log

Тогда можно:

  • использовать rsyslog (imfile)
  • пересылать файл в ЖУРНАЛЛИСТ

Когда использовать syslog

Рекомендуется:

  • при централизованном мониторинге
  • при интеграции с инфраструктурными системами
  • для корреляции событий Kafka с другими компонентами

Краткий вывод

Интеграция Kafka с подсистемой ЖУРНАЛЛИСТ через syslog позволяет включить события брокеров и кластерных компонентов в единую систему анализа, выявлять проблемы на ранних стадиях и автоматизировать реакцию на инциденты.