10.3. 配置 Debezium 日志记录


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

注意

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

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

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

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

流程

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

    这个示例为 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
    ...

    1
    将名为 io.debezium.connector.mysql 的日志记录器配置为向 stdout 附加程序发送 DEBUGINFOWARNERROR 消息。
    2
    将名为 io.debezium.relational.history 的日志记录器配置为向 stdout 附加程序发送 DEBUGINFOWARNERROR 消息。
    3 4
    关闭 可添加性,这会导致日志消息不会发送到父日志记录器的附加程序(这可以防止使用多个附加器时看到重复的日志消息)。
  3. 如有必要,更改连接器中类的特定子集的日志级别。

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

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

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

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

      例如,假设您不确定 MySQL 连接器在处理 binlog 时跳过一些事件的原因。您可以把连接器的日志记录保持在 INFO 中,而不是为整个连接器打开 DEBUGTRACE 日志记录,然后只对正在读取 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
      ...

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
连接器类型的短别名。例如,MySqlMongo 、Postgre 等等。与 同一类型的 连接器关联的所有线程都使用相同的值,因此您可以使用它来查找由给定类型的连接器生成的所有日志消息。
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.