10.3. 配置 Debezium 日志记录
默认情况下,Debezium 连接器将所有 INFO
、WARN
和 ERROR
消息写入控制台。您可以使用以下方法之一更改默认日志配置:
您可以使用其他方法使用 Log4j 配置 Debezium 日志记录。如需更多信息,请搜索有关设置和使用附加者向特定目的地发送日志消息的教程。
10.3.1. 通过配置日志记录器来更改 Debezium 日志记录级别
默认 Debezium 日志记录级别提供足够的信息来显示连接器是否健康。但是,如果连接器不健康,您可以更改其日志级别来排除这个问题。
通常,Debezium 连接器将其日志消息发送到与生成日志消息的 Java 类的完全限定名称匹配的日志记录器。Debezium 使用软件包来组织具有类似或相关功能的代码。这意味着您可以控制特定类的所有日志消息,或者控制特定软件包内或所有类的所有日志消息。
流程
-
打开
log4j.properties
文件。 为连接器配置日志记录器。
这个示例为 MySQL 连接器和连接器使用的数据库架构历史记录实现配置了日志记录器,并将其设置为日志记录
DEBUG
级别的信息:log4j.properties
... log4j.logger.io.debezium.connector.mysql=DEBUG, stdout 1 log4j.logger.io.debezium.relational.history=DEBUG, stdout 2 log4j.additivity.io.debezium.connector.mysql=false 3 log4j.additivity.io.debezium.storage.kafka.history=false 4 ...
如有必要,更改连接器中类的特定子集的日志级别。
增加整个连接器的日志级别会增加日志详细程度,这有助于了解发生的情况。在这些情况下,您只能为与您要故障排除的问题相关的类子集更改日志级别。
-
将连接器的日志级别设置为
DEBUG
或TRACE
。 查看连接器的日志消息。
查找与您要故障排除相关的问题相关的日志消息。每个日志消息的末尾显示生成消息的 Java 类的名称。
-
将连接器的日志级别设置为
INFO
。 为您识别的每个 Java 类配置日志记录器。
例如,假设您不确定 MySQL 连接器在处理 binlog 时跳过一些事件的原因。您可以把连接器的日志记录保持在
INFO
中,而不是为整个连接器打开DEBUG
或TRACE
日志记录,然后只对正在读取 binlog 的类配置DEBUG
或TRACE
:log4j.properties
... log4j.logger.io.debezium.connector.mysql=INFO, stdout log4j.logger.io.debezium.connector.mysql.BinlogReader=DEBUG, stdout log4j.logger.io.debezium.relational.history=INFO, stdout log4j.additivity.io.debezium.connector.mysql=false log4j.additivity.io.debezium.storage.kafka.history=false log4j.additivity.io.debezium.connector.mysql.BinlogReader=false ...
-
将连接器的日志级别设置为
10.3.2. 使用 Kafka Connect API 动态更改 Debezium 日志记录级别
您可以使用 Kafka Connect REST API 在运行时动态设置连接器的日志级别。与您在 log4j.properties
中设置的日志级别更改不同,您通过 API 所做的更改会立即生效,且不需要重启 worker。
您在 API 中指定的日志级别设置只适用于接收请求的端点的 worker。集群中其他 worker 的日志级别保持不变。
在 worker 重启后,指定级别不会被保留。要对日志级别进行持久更改,请通过 配置日志记录器 或添加 映射的诊断上下文 来设置 log4j.properties
中的日志级别。
流程
通过将 PUT 请求发送到指定以下信息的
admin/loggers
端点来设置日志级别:- 您要更改日志级别的软件包。
要设置的日志级别。
curl -s -X PUT -H "Content-Type:application/json" http://localhost:8083/admin/loggers/io.debezium.connector.<connector_package> -d '{"level": "<log_level>"}'
例如,要记录 Debezium MySQL 连接器的调试信息,请将以下请求发送到 Kafka Connect:
curl -s -X PUT -H "Content-Type:application/json" http://localhost:8083/admin/loggers/io.debezium.connector.mysql -d '{"level": "DEBUG"}'
10.3.3. 通过添加映射的诊断上下文来更改 Debezium 日志记录级别
大多数 Debezium 连接器(和 Kafka Connect worker)使用多个线程来执行不同的活动。这可能会导致难以查看日志文件,并只查找这些日志消息以了解特定的逻辑活动。要使日志消息更容易查找,Debezium 提供了几个 映射的诊断上下文 (MDC),为每个线程提供额外的信息。
Debezium 提供以下 MDC 属性:
dbz.connectorType
-
连接器类型的短别名。例如,
MySql
、Mongo
、Postgre 等等。与 同一类型的 连接器关联的所有线程都使用相同的值,因此您可以使用它来查找由给定类型的连接器生成的所有日志消息。
dbz.connectorName
-
连接器或数据库服务器的名称,如连接器配置中定义的。例如,
产品
、serverA
等。与特定 连接器实例 关联的所有线程都使用相同的值,以便您可以找到特定连接器实例生成的所有日志消息。 dbz.connectorContext
-
作为连接器任务中运行的独立线程运行的活动的短名称。例如,
主
、binlog
、快照
等等。在某些情况下,当连接器为特定资源(如表或集合)分配线程时,可以使用该资源的名称。与连接器关联的每个线程都使用不同的值,以便您可以找到与此特定活动关联的所有日志消息。
要为连接器启用 MDC,您可以在 log4j.properties
文件中配置附加程序。
流程
-
打开
log4j.properties
文件。 配置附加程序以使用任何受支持的 Debezium MDC 属性。
在以下示例中,
stdout
附加程序配置为使用这些 MDC 属性:log4j.properties
... log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p %X{dbz.connectorType}|%X{dbz.connectorName}|%X{dbz.connectorContext} %m [%c]%n ...
上例中的配置会生成类似于以下输出中的日志消息:
... 2017-02-07 20:49:37,692 INFO MySQL|dbserver1|snapshot Starting snapshot for jdbc:mysql://mysql:3306/?useInformationSchema=true&nullCatalogMeansCurrent=false&useSSL=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull with user 'debezium' [io.debezium.connector.mysql.SnapshotReader] 2017-02-07 20:49:37,696 INFO MySQL|dbserver1|snapshot Snapshot is using user 'debezium' with these MySQL grants: [io.debezium.connector.mysql.SnapshotReader] 2017-02-07 20:49:37,697 INFO MySQL|dbserver1|snapshot GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'debezium'@'%' [io.debezium.connector.mysql.SnapshotReader] ...
日志中的每一行都包含连接器类型(如
MySQL
)、连接器的名称(如dbserver1),
以及线程的活动(如快照
)。