5.3. 配置 Debezium 日志记录


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

注意

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

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

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

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

流程

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

    以下示例为 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 的日志记录器,以将 DEBUGINFOWARNERROR 消息发送到 stdout 附加器。

    2

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

    3

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

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

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

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

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

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

      例如,如果您不确定为什么 MySQL 连接器在处理 binlog 时跳过一些事件的情况。您可以把连接器的日志级别保持在 INFO 状态,然后仅对读取 binlog 的类配置 DEBUGTRACE,而不是为整个连接器打开 DEBUGTRACE 日志:

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

要为连接器启用 MDC,您可以在 connect-log4j.properties 文件中配置一个 appender。

流程

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.