ProxySQL手册_08查询日志

转载来自 骏马金龙 https://www.junmajinlong.com

ProxySQL可以将所有途经ProxySQL的查询记录日志。它们的日志是通过查询规则进行配置的,所以可以记录的粒度可以很大、也可以很细。

Setup

首先启用全局日志配置:

SET mysql-eventslog_filename='queries.log';

然后将其加载到RUNTIME,并持久化保存到磁盘:(译注:注意,是mysql变量,不是admin变量)

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

再然后,创建查询规则来匹配想要记录的日志。如果要记录所有查询,很简单的一个设置即可:

INSERT INTO mysql_query_rules (rule_id, active, match_digest, log,apply) VALUES (1,1,'.',1,0);

如果你不信任Bob,你可以将Bob的查询过程全部记录下来:

INSERT INTO mysql_query_rules (rule_id, active, username, match_pattern, log,apply) VALUES (1, 1, 'Bob', '.', 1, 0);

最后,将修改后的配置加载到RUNTIME,并持久化到磁盘:

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

读取查询日志

查询日志的文件是二进制格式的。ProxySQL官方源码中提供了一个简单的小程序(译注:官方没有将该工具打包到rpm包),可以将这个二进制格式的日志以文本的格式输出出来。

$ ./tools/eventslog_reader_sample /var/lib/proxysql/file1.log.00001258
ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=information_schema" client="127.0.0.1:58307" HID=0 server="127.0.0.1:3306" starttime="2016-10-23 12:34:37.132509" endtime="2016-10-23 12:34:38.347527" duration=1215018us digest="0xC5C3C490CA0825C1"
select sleep(1)
ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=information_schema" client="127.0.0.1:58307" HID=0 server="127.0.0.1:3306" starttime="2016-10-23 12:41:38.604244" endtime="2016-10-23 12:41:38.813587" duration=209343us digest="0xE9D6D71A620B328F"
SELECT DATABASE()
ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=test" client="127.0.0.1:58307" HID=0 server="127.0.0.1:3306" starttime="2016-10-23 12:42:38.511849" endtime="2016-10-23 12:42:38.712609" duration=200760us digest="0x524DB8D7A9B4C132"
select aaaaaaa

https://github.com/sysown/proxysql/tree/v1.4.4/tools
要构建该简单小程序,按照以下步骤操作:

  • 克隆或下载ProxySQL源码;
  • 切换到tools目录;
  • 执行make

该功能的相关探讨

下面列出了几个和该特性有关的探讨:
Issue #561 -- Logging all queries.
Feature Request #871 -- Logging in JSON format for Splunk/ElasticStack, etc.
Feature Request #1184 -- Logging to Embedded Database.

你可能感兴趣的:(ProxySQL手册_08查询日志)