首页 > 其他分享 >Debezium系列之:Debezium logging

Debezium系列之:Debezium logging

时间:2023-09-11 10:01:19浏览次数:44  
标签:系列 记录器 连接器 logging 日志 debezium log4j Debezium



Debezium系列之:Debezium logging

  • 一、概述
  • 二、日志记录概念
  • 三、了解默认日志记录配置
  • 四、配置日志记录
  • 1.通过配置记录器设置日志记录级别
  • 2.使用 Kafka Connect REST API 动态设置日志记录级别
  • 3.使用映射的诊断上下文设置日志记录级别
  • 五、配置 Debezium 容器镜像中的日志级别


Debezium设置日志的详细步骤可以参考博主下面这篇技术博客:

  • Debezium系列之:将Debezium的info日志、warn日志、error日志拆分到不同文件中

更多内容请阅读博主Debezium专栏,博主会持续更新Debezium专栏:

  • Debezium专栏

一、概述

Debezium 在其连接器中内置了广泛的日志记录,可以更改日志记录配置来控制哪些日志语句出现在日志中以及这些日志的发送位置。 Debezium(以及 Kafka、Kafka Connect 和 Zookeeper)使用 Java 的 Log4j 日志框架。

默认情况下,连接器在启动时会生成大量有用信息,但当连接器与源数据库保持同步时,会生成很少的日志。当连接器正常运行时,这通常是足够的,但当连接器表现异常时,这可能不够。在这种情况下,您可以更改日志记录级别,以便连接器生成更详细的日志消息,描述连接器正在执行的操作和未执行的操作。

二、日志记录概念

在配置日志记录之前,您应该了解 Log4J 记录器、日志级别和附加程序是什么。

Loggers

  • 应用程序生成的每条日志消息都会发送到特定的记录器(例如,io.debezium.connector.mysql)。记录器按层次结构排列。例如,io.debezium.connector.mysql 记录器是 io.debezium.connector 记录器的子项,io.debezium.connector 记录器是 io.debezium 记录器的子项。在层次结构的顶部,根记录器为其下面的所有记录器定义默认记录器配置。

Log levels:

应用程序生成的每条日志消息也具有特定的日志级别:

  • ERROR - 错误、异常和其他重大问题
  • WARN - 潜在的问题和问题
  • INFO - 状态和一般活动(通常数量较少)
  • DEBUG - 更详细的活动,有助于诊断意外行为
  • TRACE - 非常详细且详细的活动(通常量很大)

Appenders

  • 附加程序本质上是写入日志消息的目的地。每个附加程序都控制其日志消息的格式,使您可以更好地控制日志消息的外观。
  • 要配置日志记录,您可以为每个记录器以及应写入这些日志消息的附加程序指定所需的级别。由于记录器是分层的,因此根记录器的配置将作为其下面的所有记录器的默认配置,尽管您可以覆盖任何子(或后代)记录器。

三、了解默认日志记录配置

如果您在 Kafka Connect 进程中运行 Debezium 连接器,那么 Kafka Connect 将使用 Kafka 安装中的 Log4j 配置文件(例如 /opt/kafka/config/connect-log4j.properties)。默认情况下,该文件包含以下配置:

connect-log4j.properties

log4j.rootLogger=INFO, stdout  

log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n  
...
  • 根记录器,定义默认记录器配置。默认情况下,记录器包括 INFO、WARN 和 ERROR 消息。这些日志消息将写入 stdout 附加程序。
  • stdout 附加程序将日志消息写入控制台(而不是文件)。
  • stdout 附加程序使用模式匹配算法来格式化日志消息。
  • stdout 附加程序的模式(有关详细信息,请参阅 Log4j 文档)。

除非您配置其他记录器,否则 Debezium 使用的所有记录器都会继承 rootLogger 配置。

四、配置日志记录

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

  • 通过配置记录器设置日志记录级别
  • 使用 Kafka Connect REST API 动态设置日志记录级别
  • 通过添加映射的诊断上下文来设置日志记录级别

注意:
您还可以使用其他方法通过 Log4j 配置 Debezium 日志记录。

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

默认 Debezium 日志记录级别提供了足够的信息来显示连接器是否正常。但是,如果连接器运行状况不佳,您可以更改其日志记录级别来解决问题。

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

程序:

  • 打开 log4j.properties 文件。
  • 为连接器配置记录器。

此示例为 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  3
...
  • 1.配置名为 io.debezium.connector.mysql 的记录器以将 DEBUG、INFO、WARN 和 ERROR 消息发送到 stdout 附加程序。
  • 2.配置名为 io.debezium.relational.history 的记录器以将 DEBUG、INFO、WARN 和 ERROR 消息发送到 stdout 附加程序。
  • 3.关闭可加性,这会导致日志消息不会发送到父记录器的附加程序(这可以防止在使用多个附加程序时看到重复的日志消息)。

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

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

  • 将连接器的日志记录级别设置为 DEBUG 或 TRACE。
  • 查看连接器的日志消息。查找与您正在排除的问题相关的日志消息。每条日志消息的末尾显示生成该消息的 Java 类的名称。
  • 将连接器的日志记录级别设置回 INFO。
  • 为您识别的每个 Java 类配置一个记录器。

例如,考虑这样一种场景:您不确定 MySQL 连接器在处理 binlog 时为何跳过某些事件。您可以将连接器的日志记录级别保持为 INFO,然后仅在读取 binlog 的类上配置 DEBUG 或 TRACE,而不是为整个连接器打开 DEBUG 或 TRACE 日志记录:

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

2.使用 Kafka Connect REST API 动态设置日志记录级别

您可以使用 Kafka Connect REST API 在运行时动态设置连接器的日志记录级别。与您在 log4j.properties 中设置的日志级别更改不同,您通过 API 所做的更改会立即生效,并且不需要您重新启动工作器。

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

工作进程重新启动后,指定的级别不会保留。要对日志记录级别进行持久更改,请通过配置记录器或添加映射的诊断上下文来在 log4j.properties 中设置日志级别。

程序

  • 通过向 admin/loggers 端点发送 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"}'

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

大多数 Debezium 连接器(以及 Kafka Connect 工作线程)使用多个线程来执行不同的活动。这可能会使查看日志文件并仅查找特定逻辑活动的日志消息变得困难。为了使日志消息更容易查找,Debezium 提供了多个映射诊断上下文 (MDC),为每个线程提供附加信息。

Debezium 提供以下 MDC 属性:

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

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

程序

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

五、配置 Debezium 容器镜像中的日志级别

Zookeeper、Kafka 和 Kafka Connect 的 Debezium 容器映像都设置了 log4j.properties 文件来配置 Debezium 相关的记录器。所有日志消息都会发送到 Docker 容器的控制台(以及 Docker 日志)。日志消息也会写入 /kafka/logs 目录下的文件中。

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

还有一个选项可以覆盖其他 log4j 属性。如果要以不同方式配置 log4j.rootLogger,请使用环境变量 CONNECT_LOG4J_LOGGERS。例如,要仅记录到 stdout(不带附加程序),您可以使用 CONNECT_LOG4J_LOGGERS=INFO, stdout。您还可以使用 CONNECT_LOG4J 前缀设置其他受支持的 log4j 环境变量,通过删除 CONNECT_ 前缀、小写所有字符并将所有“_”字符转换为“.”,这些变量将映射到 log4j.properties 文件中的属性。

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

...
COPY log4j.properties $KAFKA_HOME/config/log4j.properties
...


标签:系列,记录器,连接器,logging,日志,debezium,log4j,Debezium
From: https://blog.51cto.com/u_12080573/7432221

相关文章

  • Debezium系列之:发布Debezium 2.3.0.Final
    Debezium系列之:发布Debezium2.3.0.Final一、重大变化1.PostgreSQL/MySQL安全连接更改2.JDBC存储编码更改二、新功能和改进1.DebeziumServer支持K8s2.新的通知子系统3.新的可扩展信号子系统4.JMX信号和通知集成5.新的JDBC存储子系统6.PostgreSQL流式传输的恰好一次传送7.......
  • Iceberg从入门到精通系列之四:详细整理出Iceberg支持的字段类型,创建包含所有类型的表,并
    Iceberg从入门到精通系列之四:详细整理出Iceberg支持的字段类型,创建包含所有类型的表,并插入数据一、Iceberg表支持的字段类型二、创建包含所有类型的表三、插入数据一、Iceberg表支持的字段类型BOOLEANTINYINTSMALLINTINTEGERBIGINTFLOATDOUBLEDECIMALDATETIMESTAMPSTRINGUUIDFIXE......
  • Debezium系列之:Debezium 通知
    Debezium系列之:Debezium通知一、概述二、Debezium通知格式三、可用的通知四、启用Debezium通知五、访问DebeziumJMX通知六、自定义通知渠道七、配置自定义通知渠道八、Debezium核心模块依赖项九、部署自定义通知渠道十、配置连接器以使用自定义通知通道一、概述Debezium......
  • SonarQube系列-架构与外部集成
    介绍Sonar是一个代码质量管理的开源平台,基于Java开发的,用于管理源代码的质量,通过插件形式,可以支持包括java、C#、JavaScript等二十余种编程语言的代码质量管理与检测。它具有免费的社区版本和其他付费版本。SonarQube之采购选型参考利用SonarQube的主要好处是:它集成了数千种......
  • MySQL入门系列7-多表查询
    在我们日常开发中,表与表之间的关系通常分为以下几种:一对多(多对一)、’多对多、一对一。一、一对多(多对一)我们之前的部门和员工表就是一个一对多的关系,一个部门有多个员工,部门就是一方,员工就是多方。员工表的外键关联了部门表二、多对多学生和课程的关系可以理解为多对多的关系,......
  • 【愚公系列】2023年09月 WPF控件专题 DockPanel控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • Java实现关系型数据库工具类JdbcUtils系列九:通用DAO
    Java实现关系型数据库工具类JdbcUtils系列九:通用DAO一、创建对应数据库表的实体类二、数据库连接池Druid工具类三、DAO类四、BaseDAO五、DatabaseInfoDao六、通用DAO测试类一、创建对应数据库表的实体类数据库表结构CREATETABLE`databaseInfo`(`id`bigint(11)NOTNULLAU......
  • 深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel
    深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel文档库openpyxl一、Python安装openpyxl二、Pycharm为项目安装openpyxl一、Python安装openpyxlpip3installopenpyxlCollectingopenpyxlDownloadingopenpyxl-3.0.9-py2.py3-none-any.whl......
  • Python系列之:argparse和vars
    Python系列之:argparse和vars一、argparse用法示例二、add_argument()方法常用参数详解三、vars用法示例一、argparse用法示例argparse是Python模块,主要用于命令行选项、参数和子命令解析器。vars是Python模块,主要用于返回对象object的属性和属性值的字典对象第一步:创建解析器Arg......
  • debezium报错:no longer available on the server. Reconfigure the connector to use
    debezium报错:nolongeravailableontheserver.Reconfiguretheconnectortouseasnapshotwhenneede完整报错如下:-“trace”:"io.debezium.DebeziumException:TheconnectoristryingtoreadbinlogstartingatSourceInfo[currentGtid=null,currentBinlogFilename......