zabbix 监控MySQL
现在我来说一下我的监控环境
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改写脚本
[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
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}'
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}'
UserParameter=mysql.ping,/data/usr/local/mysql/bin/mysqladmin --defaults-file=/data/usr/local/zabbix/etc/.my.cnf ping|grep -c alive
UserParameter=mysql.version,echo "select version();"|/data/usr/local/mysql/bin/mysql --defaults-file=/data/usr/local/zabbix/etc/.my.cnf -N #### MySQL Slave Information
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}'
#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}'
#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}'
#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
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
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}'
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}'
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 #### MySQL InnoDB Information
#
UserParameter=mysql.innodb[*],/usr/local/zabbix/bin/mysql_innodb_status.sh $1
[root@DBSlave-live bin]# pwd
/data/usr/local/zabbix/bin
[root@DBSlave-live bin]# ls
mysql_health.sh mysql_innodb_status.sh zabbix_get zabbix_sender
[root@DBSlave-live bin]# cat mysql_innodb_status.sh
#!/bin/bash #Get InnoDB Row Lock Details and InnoDB Transcation Lock Memory
#/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;
#+-------------+---------------+-------------+
#| rows_locked | rows_modified | lock_memory |
#+-------------+---------------+-------------+
#| NULL | NULL | NULL |
#+-------------+---------------+-------------+
#1 row in set (0.00 sec) #+-------------+---------------+-------------+
#| rows_locked | rows_modified | lock_memory |
#+-------------+---------------+-------------+
#| 0 | 0 | 376 |
#+-------------+---------------+-------------+ #Get InnoDB Compression Time
#/data/usr/local/mysql/bin/mysql> SELECT SUM(compress_time) AS compress_time, SUM(uncompress_time) AS uncompress_time FROM information_schema.INNODB_CMP;
#+---------------+-----------------+
#| compress_time | uncompress_time |
#+---------------+-----------------+
#| 0 | 0 |
#+---------------+-----------------+
#1 row in set (0.00 sec) #Get InnoDB Transaction states #TRX_STATE Transaction execution state. One of RUNNING, LOCK WAIT, ROLLING BACK or COMMITTING. #/data/usr/local/mysql/bin/mysql> SELECT LOWER(REPLACE(trx_state, " ", "_")) AS state, count(*) AS cnt from information_schema.INNODB_TRX GROUP BY state;
#+---------+-----+
#| state | cnt |
#+---------+-----+
#| running | 1 |
#+---------+-----+
#1 row in set (0.00 sec) innodb_metric=$1 case $innodb_metric in
Innodb_rows_locked)
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}')
if [ "$value" == "NULL" ];then
echo 0
else
echo $value
fi
;;
Innodb_rows_modified)
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}')
if [ "$value" == "NULL" ];then
echo 0
else
echo $value
fi
;;
Innodb_trx_lock_memory)
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}')
if [ "$value" == "NULL" ];then
echo 0
else
echo $value
fi
;;
Innodb_compress_time)
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}')
echo $value
;; Innodb_uncompress_time)
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}')
echo $value
;;
Innodb_trx_running)
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}')
if [ "$value" == "" ];then
echo 0
else
echo $value
fi
;;
Innodb_trx_lock_wait)
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}')
if [ "$value" == "" ];then
echo 0
else
echo $value
fi
;;
Innodb_trx_rolling_back)
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}')
if [ "$value" == "" ];then
echo 0
else
echo $value
fi
;;
Innodb_trx_committing)
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}')
if [ "$value" == "" ];then
echo 0
else
echo $value
fi
;;
Innodb_trx_history_list_length)
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}'
;;
Innodb_last_checkpoint_at)
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}'
;; Innodb_log_sequence_number)
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}'
;;
Innodb_log_flushed_up_to)
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}'
;;
Innodb_open_read_views_inside_innodb)
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}'
;;
Innodb_queries_inside_innodb)
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}'
;;
Innodb_queries_in_queue)
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}'
;;
Innodb_hash_seaches)
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}'
;;
Innodb_non_hash_searches)
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}'
;;
Innodb_node_heap_buffers)
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}'
;;
Innodb_mutex_os_waits)
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}'
;;
Innodb_mutex_spin_rounds)
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 ','
;;
Innodb_mutex_spin_waits)
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 ','
;; *)
echo "wrong parameter"
;; esac
要是不定义下面这个文件的话,直接在配置文件里面直接写用户名和密码的话会报错
/etc/zabbix/my.conf 这个文件定义的是zabbix这个mysql用户的信息,然后直接指定这个文件,如果我们在命令行直接输入zabbix的用户密码的话会一行提示,影响我们zabbix取值,例如:

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

[root@DBSlave-live etc]# ls
zabbix_agentd.conf zabbix_agentd.conf.d
[root@DBSlave-live etc]# ls -al
total 20
drwxr-xr-x 3 root root 4096 Nov 17 16:42 .
drwxr-xr-x 7 root root 4096 Nov 17 16:41 ..
-rw-r--r-- 1 root root 99 Nov 2 15:35 .my.cnf
-rw-r--r-- 1 root root 182 Nov 2 15:32 zabbix_agentd.conf
drwxr-xr-x 2 root root 4096 Nov 18 11:16 zabbix_agentd.conf.d
[root@DBSlave-live etc]# cat .my.cnf
[mysql]
user=zabbixagent
password=konzh123
[mysqladmin]
user=zabbixagent
password=konzh123
这里我们还需要修改一下zabbix客户端的配置文件
[root@DBSlave-live etc]# vim zabbix_agentd.conf LogFile=/tmp/zabbix_agentd.log
Server=13.59.15.9
ServerActive=13.59.15.9
Hostname=DB_Slave_245
Include=/data/usr/local/zabbix/etc/zabbix_agentd.conf.d/*
UnsafeUserParameters=1 #允许自定义key
~
下面是在MySQLserver端测试一下,看一下自定义的key能不能获取到值
[root@openvpn_nagios_cacti src]# zabbix_get -s 13.59.15.45 -k "mysql.replication"
2
[root@openvpn_nagios_cacti src]# zabbix_get -s 13.59.15.45 -k "mysql.replication"
1
[root@openvpn_nagios_cacti src]# zabbix_get -s 13.59.15.45 -k "mysql.process"
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的更多相关文章
- Zabbix监控mysql performance
介绍 zabbix监控mysql性能,使用zabbix自带的mysql监控模板,可以监控以下内容OPS(增删改查).mysql慢查询数量.mysql请求\响应流量带宽 配置 新建mysql监控用户 G ...
- Zabbix监控mysql配置及故障告警配置
本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况.同时介绍了触发器的创建及zabbix通过邮件方式告警配置. 一.配 ...
- 分布式数据存储 - Zabbix监控MySQL性能
Zabbix如何监控mysql性能,我们可以使用mysql自带的模板,可以监控如下内容:OPS(增删改查).mysql请求流量带宽,mysql响应流量带宽,最后会附上相应的监控图! 编写check_m ...
- 使用zabbix监控mysql的三种方式
使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...
- zabbix监控mysql性能
使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...
- zabbix监控mysql最简单的方法
该实验基于我的上一篇文章监控第一台主机的基础上 首先,因为水平有限,我选择直接关闭了防火墙和SELinux. 环境: 两台centos7,服务器端IP是192.168.200.128(以下简称主机), ...
- Zabbix 监控 Mysql 状态
简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...
- zabbix监控mysql以及其他常见
zabbix监控mysql以及其他常见,监控mysql,也可是使用percona提供的详细的模板,里面的监控项目非常的详细 <template>Template Percona MySQL ...
- Zabbix监控,Mysql,Nginx,PHP-FTPM
一 Zabbix监控Mysql 监控Mysql,Zabbix提供了一个监控模板,所有可以直接使用.或者使用Percona提供的监控模板. 1. 使用自带监控模板 1.1.1 编写监控模板 #!/bin ...
随机推荐
- [转]ORACLE DBA TRANSACTIONS
本文转自:http://blog.sina.com.cn/s/blog_66f845010100qelf.html 一, Transaction control 默认Transaction 由修改数据 ...
- 广州APP开发外包公司哪家比较好?广州达到信息技术有限公司技术到底怎么样?
广州APP开发公司哪家比较好,广州手机APP软件开发公司广州达到信息表示:用户的刚性需求是公司使用手机APP软件盈利的根本前提和基础,所以开发一款手机APP应用时必须从客户的角度来思考.因此公 ...
- 关于电磁场中的E.B.D.H的理解
电磁场理论中存在四个基本物理量,电场强度E,磁场强度H,电场通量密度D,磁场通量密度B. E:其中E和H最简单,电场中的电荷受到电场力的作用,单位电荷受的力称为电场强度,这种定义得到E的单位为N/C, ...
- JavaScript(DOM操作)(Window.document对象)
一.找到元素: docunment.getElementById("id"): 根据id找,最多找一个: var a =docunment ...
- android 下载文件
import com.example.android.R; import android.app.Activity;import android.os.Bundle;import android.os ...
- mui禁止滚动条和禁止滚动
mui.plusReady(function () { plus.webview.currentWebview().setStyle({ scrollIndicator: 'none' }); }); ...
- sg函数与博弈论2
参考链接: http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html 这篇主要就是讲anti-sg.multi-sg和every-sg的. 例1 poj ...
- 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
mvc项目中,解决用Url.Content方法引用jquery文件后智能提示失效的办法 这个标题不知道要怎么写才好, 但是希望文章的内容对大家有帮助. 场景如下: 我们在用开发开发程序的时候,经常 ...
- docker中如何制作自己的基础镜像
一.本地镜像 举个例子:现在把自己的开发环境打包,取名为centos6-base.tar,然后在docker中,以centos6-base.tar作为基准镜像. 1.创建自己的镜像,放置于/root目 ...
- Web安全测试之跨站请求伪造(CSRF)篇
跨站请求伪造(即CSRF)被Web安全界称为诸多漏洞中“沉睡的巨人”,其威胁程度由此“美誉”便可见一斑.本文将简单介绍该漏洞,并详细说明造成这种漏洞的原因所在,以及针对该漏洞的黑盒测试与灰盒子测试具体 ...