xtradb cluster集群zabbix监控
监控指标
官网参考地址:
https://www.percona.com/doc/percona-xtradb-cluster/5.6/manual/monitoring.html
1、报警参数
每个集群节点状态:
wsrep_cluster_status != Primary
wsrep_connected != ON
wsrep_ready != ON
复制冲突过高
流量控制信息
复制队列大小
2、长期图表收集参数
队列大小
流量控制
本节点进出交换数量
进出交换的字节数
复制冲突
Zabbix监控脚本
[root@yang-219 ~]# cat monit_xtradb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#!/usr/bin/python env #coding=utf-8 #time: 2015-8-12 #function: monit xtradb cluster status #author: yangr import re,time,os
import commands
###variable 数据库及监控项变量定义区域 mysql_user = 'sstuser'
mysql_pass = 's3cret'
mysql_host = 'localhost'
mysql_port = '3306'
monit_message = '''
wsrep_cluster_status wsrep_connected wsrep_ready wsrep_local_cert_failures wsrep_local_bf_aborts wsrep_flow_control_sent wsrep_flow_control_recv wsrep_local_recv_queue wsrep_local_recv_queue wsrep_local_send_queue wsrep_flow_control_sent wsrep_flow_control_recv wsrep_replicated wsrep_received wsrep_replicated_bytes wsrep_received_bytes wsrep_local_cert_failures wsrep_local_bf_aborts ''' monit_list = monit_message.split()
####zabbix 相关参数定义区域 zabbix_agent_file = '/usr/local/zabbix/etc/zabbix_agentd.conf'
zabbix_server = commands.getstatusoutput( '''grep '^ServerActive' %s|awk -F[=] '{print $2}' ''' % zabbix_agent_file)[ 1 ].strip()
zabbix_hostname = commands.getstatusoutput( '''grep '^Hostname' %s|awk -F[=] '{print $2}' ''' % zabbix_agent_file)[ 1 ].strip()
zabbix_server_port = 10051
timestamp = int (time.time())
tmp_file_path = '/tmp/xtradb_cluster_status.txt'
zabbix_hostname = 'zabbix_server'
zabbix_server = 'zabbix_server'
####end variable变量定义结束 #获取全局状态信息 status,global_status = commands.getstatusoutput( ''' mysql -u%s -p%s -h%s -P%s -e 'show global status like "wsrep%%";' ''' % (mysql_user,mysql_pass,mysql_host,mysql_port))
#print ''' mysql -u%s -p%s -h%s -P%s -e 'show global status like "wsrep%%";' '''%(mysql_user,mysql_pass,mysql_host,mysql_port) #print global_status global_status = global_status.split( '\n' )
#print global_status #清空文件 with open (tmp_file_path, 'wb' ) as f:
f.write('')
#循环要监控的指标 for i in monit_list:
#循环状态列表,取出指标当前的值
for n in global_status:
if "%s\t" % i in n:
value = re.sub(r '.*\t' ,'',n).strip()
#print i,'value:',value
#把值写入临时文件
with open (tmp_file_path, 'ab' ) as f:
f.write( '%s %s %s %s\n' % (zabbix_hostname,i,timestamp,value))
#把临时文件通过zabbix_sender命令发送到server端 send_data_cmd = '/usr/local/zabbix/bin/zabbix_sender -vv -z %s -p %s -T -i %s' % (zabbix_server,zabbix_server_port,tmp_file_path)
print '/usr/local/zabbix/bin/zabbix_sender -vv -z %s -p %s -T -i %s' % (zabbix_server,zabbix_server_port,tmp_file_path)
#print send_data_cmd os.popen(send_data_cmd) |
脚本里monit_message对应的监控项,需要在zabbix服务器上添加对应的监控项,然后把这个脚本放到crontab里每分钟执行一次即可。
本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1684141,如需转载请自行联系原作者