欢迎光临
我们一直在努力

ProxySQl 连接池 php使用Prometheus监控ProxySQL,okhttp连接池使用

最近需要把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即可。

参考

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。