08_ProxySQL配置之查询日志
备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入
~
~
一、查询日志[Query Logging]
ProxySQL能够记录通过它的查询语句(所有语句,这里统称为查询语句-queries)。日志的配置是跟随查询规则一起配置的,这将允许日志记录变得宽泛或
是详细。
二、建立日志[Setup]
1、首先,全局启用日志记录功能。
Admin> SELECT * FROM global_variables WHERE variable_name = 'mysql-eventslog_filename';
+--------------------------+----------------+
| variable_name | variable_value |
+--------------------------+----------------+
| mysql-eventslog_filename | |
+--------------------------+----------------+
1 row in set (0.00 sec)
Admin> SET mysql-eventslog_filename='queries.log';
Query OK, 1 row affected (0.00 sec)
Admin> SELECT * FROM global_variables WHERE variable_name = 'mysql-eventslog_filename';
+--------------------------+----------------+
| variable_name | variable_value |
+--------------------------+----------------+
| mysql-eventslog_filename | queries.log |
+--------------------------+----------------+
1 row in set (0.00 sec)
备注:改日志文件queries.log将在datadir目录下生成。
2、将配置加载到RUNTIME层并持久化到DISK层
Admin> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
Admin> SAVE MYSQL VARIABLES TO DISK;
Query OK, 110 rows affected (0.00 sec)
3、接下来,按需求创建查询规则以匹配日志记录。
如果需要记录所有查询,可以使用一个如下简单的规则:
Admin> SELECT * FROM mysql_query_rules ;
Empty set (0.00 sec)
Admin> INSERT INTO mysql_query_rules (rule_id, active, match_digest, log,apply) VALUES (1,1,'.',1,0);
Query OK, 1 row affected (0.00 sec)
Admin> SELECT * FROM mysql_query_rules \G;
*************************** 1. row ***************************
rule_id: 1
active: 1
username: NULL
schemaname: NULL
flagIN: 0
client_addr: NULL
proxy_addr: NULL
proxy_port: NULL
digest: NULL
match_digest: .
match_pattern: NULL
negate_match_pattern: 0
re_modifiers: CASELESS
flagOUT: NULL
replace_pattern: NULL
destination_hostgroup: NULL
cache_ttl: NULL
cache_empty_result: NULL
cache_timeout: NULL
reconnect: NULL
timeout: NULL
retries: NULL
delay: NULL
next_query_flagIN: NULL
mirror_flagOUT: NULL
mirror_hostgroup: NULL
error_msg: NULL
OK_msg: NULL
sticky_conn: NULL
multiplex: NULL
gtid_from_hostgroup: NULL
log: 1
apply: 0
comment: NULL
1 row in set (0.00 sec)
4、使规则保持活跃和持久
Admin> LOAD MYSQL QUERY RULES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
Admin> SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.06 sec)
三、读取记录的查询日志[Reading Logged Queries]
查询信息是以二进制格式记录的。在源码安装包中包含一个eventslog_reader_sample应用程序,可以读取二进制文件并输出纯文本(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
工具程序构建过程示例:
1)下载源码包
2)切换到工具目录
3)执行 make
四、相关问题和功能请求[Related Issues and Feature Requests]
以下是有关此功能的一些相关讨论。
1)Issue #561 -- 记录所有查询。
https://github.com/sysown/proxysql/issues/561
2)Feature Request #871 --以JSON 格式记录,以支持Splunk/ElasticStack。
https://github.com/sysown/proxysql/issues/871
3)Feature Request #1184 --记录到嵌入式数据库
https://github.com/sysown/proxysql/issues/1184
~
~
完毕!