ProxySQL官方文档之Audit Log
概览
proxy SQL审计日志特性,引进于2.0.5版本,跟踪数据库整体架构的连接活动。可以通过配置mysql-auditlog_filename变量启用。(默认是空字符串,也就是不记录日志-no logging)。
配置变量
| variable | description | default |
|---|---|---|
| mysql-auditlog_filename | 审计日志的基础名称,后面会加8位渐进数字,比如00001,00002 | " " |
| mysql-auditlog_filesize | 文件轮转的达到多大会进行轮转(bytes) | 104857600(100MB) |
配置该变量方式如下:
bash
set mysql-auditlog_filename='proxysql-audit';
load mysql variables to runtime;
save mysql variables to disk;
Logged Event
审计日志会记录如下信息:
MySQL模块:
- Successful/failed authentication:验证成功或者失败的信息
- gracefule disconnect:关闭连接前会完成所有的数据传输,确保正常结束通信。这种断联信息也会记录
- closed connection:proxy SQL或者后端数据库主动关闭连接的信息。
- schema changes(COM_INIT_DB),切换数据库的信息,比如登录到A,数据库,执行了use b,该信息也会被记录。
Admin模块
- Successful/failed authentication:验证成功或者失败的信息
- gracefule disconnect:关闭连接前会完成所有的数据传输,确保正常结束通信。这种断联信息也会记录
- closed connection:proxy SQL或者后端数据库主动关闭连接的信息。
Event类型
| Event | Description |
|---|---|
| MySQL_Client_Connect_OK | 客户端成功连接事件 |
| MySQL_Client_Connect_ERR | 客户端连接失败事件 |
| MySQL_Client_Close | 服务端关闭连接事件 |
| MySQL_Client_Quit | 客户端关闭连接事件 |
| MySQL_Client_Init_DB | 切换schema事件 |
| Admin_Connect_OK | admin成功连接proxysql事件 |
| Admin_Connect_ERR | admin连接失败proxysql事件 |
| Admin_Close | admin被服务端关闭连接事件 |
| Admin_Quit | admin客户端主动退出连接事件 |
JSON日志格式
每一个日志记录包含的信息如下:
| Field | Description |
|---|---|
| client_addr | 客户端IP:Port |
| proxy_addr | ProxySQL绑定的对外服务的接口(IP地址) (仅针对MySQL模块) |
| event | 连接事件类型 |
| username | 连接的用户 |
| schemaname | 数据库名 |
| ssl | 是否启用SSL |
| thread_id | 会话标识符 |
| timestamp / time | 毫秒级的事件发生时间的记录 |
| creation_time | 会创建会话时,信息仅在会话关闭时可用 |
| duration | duration: 创建会话以来的时间(以毫秒为单位),此信息仅在会话关闭时可用当(前断开时间 - creation_time) |
| extra_info | 额外的信息,当前仅用于描述会话在代码的哪一部分关闭 |
markup
creation_time: 创建会话时,信息仅在会话关闭时可用
理解:这是"出生证明",但只有在"死亡证明"(关闭日志)开具时,才会被补填上去。
为什么这样设计?
节省资源:如果在每条查询日志里都记录"我是几点出生的",会浪费存储空间和 I/O。
复盘需求:只有当连接断开时,我们才需要复盘"这个连接总共活了多久?"、"它是什么时候建立的?"。这时候把开始时间填在最后一行日志里,是最经济高效的做法。
用法:
当你看到一条 COM_QUIT 或断开的日志,查看 creation_time,就能算出这个连接存在了多久。
如果 creation_time 是几天前,而业务早已重启,说明发生了连接泄漏(应用没关连接,被 ProxySQL 强制切断或超时切断)。