开云体育官方注册网址Debezium日志

开云体育官方注册网址Debezium在其连接器中内置了大量的日志记录,您可以更改日志记录配置,以控制哪些日志语句出现在日志中,以及将这些日志发送到哪里。开云体育官方注册网址Debezium(以及Kafka、Kafka Connect和Zookeeper)使用Log4jJava日志框架。

默认情况下,连接器在启动时产生相当数量的有用信息,但是当连接器与源数据库保持同步时产生的日志非常少。开云体育电动老虎机当连接器正常工作时,这通常是足够的,但当连接器行为异常时可能还不够。在这种情况下,您可以更改日志级别,以便连接器生成更详细的日志消息,描述连接器正在做什么和没有做什么。

日志的概念

在配置日志记录之前,您应该了解什么是Log4J伐木工人日志级别,输出源是这样的。

伐木工人

应用程序产生的每个日志消息都被发送到特定的位置日志记录器(例如,io.开云体育官方注册网址debezium.connector.mysql).记录器按层次结构排列。例如,io.开云体育官方注册网址debezium.connector.mysql元素的子元素io.开云体育官方注册网址debezium.connector对象的子元素io.开云体育官方注册网址debezium记录器。在层次结构的顶端,是根记录器为它下面的所有记录器定义默认记录器配置。

日志级别

应用程序产生的每个日志消息也有一个特定的日志级别

  1. 错误-错误、异常和其他重大问题

  2. 警告-潜在的问题和问题

  3. 信息-状态和一般活动(通常是低音量)

  4. 调试-更详细的活动,将有助于诊断意外行为

  5. 跟踪-非常冗长和详细的活动(通常是非常大的音量)

输出源

一个appender本质上是写入日志消息的目的地。每个appender控制其日志消息的格式,使您可以更好地控制日志消息的外观。

要配置日志记录,您需要为每个日志记录器指定所需的级别,以及应该写入这些日志消息的appender。由于记录器是分层的,所以根记录器的配置是它下面所有记录器的默认配置,尽管您可以覆盖任何子(或后代)记录器。

理解默认的日志记录配置

如果你在Kafka Connect进程开云体育官方注册网址中运行Debezium连接器,那么Kafka Connect使用Log4j配置文件(例如,/ opt /卡夫卡/ config / connect-log4j.properties)的卡夫卡装置。默认情况下,该文件包含以下配置:

connect-log4j.properties
log4j.rootLogger=INFO, stdout(1)log4j.appender.stdout = org.apache.log4j.ConsoleAppender(2)log4j.appender.stdout.layout = org.apache.log4j.PatternLayout(3)log4j.appender.stdout.layout。ConversionPattern=[%d] %p %m (%c)%n(4)...
1 根记录器,它定义默认记录器配置。默认情况下,记录器包括信息警告,错误消息。这些日志消息被写入stdoutappender。
2 stdoutAppender将日志消息写入控制台(而不是文件)。
3. stdoutAppender使用模式匹配算法来格式化日志消息。
4 的模式stdout附录(参见Log4j文档详情)。

除非配置其他记录器,否则Debezium使用的所有记录器都会继承开云体育官方注册网址rootLogger配置。

配置日志记录

默认情况下,Debezi开云体育官方注册网址um连接器写入所有内容信息警告,错误发送到控制台的消息。您可以使用以下方法之一更改默认日志记录配置:

您还可以使用其他方法使用Log4j配置Debezium日志记录。开云体育官方注册网址有关详细信息,请搜索有关设置和使用附加器将日志消息发送到特定目的地的教程。

通过配置记录器设置日志级别

默认的Debezium日开云体育官方注册网址志级别提供了足够的信息来显示连接器是否正常。但是,如果连接器不正常,则可以更改其日志记录级别以排除问题。

通常,Debezium连开云体育官方注册网址接器将它们的日志消息发送给日志记录器,其名称与生成日志消息的Java类的完全限定名匹配。开云体育官方注册网址Debezium使用包来组织具有相似或相关功能的代码。这意味着您可以控制特定类的所有日志消息,或者特定包内或包下的所有类的日志消息。

过程
  1. 打开log4j . properties文件。

  2. 为连接器配置记录器。

    这个示例为MySQL连接器和连接器使用的数据库模式历史实现配置记录器,并将它们设置为log开云体育电动老虎机调试级别的消息:

    log4j . properties
    ...log4j.logger.io.开云体育官方注册网址debezium.connector.mysql =调试stdout(1)log4j.logger.io.开云体育官方注册网址debezium.relational.history =调试stdout(2)log4j.additivity.io.开云体育官方注册网址debezium.connector.mysql = false(3)log4j.additivity.io.开云体育官方注册网址debezium.storage.kafka.history = false(3)...
    1 配置名为io.开云体育官方注册网址debezium.connector.mysql发送调试信息警告,错误stdoutappender。
    2 配置名为io.开云体育官方注册网址debezium.relational.history发送调试信息警告,错误stdoutappender。
    3. 关闭可加性,这将导致日志消息不被发送到父日志记录器的appeners(这可以防止在使用多个appeners时看到重复的日志消息)。
  3. 如果有必要,更改连接器内类的特定子集的日志记录级别。

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

    1. 将连接器的日志级别设置为任意一个调试跟踪

    2. 检查连接器的日志消息。

      查找与您正在故障排除的问题相关的日志消息。每条日志消息的末尾显示产生该消息的Java类的名称。

    3. 将连接器的日志记录级别设置为信息

    4. 为您标识的每个Java类配置记录器。

      例如,考虑这样一个场景,您不确定为什么MySQL连接器在处理binlog时跳过了一些事件。而不是打开调试跟踪整个连接器的日志记录,您可以将连接器的日志记录级别保持为信息然后进行配置调试跟踪仅在读取binlog的类上:

      log4j . properties
      ...log4j.logger.io.开云体育官方注册网址debezium.connector.mysql=INFO, stdout log4j.logger.io.debezium.connector. binlogreader =DEBUG, stdout log4j.logger.io.debezium.relation .history=INFO, stdout log4j.additivity.io.debezium.storage.kafka.history=false log4j.additivity.io.debezium.connector. binlogreader =false…

使用Kafka Connect REST API动态设置日志级别

你可以使用Kafka Connect REST API在运行时动态地为连接器设置日志级别。不像您设置的日志级别更改log4j . properties,您通过API所做的更改立即生效,并且不需要重新启动worker。

您在API中指定的日志级别设置仅适用于接收请求的端点上的工作人员。集群中其他worker的日志级别保持不变。

工作者重新启动后,指定的级别不会被保留。若要对日志级别进行持久更改,请将日志级别设置为log4j . properties通过配置伐木工添加映射的诊断上下文

过程
  • 对象发送PUT请求来设置日志级别管理/伐木工指定以下信息的端点:

    • 要更改日志级别的包。

    • 需要设置的日志级别。

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

使用映射的诊断上下文设置日志记录级别

大多数De开云体育官方注册网址bezium连接器(和Kafka Connect worker)使用多个线程来执行不同的活动。这使得查看日志文件并仅找到特定逻辑活动的日志消息变得困难。为了使日志消息更容易找到,Debezium提供了几个日志消息开云体育官方注册网址映射的诊断上下文(MDC),为每个线程提供附加信息。

开云体育官方注册网址Debezium提供了以下MDC属性:

dbz.connectorType

连接器类型的短别名。例如,MySql蒙戈Postgres等等。所有与同一线程关联的线程类型的连接器使用相同的值,因此您可以使用它来查找给定类型的连接器产生的所有日志消息。

dbz.connectorName

连接器的配置中定义的连接器或数据库服务器的名称。开云体育电动老虎机例如产品serverA等等。所有与特定线程关联的线程连接器实例使用相同的值,这样就可以找到特定连接器实例产生的所有日志消息。

dbz.connectorContext

作为在连接器任务中运行的独立线程运行的活动的短名称。例如,主要binlog快照等等。在某些情况下,当连接器将线程分配给特定的资源(如表或集合)时,可以使用该资源的名称。与连接器关联的每个线程都将使用不同的值,因此您可以找到与此特定活动关联的所有日志消息。

为连接器启用MDC,需要在log4j . properties文件。

过程
  1. 打开log4j . properties文件。

  2. 配置一个追加器以使用任何受支持的Debezium MDC属性。开云体育官方注册网址

    在下面的示例中,使用stdoutappender被配置为使用这些MDC属性:

    log4j . properties
    ...log4j.appender.stdout.layout。ConversionPattern=%d{ISO8601} %-5p %X{dbz. connectortype}|%X{dbz. connectorname}|%X{dbz. connectorname}connectorContext} %m [%c]%n…

    配置过程中产生的日志信息类似如下所示:

    ...2017-02-07 20:49:37,692 INFO MySQL|dbserver1|snapshot jdbc: MySQL:// MySQL:3306/?userinformationschema =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正在使用用户'debezium'与这些MySQL授权:[io.开云体育官方注册网址 debezim .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),以及线程的活动(例如,快照).

在Debezium容器映像中配置日志级别开云体育官方注册网址

Zook开云体育官方注册网址eeper、Kafka和Kafka Connect的Debezium容器映像都设置好了log4j . properties文件来配置debezium相关的记录器。开云体育官方注册网址所有日志消息都被发送到Docker容器的控制台(以及Docker日志)。日志消息也被写入卡夫卡/日志目录中。

容器使用LOG_LEVEL设置根日志记录器的日志级别的环境变量。您可以使用此环境变量为容器中运行的服务设置日志级别。当启动容器并将此环境变量的值设置为日志级别时(例如,- e LOG_LEVEL =调试),容器内的所有代码都使用该日志级别。

还有一个选项可以覆盖其他log4j属性。如果你想配置log4j.rootLogger不同的,然后使用环境变量CONNECT_LOG4J_LOGGERS.例如,只登录到标准输出(没有appender),你可以使用CONNECT_LOG4J_LOGGERS = INFO, stdout.还可以使用CONNECT_LOG4J前缀设置其他受支持的log4j环境变量,该前缀将映射到log4j . properties文件,删除CONNECT_前缀,小写所有字符,并将所有'_'字符转换为'.'。

如果您需要对日志记录配置进行更多的控制,可以在我们的基础上创建一个新的容器映像Dockerfile,复制你自己的log4j . properties文件到映像中。例如:

Dockerfile
...复制log4j。$ KAFKA_HOME / config / log4j属性。属性……