5.3. 配置 Debezium 日志记录
默认情况下,Debezium 连接器将所有 INFO
、WARN
和 ERROR
消息写入控制台。您可以使用以下方法之一更改默认日志配置:
您可以使用其他方法通过 Log4j 配置 Debezium 日志记录。如需更多信息,请搜索有关设置和使用附加器将日志消息发送到特定目的地的教程。
5.3.1. 通过配置日志记录器来更改 Debezium 日志记录级别
默认 Debezium 日志记录级别提供足够的信息,以显示连接器是否健康。但是,如果连接器不健康,您可以更改其日志级别来排除这个问题。
通常,Debezium 连接器将其日志消息发送到与生成日志消息的 Java 类完全限定名称匹配的日志记录器。Debezium 使用软件包来组织具有相似或相关功能的代码。这意味着,您可以控制特定类或特定软件包内或所有类的所有日志消息。
流程
-
打开
connect-log4j.properties
文件。 为连接器配置日志记录器。
以下示例为 MySQL 连接器和连接器使用的数据库模式历史记录实施配置日志记录器,并将它们设置为 log
DEBUG
级别信息:
例 5.2. connect-log4j.properties 配置来启用日志记录器,并将日志级别设置为
DEBUG
... 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 ...
表 5.2. 启用日志记录器并设置日志级别的 connect-log4j.properties 设置的描述 属性 描述 1
配置名为
io.debezium.connector.mysql
的日志记录器,以将DEBUG
、INFO
、WARN
和ERROR
消息发送到stdout
附加器。2
配置名为
io.debezium.relational.history
的日志记录器,以将DEBUG
、INFO
、WARN
和ERROR
消息发送到stdout
附加器。3
此
log4j. additivity.io
条目对禁用添加性。如果您使用多个附加器,请将additivity
值设置为false
,以防止将重复的日志消息发送到父日志记录器的附加者中。如有必要,更改连接器中类的特定子集的日志记录级别。
增加整个连接器的日志级别会增加日志详细程度,这可能会造成难以了解发生的情况。在这些情况下,您只能为与您要故障排除的问题相关的类子集更改日志级别。
-
将连接器的日志级别设置为
DEBUG
或TRACE
。 查看连接器的日志消息。
查找与您要故障排除相关的问题相关的日志消息。每个日志消息的末尾显示生成消息的 Java 类的名称。
-
将连接器的日志记录级别重新设置为
INFO
。 为您确定的每个 Java 类配置日志记录器。
例如,如果您不确定为什么 MySQL 连接器在处理 binlog 时跳过一些事件的情况。您可以把连接器的日志级别保持在
INFO
状态,然后仅对读取 binlog 的类配置DEBUG
或TRACE
,而不是为整个连接器打开DEBUG
或TRACE
日志:例 5.3. connect-log4j.properties 配置,为
BinlogReader
类启用DEBUG
日志记录... 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 ...
-
将连接器的日志级别设置为
5.3.2. 使用 Kafka Connect API 动态更改 Debezium 日志记录级别
您可以使用 Kafka Connect REST API 在运行时动态设置连接器的日志级别。与您在 connect-log4j.properties
中设置的日志级别更改不同,您通过 API 所做的更改会立即生效,不需要重启 worker。
您在 API 中指定的日志级别设置只适用于接收请求的端点的 worker。集群中的其他 worker 的日志级别保持不变。
在 worker 重启后,指定的级别不会被保留。要对日志记录级别进行持久更改,请通过 配置日志记录器 或添加 映射的诊断上下文,在 connect-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"}'
5.3.3. 通过添加映射诊断上下文来更改 Debezium 日志记录级别
大多数 Debezium 连接器(和 Kafka Connect worker)都使用多个线程来执行不同的活动。这可能会难以查看日志文件,仅查找特定逻辑活动的日志消息。为了更轻松地查找日志消息,Debebe 提供了几个 映射的诊断上下文 (MDC),用于为每个线程提供额外的信息。
Debezium 提供以下 MDC 属性:
dbz.connectorType
-
连接器类型的简短别名。例如,
MySql
、Mongo
、Postgre
等等。与同一 类型 连接器关联的所有线程都使用相同的值,因此您可以使用它来查找给定类型连接器生成的所有日志消息。 dbz.connectorName
-
连接器配置中定义的连接器或数据库服务器的名称。例如,
产品
、serverA
等。与特定 连接器实例 关联的所有线程都使用相同的值,因此您可以找到特定连接器实例生成的所有日志消息。 dbz.connectorContext
-
作为在连接器任务中运行的独立线程运行的活动的短名称。例如,
main
、binlog
、快照
等等。在某些情况下,当连接器为特定资源(如表或集合)分配线程时,可以使用该资源的名称。与连接器关联的每个线程都使用不同的值,以便您可以找到与此特定活动关联的所有日志消息。
要为连接器启用 MDC,您可以在 connect-log4j.properties
文件中配置一个 appender。
流程
-
打开
connect-log4j.properties
文件。 配置附加器以使用任何受支持的 Debezium MDC 属性。在以下示例中,
stdout
appender 被配置为使用这些 MDC 属性。例 5.4. connect-log4j.properties 配置将
stdout
附加程序设置为使用 MDC 属性... 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)
以及线程的活动( 如快照
)。