Кафка расположение лог-файла
Просто чтобы прояснить некоторые вещи: я говорю о файле журнала процесса, который содержит сообщения 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