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 配置的是默认值,表示的意思是:
开启慢查询日志;
当 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