获取 Kafka 事件流日志文件
当使用 KafkaStream 对象处理 Kafka® 流事件时,使用日志文件来帮助调试事件流处理问题。这些文件包含与从 Kafka 流读取和写入事件相关的所有警告、错误和其他信息。您可以从这些来源生成日志文件:
连接到 Kafka 主题的
KafkaStream对象 - 每个对象生成一个日志文件,其中包含有关从 Kafka 服务器读取的信息。librdkafkaKafka C/C++ 客户端库 - 该库生成一个日志文件,其中包含有关来自 Kafka 服务器的写入的信息。
对于这两个源,您可以配置日志级别,以控制写入日志文件的输出量。您可以设置这些日志级别,按从最不详细到最详尽的顺序列出:
off- 未启用日志记录(librdkafka库的默认设置)fatal- 仅记录强制关闭 Kafka 连接的错误error- 记录所有错误(kafkaStream对象的默认设置)warn- 记录所有错误和警告info- 记录有关主要流处理活动的错误、警告和高级信息debug- 除了先前描述的选项中的信息外,还记录调试信息trace- 除了先前描述的选项中的信息外,还记录堆栈跟踪信息
您还可以在部署的应用程序中配置日志级别。
配置 kafkaStream 对象日志记录
每个 KafkaStream 对象的日志文件都会生成到当前文件夹中的此文件中。
log\topic_name.log
是 topic_nameKafkaStream 对象连接到的 Kafka 主题的名称。如果 log 文件夹不存在,则 KafkaStream 对象会创建它。
默认情况下,这些对象的日志级别设置为 error。要更改日志级别,请更新 Streaming Data Framework for MATLAB® Production Server™ 安装中包含的 log4j.properties.template 文件。通过在 MATLAB 命令提示符下输入此命令来打开该文件。
open(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','mps','streaming', ... '+matlab','+io','+stream','+event','+kafka','collector','log4j.properties.template'))
要更改 log4j.properties.template 文件中的日志级别,您必须更新所有指定日志级别的位置中的日志级别。例如,要将日志级别从 error 更改为 debug,请在 log4j.properties.template 文件中搜索包含此代码的行。
.level = error
在每一行中,将此代码更新为以下内容:
.level = debug
或者,要快速查看从 Kafka 主题收到的最后一个错误的信息,请使用 loggederror 函数。将您的 KafkaStream 对象作为输入参量传递给此函数。
为了生成日志,流处理数据框架使用 Log4j Java® 库的 2 版。有关此库的更多详细信息,请参阅 https://logging.apache.org/log4j/2.x/。
配置 librdkafka 库日志
当启用 librdkafka 库的日志记录时,该库会在当前文件夹中生成一个名为 mw_rdkafka.log 的文件。如果日志文件不存在,KafkaStream 对象将创建它。
默认情况下,librdkafka 库的日志级别设置为 off。要启用日志记录,请使用此 MATLAB 命令:
matlab.io.stream.event.kafka.internal.admin(log=logLevel);
logLevel 是一个字符串或字符向量,表示前面描述的日志级别,例如 "error"、"warn" 或 "debug"。例如,将 logLevel 设置为 "debug" 可启用日志记录并将日志级别设置为调试模式。
在已部署的应用程序中配置日志记录
使用 package 或 streamingDataCompiler 函数创建的工程文件打包已部署的应用程序时,打包过程会将配置文件复制到输出文件夹中。当您启动 Kafka 连接器将流处理数据从 Kafka 主题推送到由 MATLAB Production Server 托管的应用程序时,您将使用这些文件。要在 Kafka 连接器中启用日志记录,请将 log4j.properties.template 文件复制到名为 log4j.properties 的新文件中。然后,编辑这个新文件来选择日志级别并设置日志文件的名称。
要设置日志级别,请将 *.level 属性设置为所需的日志级别,如 配置 kafkaStream 对象日志记录 部分所述。要设置日志文件的名称,请将文本 !ArchiveName! 更改为所需日志文件的名称。!ArchiveName! 文本出现在以下行:
appender.rolling.fileName = ${basePath}!ArchiveName!.out
appender.rolling.filePattern = ${basePath}!ArchiveName!%i.out例如,要将输出日志消息发送到文件 RecamanSum.out,请将这些行更改为:
appender.rolling.fileName = ${basePath}RecamanSum.out
appender.rolling.filePattern = ${basePath}RecamanSum%i.out要控制 librdkafka 日志记录,请编辑位于以下路径的 rdkafkalog.properties 文件:
open(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','mps','streaming', ... '+matlab','+io','+stream','+event','+kafka','collector','rdkafkalog.properties'))
该文件在安装时具有只读权限,因此在编辑该文件前必须将其设置为可写权限。为了使您的更改生效,您必须在使用 package 或 streamingDataCompiler 函数创建可部署存档之前编辑此文件。打包将 rdkafka.properties 文件合并到您的应用程序中。虽然打包后您无法更改此文件,但您可以使用环境变量来控制 MATLAB Production Server 加载 rdkafka.properties 文件的位置。
您可以通过设置 rdkafka.properties 中的值来更改日志级别和日志文件名。例如,要将日志级别从 fatal(默认)更改为 info,请将 level=fatal 行更改为 level=info。
类似地,file 属性设置输出日志文件的完整路径。默认值为 mw_rdkafka.log,如下所示:
file=mw_rdkafka.log
如果没有文件夹规范,则该文件位于托管已部署的流处理应用程序的 MATLAB Production Server 实例的顶级文件夹中,该文件夹是 auto_deploy 文件夹的父文件夹。如果您将多个流处理应用程序部署到同一个 MATLAB Production Server 实例,请使此文件名特定于应用程序。例如:
file=recamanSum_rdkafka.log
如果保持文件名不变,则该文件将由该服务器托管的所有流处理应用程序共享。
要更改文件出现的文件夹,请使用适合平台的语法指定完整或相对路径。
| Windows® | Linux® 或 Mac |
|---|---|
|
|
要临时更改 MATLAB Production Server 加载 rdkafka.properties 文件的位置,请使用环境变量 MW_IOSTREAM_RDKAFKA_LOG_CONFIG。您必须在启动托管应用程序的 MATLAB Production Server 实例之前设置此环境变量。您还必须在启动该实例的环境中设置此变量。否则,MATLAB Production Server 无法找到环境变量。此环境变量设置会更改由 MATLAB Production Server 实例托管的所有应用程序的 rdkafka.properties 的位置。此环境变量仅用于临时故障排除。
为了临时使所有流处理应用程序根据未部署的 rdkafka 文件中设置的文件和日志级别配置 rdkafka.properties 日志记录,请将 MW_IOSTREAM_RDKAFKA_LOG_CONFIG 设置为未部署文件的完整路径。例如:
| Windows | Linux 或 Mac |
|---|---|
set MW_IOSTREAM_RDKAFKA_LOG_CONFIG=c:\mps_logs\recamanSum_rdkafka.log | setenv MW_IOSTREAM_RDKAFKA_LOG_CONFIG /myusername/mps_logs/recamanSum_rdkafka.log |
向 MathWorks 技术支持提供日志文件
如需更多调试帮助,您可以将日志文件提供给 MathWorks® 技术支持。在提供日志文件之前,将日志级别设置为 trace。
使用之前提供的信息找到日志文件。
将日志文件附加到 MathWorks 技术支持的新票或现有票上。请联系技术支持。