开云体育官方注册网址Debezium日志
开云体育官方注册网址Debezium在其连接器中内置了大量的日志记录,您可以轻松地更改日志记录配置,以控制哪些日志语句出现在日志中,以及将这些日志发送到哪里。开云体育官方注册网址Debezium(以及Kafka, Kafka Connect和Zookeeper)使用了无处不在的Log4JJava日志框架。
默认情况下,连接器在启动时产生相当多的有用信息,但是当连接器只是与源数据库保持同步时,则产生很少的日志。开云体育电动老虎机当连接器正常工作时,这通常是足够的,但当连接器行为异常时,这可能是不够的。在这种情况下,您可以“打开调试或跟踪日志记录”,以便连接器生成更详细的日志消息,描述连接器正在做什么和没有做什么。
日志的概念
应用程序产生的每个日志消息都将被发送到一个特定的地址日志记录器。每个日志记录器都有一个名称,例如io.开云体育官方注册网址debezium.connector.mysql
,名称组成a层次结构伐木工。例如,命名为io.开云体育官方注册网址debezium.connector.mysql
父日志记录器是否已命名io.开云体育官方注册网址debezium.connector
,它的父日志记录器名为io.开云体育官方注册网址debezium
,一直到根记录器在这个层级的最顶端。
应用程序产生的每条日志消息都有一个特定的日志水平:
错误
用于错误、异常和其他重要问题警告
为潜在的问题和问题信息
-用于状态和一般活动(通常是低音量)调试
-更详细的活动,将有助于诊断意外行为跟踪
-非常冗长和详细的活动(通常是非常大的音量)
Log4J还允许您定义一个或多个输出源,它们实际上是将写入日志消息的目的地。每个appender控制其日志消息的格式,使您可以更好地控制日志消息的外观。
要配置日志记录,您需要为每个日志记录器指定所需的级别,以及应该写入这些日志消息的appender。由于记录器是分层的,所以根记录器的配置是它下面所有记录器的默认配置,尽管您可以覆盖任何子(或后代)记录器。
日志配置示例
如果你在Kafka Connect进开云体育官方注册网址程中运行Debezium连接器,那么Kafka Connect将使用Log4J配置文件(例如:配置/ 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 | 定义根日志记录器应该包含的信息 ,警告 ,错误 应写入的消息stdout appender。 |
2 | 定义了stdout 将追加器写入控制台(而不是文件)。 |
3. | 的stdout Appender为格式化程序使用模式匹配算法 |
4 | 的模式stdout 附录(参见Log4J文档详情) |
除非配置了其他记录器,否则Debezium使用的所有记录器都将继承开云体育官方注册网址rootLogger
配置。
开云体育官方注册网址Debezium伐木工
在大多数情况下,Debezium代码将其日志消开云体育官方注册网址息发送给与生成日志消息的Java类的完全限定名匹配的日志记录器。这通常工作得很好,因为我们使用包来组织具有相似或相关函数的代码。
这意味着您可以很容易地控制特定类的所有日志消息,或者特定包内或包下的所有类的日志消息。控件的调试日志记录整个MySQL连接器(以及连接器使用的数据库历史实现)开云体育电动老虎机可能非常简单,只需将以下行添加到您的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.relational.history = false(3)…
1 | 配置名为io.开云体育官方注册网址debezium.connector.mysql 发送调试 ,信息 ,警告 ,错误 致stdout appender |
2 | 配置名为io.开云体育官方注册网址debezium.relational.history 发送调试 ,信息 ,警告 ,错误 致stdout appender |
3. | 关闭可加性,意味着消息也不会被发送到父日志记录器的appeners(这可以防止在使用多个appeners时看到重复的日志消息) |
配置日志记录是一种权衡:提供的太少,不清楚发生了什么;提供太多,就很难理解发生了什么。我们的目标是信息
提供足够的信息以查看连接器是否正常(尽管日志记录不能替代监控),以及调试
Is提供更详细的信息,以帮助您了解发生了什么。但有时调试
还不够,在哪里跟踪
出现的原因。的跟踪
级别实际上是由指定的日志记录器产生的或在该日志记录器下产生的每个日志消息,它可以是大量的。
您还可以为连接器中的特定类子集配置日志记录,只需添加更多像上面那样的行(除了更特定的记录器名称)。例如,也许你不确定为什么MySQL连接器在处理binlog时跳过了一些事件。而不是打开调试
或跟踪
整个连接器的日志记录,您可以将连接器的日志记录设置为信息
然后进行配置调试
或跟踪
只在读取binlog的类上。例如:
…log4j.logger.io.开云体育官方注册网址debezium.connector.mysql = INFO, stdout(1)log4j.logger.io.开云体育官方注册网址debezium.connector.mysql.BinlogReader =调试stdout(1)log4j.logger.io.开云体育官方注册网址debezium.relational.history = INFO, stdout(2)log4j.additivity.io.开云体育官方注册网址debezium.connector.mysql = false(3)log4j.additivity.io.开云体育官方注册网址debezium.relational.history = false(3)log4j.additivity.io.开云体育官方注册网址debezium.connector.mysql.BinlogReader = false(3)…
这需要更多关于代码的知识,但这里有一个有用的技巧。第一次开机调试
或跟踪
整个连接器的日志记录(甚至io.开云体育官方注册网址debezium
package),找到最有用的消息,并查看日志消息的末尾,以查看产生该消息的Java类的名称。然后,将连接器的日志记录转回信息
和添加每个“有趣的”类或包的记录器配置。如果有一些类不希望看到详细的日志消息,请为这些类添加另一个记录器配置,并将它们设置为信息
。
我们刚刚介绍了Log4J的强大功能,因此如果您想要更多的控制,请参阅一些关于如何设置和使用其他附加程序将不同的日志消息发送到特定目的地的教程。
映射诊断上下文
大多数De开云体育官方注册网址bezium连接器使用多线程来执行不同的活动,Kafka Connect worker也使用多线程。这使得查看日志文件并仅为这些逻辑活动之一找到那些日志消息变得很困难。为了简化这一点,Debezium使用了开云体育官方注册网址映射的诊断上下文,或争取民主变革运动通过几个属性为每个线程提供额外的信息,你可以嵌入到你的appender模式:
dbz.connectorType
—连接器类型的短别名。例如,MySql
,蒙戈
,Postgres
等。所有与同一线程关联的线程类型的连接器使用相同的值,因此您可以使用它来查找给定类型的连接器产生的所有日志消息。dbz.connectorName
-连接器配置中定义的连接器或数据库服务器的名称。开云体育电动老虎机例如产品
,serverA
等。所有与特定线程关联的线程连接器实例使用相同的值,这样就可以找到特定连接器实例产生的所有日志消息。dbz.connectorContext
-作为在连接器的任务中运行的独立线程运行的活动的简短名称。例如,主要
,binlog
,快照
等。在某些情况下,当连接器将线程分配给特定的资源(例如,表或集合)时,可以使用该资源的名称。与连接器关联的每个线程都将使用不同的值,因此您可以找到与此特定活动关联的所有日志消息。
类中定义的追加器模式中可以使用这些属性log4j . properties
文件。例如,下面是对stdout
使用这些MDC属性的appender布局:
…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 Docker图像
Zook开云体育官方注册网址eeper、Kafka和Kafka Connect的Debezium Docker镜像都设置好了log4j . properties
文件来配置debezui相关的日志记录器,并开云体育官方注册网址确保所有日志消息都进入Docker容器控制台(因此也包括Docker日志),并被写入到卡夫卡/日志
目录,您可以挂载该目录以方便地访问这些文件。
容器使用LOG_LEVEL
设置根日志记录器的日志级别的环境变量。因此,在启动容器时,只需将此环境变量设置为其中一个日志级别(例如,- e LOG_LEVEL =调试
),容器内的所有代码将开始使用该日志级别。
如果你需要更多的控制,在我们的基础上创建一个新的图像,除了你的Dockerfile
复制你自己的log4j . properties
文件进入图像:
…复制log4j。$ KAFKA_HOME / config / log4j属性。属性……