现在我来说一下我的监控环境

zabbix-3.0.3

MySQL-5.6.23

1.首先我们要登录MySQL,创建一个监控MySQL的用户

GRANT USAGE,PROCESS,SUPER,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'zabbixagent'@'localhost' IDENTIFIED BY 'zabbixagent';

2。根据zabbix监控MySQL的key改写脚本

  1. [root@DBSlave-live etc]# cd zabbix_agentd.conf.d/
    [root@DBSlave-live zabbix_agentd.conf.d]# ls
    mysql_status.conf
    [root@DBSlave-live zabbix_agentd.conf.d]# cat mysql_status.conf
    ### MySQL DB Infomation
  2. UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|awk '{print $$2}'
  3. UserParameter=mysql.variables[*],echo "show global variables where Variable_name='$1';"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|awk '{print $$2}'
  4. UserParameter=mysql.ping,/data/usr/local/mysql/bin/mysqladmin --defaults-file=/data/usr/local/zabbix/etc/.my.cnf ping|grep -c alive
  5. UserParameter=mysql.version,echo "select version();"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N
  6.  
  7. #### MySQL Slave Information
  8. UserParameter=mysql.slave.Seconds_Behind_Master,echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep "Seconds_Behind_Master"|awk '{print $2}'
  9. #UserParameter=mysql.slave.Slave_IO_Running,echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep "Slave_IO_Running"|awk '{print $2}'
  10. #UserParameter=mysql.slave.Slave_SQL_Running,echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep "Slave_SQL_Running"|awk '{print $2}'
  11. #UserParameter=mysql.replication[*],echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep "Slave_IO_Running"|awk '{print $2}'|grep -c Yes
  12. UserParameter=mysql.replication[*],echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
  13. UserParameter=mysql.slave.Relay_Log_Pos,echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep "Relay_Log_Pos"|awk '{print $2}'
  14. UserParameter=mysql.slave.Exec_Master_Log_Pos,echo "show slave status\G"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep "Exec_Master_Log_Pos"|awk '{print $2}'
  15. UserParameter=mysql.process,echo "show processlist"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf|grep -v "Id"|wc -l
  16.  
  17. #### MySQL InnoDB Information
  18. #
  19. UserParameter=mysql.innodb[*],/usr/local/zabbix/bin/mysql_innodb_status.sh $1
  1. [root@DBSlave-live bin]# pwd
  2. /data/usr/local/zabbix/bin
  3. [root@DBSlave-live bin]# ls
  4. mysql_health.sh mysql_innodb_status.sh zabbix_get zabbix_sender
  5. [root@DBSlave-live bin]# cat mysql_innodb_status.sh
  6. #!/bin/bash
  7.  
  8. #Get InnoDB Row Lock Details and InnoDB Transcation Lock Memory
  9. #/data/usr/local/mysql/bin/mysql> SELECT SUM(trx_rows_locked) AS rows_locked, SUM(trx_rows_modified) AS rows_modified, SUM(trx_lock_memory_bytes) AS lock_memory FROM information_schema.INNODB_TRX;
  10. #+-------------+---------------+-------------+
  11. #| rows_locked | rows_modified | lock_memory |
  12. #+-------------+---------------+-------------+
  13. #| NULL | NULL | NULL |
  14. #+-------------+---------------+-------------+
  15. #1 row in set (0.00 sec)
  16.  
  17. #+-------------+---------------+-------------+
  18. #| rows_locked | rows_modified | lock_memory |
  19. #+-------------+---------------+-------------+
  20. #| 0 | 0 | 376 |
  21. #+-------------+---------------+-------------+
  22.  
  23. #Get InnoDB Compression Time
  24. #/data/usr/local/mysql/bin/mysql> SELECT SUM(compress_time) AS compress_time, SUM(uncompress_time) AS uncompress_time FROM information_schema.INNODB_CMP;
  25. #+---------------+-----------------+
  26. #| compress_time | uncompress_time |
  27. #+---------------+-----------------+
  28. #| 0 | 0 |
  29. #+---------------+-----------------+
  30. #1 row in set (0.00 sec)
  31.  
  32. #Get InnoDB Transaction states
  33.  
  34. #TRX_STATE Transaction execution state. One of RUNNING, LOCK WAIT, ROLLING BACK or COMMITTING.
  35.  
  36. #/data/usr/local/mysql/bin/mysql> SELECT LOWER(REPLACE(trx_state, " ", "_")) AS state, count(*) AS cnt from information_schema.INNODB_TRX GROUP BY state;
  37. #+---------+-----+
  38. #| state | cnt |
  39. #+---------+-----+
  40. #| running | 1 |
  41. #+---------+-----+
  42. #1 row in set (0.00 sec)
  43.  
  44. innodb_metric=$1
  45.  
  46. case $innodb_metric in
  47. Innodb_rows_locked)
  48. value=$(echo "SELECT SUM(trx_rows_locked) AS rows_locked, SUM(trx_rows_modified) AS rows_modified, SUM(trx_lock_memory_bytes) AS lock_memory FROM information_schema.INNODB_TRX;"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N| awk '{print $1}')
  49. if [ "$value" == "NULL" ];then
  50. echo 0
  51. else
  52. echo $value
  53. fi
  54. ;;
  55. Innodb_rows_modified)
  56. value=$(echo "SELECT SUM(trx_rows_locked) AS rows_locked, SUM(trx_rows_modified) AS rows_modified, SUM(trx_lock_memory_bytes) AS lock_memory FROM information_schema.INNODB_TRX;"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N| awk '{print $2}')
  57. if [ "$value" == "NULL" ];then
  58. echo 0
  59. else
  60. echo $value
  61. fi
  62. ;;
  63. Innodb_trx_lock_memory)
  64. value=$(echo "SELECT SUM(trx_rows_locked) AS rows_locked, SUM(trx_rows_modified) AS rows_modified, SUM(trx_lock_memory_bytes) AS lock_memory FROM information_schema.INNODB_TRX;"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N| awk '{print $3}')
  65. if [ "$value" == "NULL" ];then
  66. echo 0
  67. else
  68. echo $value
  69. fi
  70. ;;
  71. Innodb_compress_time)
  72. value=$(echo "SELECT SUM(compress_time) AS compress_time, SUM(uncompress_time) AS uncompress_time FROM information_schema.INNODB_CMP;"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|awk '{print $1}')
  73. echo $value
  74. ;;
  75.  
  76. Innodb_uncompress_time)
  77. value=$(echo "SELECT SUM(compress_time) AS compress_time, SUM(uncompress_time) AS uncompress_time FROM information_schema.INNODB_CMP;"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|awk '{print $2}')
  78. echo $value
  79. ;;
  80. Innodb_trx_running)
  81. value=$(echo 'SELECT LOWER(REPLACE(trx_state, " ", "_")) AS state, count(*) AS cnt from information_schema.INNODB_TRX GROUP BY state;'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep running|awk '{print $2}')
  82. if [ "$value" == "" ];then
  83. echo 0
  84. else
  85. echo $value
  86. fi
  87. ;;
  88. Innodb_trx_lock_wait)
  89. value=$(echo 'SELECT LOWER(REPLACE(trx_state, " ", "_")) AS state, count(*) AS cnt from information_schema.INNODB_TRX GROUP BY state;'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep lock_wait|awk '{print $2}')
  90. if [ "$value" == "" ];then
  91. echo 0
  92. else
  93. echo $value
  94. fi
  95. ;;
  96. Innodb_trx_rolling_back)
  97. value=$(echo 'SELECT LOWER(REPLACE(trx_state, " ", "_")) AS state, count(*) AS cnt from information_schema.INNODB_TRX GROUP BY state;'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep rolling_back|awk '{print $2}')
  98. if [ "$value" == "" ];then
  99. echo 0
  100. else
  101. echo $value
  102. fi
  103. ;;
  104. Innodb_trx_committing)
  105. value=$(echo 'SELECT LOWER(REPLACE(trx_state, " ", "_")) AS state, count(*) AS cnt from information_schema.INNODB_TRX GROUP BY state;'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep committing|awk '{print $2}')
  106. if [ "$value" == "" ];then
  107. echo 0
  108. else
  109. echo $value
  110. fi
  111. ;;
  112. Innodb_trx_history_list_length)
  113. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "History list length"|awk '{print $4}'
  114. ;;
  115. Innodb_last_checkpoint_at)
  116. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "Last checkpoint at"|awk '{print $4}'
  117. ;;
  118.  
  119. Innodb_log_sequence_number)
  120. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "Log sequence number"|awk '{print $4}'
  121. ;;
  122. Innodb_log_flushed_up_to)
  123. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "Log flushed up to"|awk '{print $5}'
  124. ;;
  125. Innodb_open_read_views_inside_innodb)
  126. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "read views open inside InnoDB"|awk '{print $1}'
  127. ;;
  128. Innodb_queries_inside_innodb)
  129. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "queries inside InnoDB"|awk '{print $1}'
  130. ;;
  131. Innodb_queries_in_queue)
  132. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "queries in queue"|awk '{print $5}'
  133. ;;
  134. Innodb_hash_seaches)
  135. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "hash searches"|awk '{print $1}'
  136. ;;
  137. Innodb_non_hash_searches)
  138. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "non-hash searches/s"|awk '{print $4}'
  139. ;;
  140. Innodb_node_heap_buffers)
  141. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "node heap"|awk '{print $8}'
  142. ;;
  143. Innodb_mutex_os_waits)
  144. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "Mutex spin waits"|awk '{print $9}'
  145. ;;
  146. Innodb_mutex_spin_rounds)
  147. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "Mutex spin waits"|awk '{print $6}'|tr -d ','
  148. ;;
  149. Innodb_mutex_spin_waits)
  150. echo 'show engine innodb status\G'|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N|grep "Mutex spin waits"|awk '{print $4}'|tr -d ','
  151. ;;
  152.  
  153. *)
  154. echo "wrong parameter"
  155. ;;
  156.  
  157. esac

要是不定义下面这个文件的话,直接在配置文件里面直接写用户名和密码的话会报错

/etc/zabbix/my.conf 这个文件定义的是zabbix这个mysql用户的信息,然后直接指定这个文件,如果我们在命令行直接输入zabbix的用户密码的话会一行提示,影响我们zabbix取值,例如:

如果我们直接指定了这个文件,那么那行提示就不会出现

  1. [root@DBSlave-live etc]# ls
  2. zabbix_agentd.conf zabbix_agentd.conf.d
  3. [root@DBSlave-live etc]# ls -al
  4. total 20
  5. drwxr-xr-x 3 root root 4096 Nov 17 16:42 .
  6. drwxr-xr-x 7 root root 4096 Nov 17 16:41 ..
  7. -rw-r--r-- 1 root root 99 Nov 2 15:35 .my.cnf
  8. -rw-r--r-- 1 root root 182 Nov 2 15:32 zabbix_agentd.conf
  9. drwxr-xr-x 2 root root 4096 Nov 18 11:16 zabbix_agentd.conf.d
  10. [root@DBSlave-live etc]# cat .my.cnf
  11. [mysql]
  12. user=zabbixagent
  13. password=konzh123
  14. [mysqladmin]
  15. user=zabbixagent
  16. password=konzh123

这里我们还需要修改一下zabbix客户端的配置文件

  1. [root@DBSlave-live etc]# vim zabbix_agentd.conf
  2.  
  3. LogFile=/tmp/zabbix_agentd.log
  4. Server=13.59.15.9
  5. ServerActive=13.59.15.9
  6. Hostname=DB_Slave_245
  7. Include=/data/usr/local/zabbix/etc/zabbix_agentd.conf.d/*
  8. UnsafeUserParameters=1 #允许自定义key
  9. ~

下面是在MySQLserver端测试一下,看一下自定义的key能不能获取到值

  1. [root@openvpn_nagios_cacti src]# zabbix_get -s 13.59.15.45 -k "mysql.replication"
  2. 2
  3. [root@openvpn_nagios_cacti src]# zabbix_get -s 13.59.15.45 -k "mysql.replication"
  4. 1
  5. [root@openvpn_nagios_cacti src]# zabbix_get -s 13.59.15.45 -k "mysql.process"
  6. 4

我们都配置完成之后,我们重启一下zabbix客户端

*************************************************************************************************************

我们的脚本都写好了,通过zabbix_get也是可以获取到数据的,现在我们在zabbix上来干了

配置--->主机--->DB_Slave_245--->监控项--->创建监控项

这里我们自定义的key 需要手动输入key名称(就是你在客户端自己定义的)

然后创建触发器(triggers)

点击创建触发器--->名称--->表达式构造器--->构造

创建表达式的时候,上面的Item就是刚刚之前创建的item,自己选择一下

检测它最后一次的取值是不是小于2,定义N的值为2(因为有两个线程,IO线程和SQL线程都是YES的时候这个值才会是2),如果取得的值小于2就说明有问题啦

这里我们insert之后,点击一下增加表达式(Add),是expression下面的Add,最后才点击最下面的Add(添加触发器)

还有就是这里的严重性选择一下,这里要是不选的话,是不会触发报警的,我这里一开始忘了选,我测试的时候,明明是主从不同步的,但是就是不报警,回头看才知道这里的严重性没有选择

文章摘自:

http://blog.sctux.com/?p=396

http://www.tuicool.com/articles/eEJJzi3

http://john88wang.blog.51cto.com/2165294/1596272?utm_source=tuicool&utm_medium=referral

zabbix 监控MySQL的更多相关文章

  1. Zabbix监控mysql performance

    介绍 zabbix监控mysql性能,使用zabbix自带的mysql监控模板,可以监控以下内容OPS(增删改查).mysql慢查询数量.mysql请求\响应流量带宽 配置 新建mysql监控用户 G ...

  2. Zabbix监控mysql配置及故障告警配置

    本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况.同时介绍了触发器的创建及zabbix通过邮件方式告警配置. 一.配 ...

  3. 分布式数据存储 - Zabbix监控MySQL性能

    Zabbix如何监控mysql性能,我们可以使用mysql自带的模板,可以监控如下内容:OPS(增删改查).mysql请求流量带宽,mysql响应流量带宽,最后会附上相应的监控图! 编写check_m ...

  4. 使用zabbix监控mysql的三种方式

    使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...

  5. zabbix监控mysql性能

    使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...

  6. zabbix监控mysql最简单的方法

    该实验基于我的上一篇文章监控第一台主机的基础上 首先,因为水平有限,我选择直接关闭了防火墙和SELinux. 环境: 两台centos7,服务器端IP是192.168.200.128(以下简称主机), ...

  7. Zabbix 监控 Mysql 状态

    简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...

  8. zabbix监控mysql以及其他常见

    zabbix监控mysql以及其他常见,监控mysql,也可是使用percona提供的详细的模板,里面的监控项目非常的详细 <template>Template Percona MySQL ...

  9. Zabbix监控,Mysql,Nginx,PHP-FTPM

    一 Zabbix监控Mysql 监控Mysql,Zabbix提供了一个监控模板,所有可以直接使用.或者使用Percona提供的监控模板. 1. 使用自带监控模板 1.1.1 编写监控模板 #!/bin ...

随机推荐

  1. hdu2222 Keywords Search ac自动机

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2222 题目: Keywords Search Time Limit: 2000/1000 MS ...

  2. Gprinter热敏打印机光栅位图点阵数据解析工具

    最近参与的项目有一个需求,解析佳博热敏打印机的光栅位图点阵数据并保存为图片文件.数据是通过Bus Hound抓取的,如下图所示. 其中1b 40为初始化打印机的指令,对应的ASCII码为ESC @,1 ...

  3. POJ2184 Cow Exhibition[DP 状态负值]

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12420   Accepted: 4964 D ...

  4. 调用newtonsoft.json反序列出错

    调用newtonsoft.json反序列出错: Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current J ...

  5. java 22 - 17 多线程之等待唤醒机制(接16)

    先来一张图,看看什么叫做等待唤醒机制 接上一章的例子. 例子:学生信息的录入和获取 * 资源类:Student  * 设置学生数据:SetThread(生产者) * 获取学生数据:GetThread( ...

  6. IOS第五课——Gesture and TableView

    这一次我们要学习Gesture.TableView.AlertView三种技术. 一.Gesture 在iOS中,可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势 ...

  7. php常用函数(不定时更新)

    一,数据操作类 1,天花板函数(ceil)和地板函数(floor) 这两个函数是对数据进行向上取整和向下取整的操作的,比如说 echo ceil("3.01"); //这里输出的是 ...

  8. Java集合系列:-----------01集合的整体框架

    内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映 ...

  9. [转]源代码的管理和发布:以SVN为例

    FROM : http://ju.outofmemory.cn/entry/47277 前几天在微博吐槽了SVN的几个不爽的地方:.svn文件满天飞.分支管理的麻烦.不爽一般来说都是有过对比后才有如此 ...

  10. C# 6.0

    C# 6.0 的新语法特性   回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都 ...