最近需要把ProxySQL加入到Prometheus的监控目标里,因此需要先整理一下ProxySQL提供的监控信息。
ProxySQL内置的统计信息
我们先通过管理接口登录进入ProxySQL:
1
mysql -u admin -P 6032 -p -h 127.0.0.1
123456789
SHOW DATABASES;
+—–+———+——————————-+
| seq | name | file |
+—–+———+——————————-+
| 0 | main | |
| 2 | disk | /var/lib/proxysql/proxysql.db |
| 3 | stats | |
| 4 | monitor | |
+—–+———+——————————-+
其中stats库中包含ProxysQL运行时抓取的统vps云服务器计信息:
12345678910111213141516
SHOW TABLES FROM stats;
+———————————–+
| tables |
+———————————–+
| global_variables |
| stats_mysql_commands_counters |
| stats_mysql_connection_pool |
| stats_mysql_connection_pool_reset |
| stats_mysql_global |
| stats_mysql_processlist |
| stats_mysql_query_digest |
| stats_mysql_query_digest_reset |
| stats_mysql_query_rules |
| stats_mysql_users |
+———————————–+
10 rows in set (0.00 sec)
需要我们重点的关注的信息都在stats_mysql_global中:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
SHOW MYSQL STATUS;(或select * from stats_mysql_global;)
+——————————+—————-+
| Variable_Name | Variable_Value |
+——————————+—————-+
| ProxySQL_Uptime | 255245 |
| Active_Transactions | 0 |
| Client_Connections_aborted | 0 |
| Client_Connections_connected | 4 |
| Client_Connections_created | 2025 |
| Server_Connections_aborted | 0 |
| Server_Connections_connected | 11 |
| Server_Connections_created | 458 |
| Client_Connections_non_idle | 4 |
| Queries_backends_bytes_recv | 6348309 |
| Queries_backends_bytes_sent | 51245678 |
| Query_Processor_time_nsec | 532924901 |
| Backend_query_time_nsec | 12057118628 |
| mysql_backend_buffers_bytes | 141824 |
| mysql_frontend_buffers_bytes | 262144 |
| mysql_session_internal_bytes | 19264 |
| Com_autocommit | 230 |
| Com_autocommit_filtered | 230 |
| Com_commit | 94 |
| Com_commit_filtered | 47 |
| Com_rollback | 18 |
| Com_rollback_filtered | 3 |
| Com_backend_change_user | 813 |
| Com_backend_init_db | 78 |
| Com_backend_set_names | 214 |
| Com_frontend_init_db | 81 |
| Com_frontend_set_names | 98 |
| Com_frontend_use_db | 9 |
| Com_stmt_prepare | 5647 |
| Com_stmt_execute | 5647 |
| Com_stmt_close | 5647 |
| Mirror_concurrency | 0 |
| Mirror_queue_length | 0 |
| Questions | 267223 |
| Slow_queries | 44 |
| Servers_table_version | 15 |
| MySQL_Thread_Workers | 4 |
| MySQL_Monitor_Workers | 8 |
| ConnPool_get_conn_immediate | 22 |
| ConnPool_get_conn_success | 248710 |
| ConnPool_get_conn_failure | 308306 |
| SQLite3_memory_bytes | 1206488 |
| ConnPool_memory_bytes | 641680 |
| Stmt_Active_Total | 0 |
| Stmt_Active_Unique | 0 |
| Stmt_Max_Stmt_id | 35 |
| Query_Cache_Memory_bytes | 0 |
| Query_Cache_count_GET | 0 |
| Query_Cache_count_GET_OK | 0 |
| Query_Cache_count_SET | 0 |
| Query_Cache_bytes_IN | 0 |
| Query_Cache_bytes_OUT | 0 |
| Query_Cache_Purged | 0 |
| Query_Cache_Entries | 0 |
+——————————+—————-+
54 rows in set (0.00 sec)连接数相关的信息:
Client_Connections_connected
Server_Connections_connected
Active_Transactions
内存相关的信息(我们不使用ProxySQL的Query Cache所以这里不关注Query Cache的信息)
ConnPool_memory_bytes
SQLite3_memory_bytes
stats_mysql_connection_pool表中包含连接池统计信息:
12345678910111213141516
select * from stats_mysql_connection_pool \G
*************************** 1. row ***************************
hostgroup: 2
srv_host: 192.168.1.3
srv_port: 3306
status: ONLINE
ConnUsed: 0
ConnFree: 2
ConnOK: 441
ConnERR: 0
Queries: 250492
Bytes_data_sent: 50056378
Bytes_data_recv: 6040259
Latency_us: 242
*************************** 2. row ***************************
……status是后端DB的状态
Queries是对后端DB的请求数
ConnUsed是对后端DB的活跃连接数
Latency_us是对后端DB请求的网络延时
stats_mysql_processlist表中包含每个用户当前的连接信息:
123456789101112131415161718
select * from stats_mysql_processlist \G
*************************** 1. row ***************************
ThreadID: 0
SessionID: 2001
user: testuser
db: testdb
cli_host: 192.168.1.3
cli_port: 59042
hostgroup: 2
l_srv_host:
l_srv_port:
srv_host:
srv_port:
command: Sleep
time_ms: 1556
info:
*************************** 2. row ***************************
……
stats_mysql_query_diges表中是对sql的统计信息:
123456789101112131415
select * from stats_mysql_query_digest \G
*************************** 1. row ***************************
hostgroup: 2
schemaname: testdb
username: testuser
digest: 0xB0288986D94B9DC2
digest_text: SELECT * FROM t_user;
count_star: 1
first_seen: 1501233427
last_seen: 1501233427
sum_time: 361
min_time: 361
max_time: 361
*************************** 2. row ***************************
……
Percona ProxySQL Exporter
有了上面这些统计信息,我们需要一个Prometheus Exporter,这样Prometheus就可以拉取监控数据了。
Percona ProxySQL Exporter是Percona提供的ProxySQL Exporter。
当前ProxySQL Exporter 1.1.0的版本支持从ProxySQL的stats_mysql_global和stats_mysql_connection_pool中收集统计信息。
ProxySQL Exporter也是Go语言写的,安装比较简单,这里是使用ansible编排的,简单贴一下我们环境中的一个ProxySQL节点上生成的systemd的单元文件:
123456789101112
[Unit]
Description=proxysql_exporter
After=network.target
[Service]
Type=simple
User=prometheus
Environment=DATA_SOURCE_NAME=stats:stats@tcp(127.0.0.1:6032)/
ExecStart=/home/prometheus/proxysql_exporter/proxysql_exporter \
-web.listen-address=:42004
Restart=on-failure
[Install]
WantedBy=multi-user.targetproxysql_exporter从环境变量DATA_SOURCE_NAME获取连接ProxySQL管理接口的dns信息,注意以stats用户连接
-web.listen-address设置proxysql_exporter的监听端口,默认为42004
接下来在Prometheus的配置文件中配置收集ProxySQL信息的Job和Instance,这里还是贴一下我们的配置文件片段,实际上这个片段也是有ansible编排生成的。
123456789101112
scrape_configs:- job_name:’proxysql’static_configs:- targets:- 192.168.1.3:42004labels:instance:proxysql1- targets:- 192.168.1.4:42004labels:instance:proxysql2
重启Prometheus之后,Prometheus就可以从proxysql_exporter中收集ProxySQL的运行时信息了。
在监控图表上我们使用的Grafana,因此可以直接使用percona PMM项目中的ProxySQL Overview,将其入到Grafana即可。
参考