11.3. 配置 Debezium 日志记录


默认情况下,Debezium 连接器将所有 INFOWARNERROR 消息写入控制台。您可以使用以下方法之一更改默认日志配置:

注意

您可以使用其他方法使用 Log4j 配置 Debezium 日志记录。如需更多信息,请搜索有关设置和使用附加程序将日志消息发送到特定目的地的教程。

11.3.1. 通过配置日志记录器来更改 Debezium 日志记录级别

默认 Debezium 日志记录级别提供了足够的信息来显示连接器是否健康。但是,如果连接器不健康,您可以更改其日志级别来排除这个问题。

通常,Debezium 连接器会将其日志消息发送到日志记录器,其名称与生成日志消息的 Java 类的完全限定名称匹配。Debezium 使用软件包来整理具有类似或相关功能的代码。这意味着,您可以控制特定类或特定软件包中的所有类的所有日志消息。

流程

  1. 打开 log4j.properties 文件。
  2. 为连接器配置日志记录器。

    以下示例为 MySQL 连接器和连接器使用的数据库架构历史记录实现配置日志记录器,并将其设置为 log 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
    ...

    表 11.2. log4j.properties 设置的描述
    属性描述

    1

    配置名为 io.debezium.connector.mysql 的日志记录器,将 DEBUG,INFO,WARN, 和 ERROR 消息发送到 stdout appender。

    2

    配置名为 io.debezium.relational.history 的日志记录器,以将 DEBUGINFOWARNERROR 消息发送到 stdout 附加程序。

    3

    此对 log4j.additivity.io 条目会禁用 additivity。如果您使用多个附加程序,请将 additivity 值设置为 false,以防止将重复的日志消息发送到父日志记录器的附加者。

  3. 如有必要,更改连接器中类的特定子集的日志级别。

    增加整个连接器的日志记录级别会增加日志详细程度,这可能会难以了解发生的情况。在这些情况下,您只能为与您要故障排除的问题相关的类子集更改日志级别。

    1. 将连接器的日志记录级别设置为 DEBUGTRACE
    2. 查看连接器的日志消息。

      查找与您要故障排除的问题相关的日志消息。每个日志消息的末尾显示生成消息的 Java 类的名称。

    3. 将连接器的日志记录级别设置为 INFO
    4. 为您识别的每个 Java 类配置日志记录器。

      例如,假设一个场景,您不确定为什么 MySQL 连接器在处理 binlog 时跳过某些事件。除了为整个连接器打开 DEBUGTRACE 日志记录外,您可以将连接器的日志级别保持为 INFO,然后只在读取 binlog 的类上配置 DEBUGTRACE

      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
      ...

11.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"}'

11.3.3. 通过添加映射的诊断上下文来更改 Debezium 日志记录级别

大多数 Debezium 连接器(和 Kafka Connect worker)都使用多个线程来执行不同的活动。这可能会使查看日志文件变得困难,并只查找特定逻辑活动的日志消息。为了便于查找日志消息,Debebe 提供了几个 映射的诊断上下文 (MDC),用于为每个线程提供额外的信息。

Debezium 提供以下 MDC 属性:

dbz.connectorType
连接器类型的简短别名。例如,MySqlMongoPostgre 等等。与 相同类型的 连接器关联的所有线程都使用相同的值,因此您可以使用它来查找给定类型的连接器生成的所有日志消息。
dbz.connectorName
连接器或数据库服务器的名称,如连接器配置中定义的。例如,产品serverA 等等。与特定 连接器实例 关联的所有线程都使用相同的值,以便您可以查找特定连接器实例生成的所有日志消息。
dbz.connectorContext
作为在连接器任务中运行的独立线程运行的活动的短名称。例如,binlog快照 等等。在某些情况下,当连接器为特定资源(如表或集合)分配线程时,可以改为使用该资源的名称。与连接器关联的每个线程都将使用不同的值,以便您可以查找与此特定活动关联的所有日志消息。

要为连接器启用 MDC,您可以在 log4j.properties 文件中配置附加程序。

流程

  1. 打开 log4j.properties 文件。
  2. 配置附加程序以使用任何支持的 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),以及线程的活动( 如快照)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.