Logo
日志管理

DBPlusEngine-Driver 使用 Agent 实现对日志采集功能 #

慢查询日志 #

背景信息

慢查询日志功能,用于将执行耗时超过一定时间的 SQL 语句进行记录,便于 DBA 和开发人员识别可能存在问题的 SQL 语句,是数据库和 SQL 管理的重要参考来源。

参数解释

  • slow-query-log:是否开启慢查询日志功能,默认值为 true。
  • long-query-time:慢查询时间阈值,执行耗时超过该阈值的 SQL 语句才会被记入慢查询日志中。该配置单位为毫秒(ms),默认值为 5000。

前提条件

  • Agent 使用 SLF4J 进行日志桥接输出,所以要求应用程序存在 SLF4J 依赖,并有相关日志输出配置。
  • 慢查询日志功能基于 Agent 技术实现,需要应用程序在启动时配置 javaagent 开启 Agent。

配置示例

  • Agent 配置

conf/agent.yaml 为 Agent 配置文件,默认配置如下。

plugins:
  logging:
    BaseLogging:
      props:
        slow-query-log: true
        long-query-time: 5000

其中,slow-query-log 和 long-query-time 配置的是默认值,表示的意思是:

  1. 开启慢查询日志;

  2. 当 SQL 执行耗时超过 5000 毫秒时,记录慢查询日志。

  • 应用程序日志配置

以常用的 logback 作为日志输出为例,配置如下。

<configuration>
    <property name="log.context.name" value="project-using-DBPlusEngine-Driver" />
    <property name="log.charset" value="UTF-8" />
    <property name="log.pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n" />
    <contextName>${log.context.name}</contextName>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="${log.charset}">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
  
    <logger name="SLOW-QUERY" level="info" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
    
    <root>
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

说明: 慢日志输出的 logger name 为 SLOW-QUERY

慢查询日志格式

db: {database name} query_time: {query time} sql_type: {sql type}

{sql}

  • db:数据库名称;
  • query_time:SQL 执行耗时,单位为 ms;
  • sql_type:SQL 类型,(SELECT,INSERT,UPDATE,DELETE,OTHER 其他类型);
  • sql:执行的具体 SQL 语句;

例如:

[WARN ] 2023-01-04 14:55:04.035 [http-nio-8888-exec-7] SLOW-QUERY - db: sharding_db query_time: 21 sql_type: SELECT
SELECT  id,user_id,uuid,status,create_time,update_time,is_deleted AS deleted  FROM t_order

全量审计日志 #

背景信息

全量审计日志,是指开启该功能后,系统将记录所有执行的 SQL 语句,并包含语句对应的数据库、执行耗时、SQL 类型等信息,便于企业进行审计操作。

参数解释

  • general-query-log:全量审计日志仅有一个参数,值为 true 时启用全量日志,值为 false 时停用该功能。

前提条件

  • Agent 使用 SLF4J 进行日志桥接输出,所以要求应用程序存在 SLF4J 依赖,并有相关日志输出配置。

  • 全量审计日志功能基于 Agent 技术实现,需要应用程序在启动时配置 javaagent 开启 Agent。 配置示例

  • Agent 配置

conf/agent.yaml 为 Agent 配置文件,默认配置如下。

plugins:
  logging:
    BaseLogging:
      props:
        general-query-log: true

说明: general-query-log 为 true 时代表开启全量审计日志,为 false 时代表停用全量审计日志。以启动时配置值为准。

  • 应用程序日志配置

以常用的 logback 作为日志输出为例,配置如下。

<configuration>
    <property name="log.context.name" value="project-using-DBPlusEngine-Driver" />
    <property name="log.charset" value="UTF-8" />
    <property name="log.pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n" />
    <contextName>${log.context.name}</contextName>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="${log.charset}">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
  
    <logger name="GENERAL-QUERY" level="info" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
    
    <root>
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

说明: 全量审计日志输出的 logger name 为 GENERAL-QUERY

全量审计日志格式

db: {database name} query_time: {query time} sql_type: {sql type}

{sql}

  • db:数据库名称;
  • query_time:SQL 执行耗时,单位为 ms;
  • sql_type:SQL 类型,(SELECT,INSERT,UPDATE,DELETE,OTHER 其他类型);
  • sql:执行的具体 SQL 语句;

例如:

[INFO ] 2023-01-04 14:55:04.035 [http-nio-8888-exec-7] GENERAL-QUERY - db: sharding_db query_time: 21 sql_type: SELECT
SELECT  id,user_id,uuid,status,create_time,update_time,is_deleted AS deleted  FROM t_order