Kafka 日志文件位置

Kafka 日志文件位置

只是为了澄清一些事情:我正在谈论包含 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 文档也没有告诉我。

答案1

对于像我这样的其他不幸的小伙子,你需要修改LOG_DIR环境变量(针对 Kafka 进行测试v0.11)。

如果您打开脚本kafka-server-start/usr/bin/zookeeper-server-start,您将在底部看到它调用kafka-run-class脚本。您将在那里看到它用作LOG_DIR服务日志的文件夹(不要与 kafka 主题数据混淆)。

答案2

也许这实际上不是问题的答案,但我来这里是为了寻找 kafka 存储应用程序日志的位置,而不是生产者/消费者数据的位置。在我看来,将其称为数据日志是一个糟糕的命名。

我已经在 GCP Kubernetes 引擎上部署了一个 Kafka 集群,我想查看应用程序的日志,下面是我操作的方法。

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 pod

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

3- Echo $,在命令行类型中echo $按 Tab 键几次...您将获得所有定义的环境变量的列表,搜索$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

日志目录正是我所寻找的……

答案3

正如 eddyP23 在之前的回复中提到的那样... kata-run-class 使用 LOG_DIR

但是,如果未设置 LOG_DIR 变量,则其中的逻辑是直接使用脚本父文件夹。

因此,如果你的脚本位于启动 kafka 的 kafka/bin 文件夹中,那么日志将出现在 kafka/log 中

相关内容