- ProxySQL를 사용하는 곳에서 하루 동안 실행되는 Query의 빈도수 체크를 하고 싶어 했다.
- ProxySQL의 경우 ProxySQL로 들어오는 Query에 대한 통계를 저장하는 Table이 존재한다.
- Python을 이용하여 하루동안 실행되는 Query를 저장 DB에 Insert 하는 것을 짜보자
■ Query_check.py
1. ### SELECT STATE
- ProxySQL에서 하루동안 실행되는 Query를 Select 해 온다.
2. ### Insert Zabbix
- ### IF EXISTS QUERY IN ZABBIX SERVER : 저장 DB에 ProxySQL에서 가져온 쿼리가 존재한다면
- ### IF NOT EXISTS QUERY IN ZABBIX SERVER == NEW QUERY INSERTED TO PROXYSQL SERVER : 저장 DB에 ProxySQL에서 가져온 쿼리가 존재하지 않는다면
[root@db-proxy001 ~]# cat yun.py
#!/bin/python2
import pymysql
import sys
import os
#### SELECT STATE
db=pymysql.connect(
user='admin',
password='admin',
host='localhost',
port=6032
)
cursor = db.cursor()
sql="select hostgroup,schemaname,username,digest_text,min_time,max_time,count_star from stats_mysql_query_digest where username='gseek' and digest_text !='select ?' and digest_text !='COMMIT' and digest_text !='set autocommit=?' order by 7 desc;"
cursor.execute(sql)
result=cursor.fetchall()
db.close
#### Insert Zabbix
zabbix=pymysql.connect(
user='monitor',
password='monitor',
host='192.168.100.182',
db='gm_state',
port=3306
)
cursor = zabbix.cursor()
select_sql="select exec_count_tot from proxy_query_digest where username='gseek' and curdate > date_add(now(), interval -10 MINUTE) and digest_text like %s"
for (a,b,c,d,e,f,g) in result:
print('%'+d+'%')
cursor.execute(select_sql,('%'+d+'%'))
result=cursor.fetchall()
### IF EXISTS QUERY IN ZABBIX SERVER
if len(result) != 0:
print(result[0])
as_is_cnt=map(int,result[0])
exec_count=int(g) - as_is_cnt[0]
print(exec_count)
insert1_sql = "insert into proxy_query_digest(hostgroup,schemaname,username,digest_text,min_time,max_time,exec_count_tot,exec_count,curdate) values (%s,%s,%s,%s,%s,%s,%s,%s,now());"
cursor.execute(insert1_sql,(a,b,c,d,e,f,g,exec_count))
### IF NOT EXISTS QUERY IN ZABBIX SERVER == NEW QUERY INSERTED TO PROXYSQL SERVER
else:
insert1_sq2 = "insert into proxy_query_digest(hostgroup,schemaname,username,digest_text,min_time,max_time,exec_count_tot,curdate) values (%s,%s,%s,%s,%s,%s,%s,now());"
cursor.execute(insert1_sq2,(a,b,c,d,e,f,g))
zabbix.commit()
zabbix.close()
■ 참조
https://blog.naver.com/PostView.naver?blogId=theswice&logNo=221297469749&parentCategoryNo=&categoryNo=44&viewDate=&isShowPopularPosts=false&from=postList