天天看点

Xtradb+Haproxy高可用数据库集群(四)集群zabbix监控篇 xtradb cluster集群zabbix监控

官网参考地址:

https://www.percona.com/doc/percona-xtradb-cluster/5.6/manual/monitoring.html

1、报警参数

每个集群节点状态:

复制冲突过高

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_local_cert_failures" target="_blank">wsrep_local_cert_failures</a>

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_local_bf_aborts" target="_blank">wsrep_local_bf_aborts</a>

流量控制信息

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_flow_control_sent" target="_blank">wsrep_flow_control_sent</a>

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_flow_control_recv" target="_blank">wsrep_flow_control_recv</a>

复制队列大小

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_local_recv_queue" target="_blank">wsrep_local_recv_queue</a>

2、长期图表收集参数

队列大小

流量控制

本节点进出交换数量

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_replicated" target="_blank">wsrep_replicated</a>

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_received" target="_blank">wsrep_received</a>

进出交换的字节数

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_replicated_bytes" target="_blank">wsrep_replicated_bytes</a>

<a href="https://www.percona.com/doc/percona-xtradb-cluster/5.6/wsrep-status-index.html#wsrep_received_bytes" target="_blank">wsrep_received_bytes</a>

复制冲突

[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

<code>#!/usr/bin/python env</code>

<code>#coding=utf-8</code>

<code>#time: 2015-8-12</code>

<code>#function: monit xtradb cluster status</code>

<code>#author: yangr</code>

<code> </code> 

<code>import</code> <code>re,time,os</code>

<code>import</code> <code>commands</code>

<code>###variable   数据库及监控项变量定义区域</code>

<code>mysql_user</code><code>=</code><code>'sstuser'</code>

<code>mysql_pass</code><code>=</code><code>'s3cret'</code>

<code>mysql_host</code><code>=</code><code>'localhost'</code>

<code>mysql_port</code><code>=</code><code>'3306'</code>

<code>monit_message</code><code>=</code><code>'''</code>

<code>wsrep_cluster_status</code>

<code>wsrep_connected</code>

<code>wsrep_ready</code>

<code>wsrep_local_cert_failures</code>

<code>wsrep_local_bf_aborts</code>

<code>wsrep_flow_control_sent</code>

<code>wsrep_flow_control_recv</code>

<code>wsrep_local_recv_queue</code>

<code>wsrep_local_send_queue</code>

<code>wsrep_replicated</code>

<code>wsrep_received</code>

<code>wsrep_replicated_bytes</code>

<code>wsrep_received_bytes</code>

<code>'''</code>

<code>monit_list</code><code>=</code><code>monit_message.split()</code>

<code>####zabbix 相关参数定义区域</code>

<code>zabbix_agent_file</code><code>=</code><code>'/usr/local/zabbix/etc/zabbix_agentd.conf'</code>

<code>zabbix_server</code><code>=</code><code>commands.getstatusoutput(</code><code>'''grep '^ServerActive' %s|awk -F[=] '{print $2}' '''</code><code>%</code><code>zabbix_agent_file)[</code><code>1</code><code>].strip()</code>

<code>zabbix_hostname</code><code>=</code><code>commands.getstatusoutput(</code><code>'''grep '^Hostname' %s|awk -F[=] '{print $2}'  '''</code><code>%</code><code>zabbix_agent_file)[</code><code>1</code><code>].strip()</code>

<code>zabbix_server_port</code><code>=</code><code>10051</code>

<code>timestamp </code><code>=</code> <code>int</code><code>(time.time())</code>

<code>tmp_file_path</code><code>=</code><code>'/tmp/xtradb_cluster_status.txt'</code>

<code>zabbix_hostname</code><code>=</code><code>'zabbix_server'</code>

<code>zabbix_server</code><code>=</code><code>'zabbix_server'</code>

<code>####end variable变量定义结束</code>

<code>#获取全局状态信息</code>

<code>status,global_status</code><code>=</code><code>commands.getstatusoutput(</code><code>''' mysql -u%s -p%s -h%s -P%s -e 'show global status like "wsrep%%";' '''</code><code>%</code><code>(mysql_user,mysql_pass,mysql_host,mysql_port))</code>

<code>#print ''' mysql -u%s -p%s -h%s -P%s -e 'show global status like "wsrep%%";' '''%(mysql_user,mysql_pass,mysql_host,mysql_port)</code>

<code>#print global_status</code>

<code>global_status</code><code>=</code><code>global_status.split(</code><code>'\n'</code><code>)</code>

<code>#清空文件</code>

<code>with </code><code>open</code><code>(tmp_file_path,</code><code>'wb'</code><code>) as f:</code>

<code>         </code><code>f.write('')</code>

<code>#循环要监控的指标</code>

<code>for</code> <code>i </code><code>in</code> <code>monit_list:</code>

<code>  </code><code>#循环状态列表,取出指标当前的值</code>

<code>  </code><code>for</code> <code>n </code><code>in</code> <code>global_status:</code>

<code>         </code><code>if</code> <code>"%s\t"</code><code>%</code><code>i </code><code>in</code> <code>n:</code>

<code>                   </code><code>value</code><code>=</code><code>re.sub(r</code><code>'.*\t'</code><code>,'',n).strip()</code>

<code>                   </code><code>#print i,'value:',value</code>

<code>                   </code><code>#把值写入临时文件</code>

<code>                   </code><code>with </code><code>open</code><code>(tmp_file_path,</code><code>'ab'</code><code>) as f:</code>

<code>                            </code><code>f.write(</code><code>'%s %s %s %s\n'</code><code>%</code><code>(zabbix_hostname,i,timestamp,value))</code>

<code>        </code> 

<code>#把临时文件通过zabbix_sender命令发送到server端</code>

<code>send_data_cmd</code><code>=</code><code>'/usr/local/zabbix/bin/zabbix_sender -vv -z %s -p %s -T -i %s'</code><code>%</code><code>(zabbix_server,zabbix_server_port,tmp_file_path)</code>

<code>print</code> <code>'/usr/local/zabbix/bin/zabbix_sender -vv -z %s -p %s -T -i %s'</code><code>%</code><code>(zabbix_server,zabbix_server_port,tmp_file_path)</code>

<code>#print send_data_cmd</code>

<code>os.popen(send_data_cmd)</code>

脚本里monit_message对应的监控项,需要在zabbix服务器上添加对应的监控项,然后把这个脚本放到crontab里每分钟执行一次即可。

     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1684141,如需转载请自行联系原作者