Чтобы прояснить некоторые вещи: я говорю о файле журнала процесса, который содержит сообщения 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). Документация kafka мне тоже ничего не говорит.
Другим несчастным парням вроде моего нужно изменить LOG_DIR
переменная окружения (проверено для Kafka v0.11
).
Если вы откроете скрипт kafka-server-start
или /usr/bin/zookeeper-server-start
, вы увидите внизу, что он вызывает kafka-run-class
сценарий. И вы увидите, что он использует LOG_DIR
в качестве папки для логов сервиса (не путать с данными тем kafka).
Как упоминалось в предыдущем ответе eddyP23 ... kata-run-class использует LOG_DIR
Однако в нем есть логика использовать скрипт непосредственно в родительской папке, если переменная LOG_DIR не установлена.
Итак, если ваши скрипты находятся в папках kafka / bin, в которых вы запускаете kafka ... тогда журналы будут присутствовать в kafka / log
Возможно, это не совсем ответ на вопросы, но я пришел сюда в поисках того, где 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- Подключитесь к одному из модулей Kafkas с помощью интерактивной команды
> 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
Каталог журналов - это то, что я искал ...