Кафка расположение лог-файла

Просто чтобы прояснить некоторые вещи: я говорю о файле журнала процесса, который содержит сообщения stdout и stderr.

Это мой системный файл systemd:

[Unit]
Description=Apache Kafka server
Documentation=http://kafka.apache.org
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
PIDFile=/var/run/kafka.pid
User=kafka
Group=kafka
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:/var/log/kafka"

ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
SyslogIdentifier=kafka

[Install]
WantedBy=multi-user.target

Обратите внимание, что я добавил переменную среды KAFKA_LOG4J_OPTS.

Однако, похоже, это ничего не делает. Это вывод, когда я пытаюсь запустить свой сервис:

Feb 11 00:55:30 kafka01 kafka[4047]: mkdir: cannot create directory ‘/opt/kafka/bin/../logs’: Permission denied
Feb 11 00:55:30 kafka01 kafka[4047]: OpenJDK 64-Bit Server VM warning: Cannot open file /opt/kafka/bin/../logs/kafkaServer-gc.log due to No such file or directory
Feb 11 00:55:30 kafka01 kafka[4047]: log4j:WARN No appenders could be found for logger (kafka.Kafka$).
Feb 11 00:55:30 kafka01 kafka[4047]: log4j:WARN Please initialize the log4j system properly.

Итак, может кто-нибудь сказать мне правильный способ изменить местоположение файла журнала kafka? KAFKA_LOG4J_OPTS не работает, KAFKA_LOG_DIR также не работает (= Я надеялся, что kafka реализовал это подобно zookeeper). Документация по Кафке мне тоже не говорит.

2 ответа

Для других несчастных парней, как мой, вам нужно изменить LOG_DIR переменная окружения (проверено на Кафку v0.11).

Если вы откроете скрипт kafka-server-start или же /usr/bin/zookeeper-server-start, вы увидите внизу, что он вызывает kafka-run-class скрипт. И вы увидите там, что он использует LOG_DIR в качестве папки для журналов сервиса (не путать с темами кафки данных).

Возможно, на самом деле это не ответ на вопросы, но я прибыл сюда в поисках, где kafka хранит журналы приложений, а не данные производителей / потребителей. ИМО называет эти журналы данных действительно плохим наименованием.

Я развернул кластер Kafka на движке GCP Kubernetes и хотел посмотреть логи приложения, и вот как я это сделал.

1- Получить стручки

    > kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    kafka-0   1/1     Running   0          32m
    kafka-1   1/1     Running   0          32m
    kafka-2   1/1     Running   0          32m
    zk-0      1/1     Running   0          23h
    zk-1      1/1     Running   0          23h
    zk-2      1/1     Running   0          23h

2- Подключитесь к одному из модулей Кафки с помощью интерактивной команды.

> kubectl exec -it kafka-0 /bin/bash 

3- Echo $, в командной строке echo $ и нажмите кнопку вкладки несколько раз... вы получите список всех определенных переменных среды, поиск $KAFKA_HOME или просто введите

> cd $KAFKA_HOME 

Вы получите:

/opt/kafka$ ls -al 
total 68
drwxr-xr-x 1 kafka kafka  4096 Aug  2 09:37 .
drwxr-xr-x 1 root  root   4096 Jun 26  2017 ..
-rw-r--r-- 1 kafka kafka 28824 Apr 21  2017 LICENSE
-rw-r--r-- 1 kafka kafka   336 Apr 21  2017 NOTICE
drwxr-xr-x 1 kafka kafka  4096 Jun 26  2017 bin
drwxr-xr-x 1 kafka kafka  4096 Jun 26  2017 config
drwxr-xr-x 1 kafka kafka  4096 Jun 26  2017 libs
drwxr-xr-x 2 kafka kafka  4096 Aug  2 09:37 logs
drwxr-xr-x 1 kafka kafka  4096 Jun 26  2017 site-docs

Каталог журналов - это то, что я искал...

Как упоминалось в предыдущем ответе eddyP23... kata-run-class использует LOG_DIR

Однако в нем есть логика использовать Script непосредственно в родительской папке, если переменная LOG_DIR не установлена.

Так что, если ваши скрипты находятся в папках kafka/bin, где вы запускаете kafka... тогда логи будут присутствовать в kafka/log

Другие вопросы по тегам