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
~
~
完畢!