一,利用zabbix自带模板监控mysql状态: 1,在从的mysql服务器上面创建一个用于zabbix监控的用户 grant replication client on . to zabbix@’localhost’ IDENTIFIED BY ‘PASSWORD’; 2,根据zabbix监控mysql的key改写脚本

#/bin/bash
DEF=”–defaults-file=/etc/zabbix/my.conf”
MYSQL=’/usr/local/webservers/mysql-5.6.19/bin/mysqladmin’
ARGS=1
if [ $# -ne “$ARGS” ];then
echo “Please input one arguement:”
fi
case $1 in
Uptime)
result=${MYSQL} $DEF status|cut -f2 -d":"|cut -f1 -d"T"
echo $result
;;
Com_update)
result=${MYSQL} $DEF extended-status |grep -w "Com_update"|cut -d"|" -f3
echo $result
;;
Slow_queries)
result=${MYSQL} $DEF status |cut -f5 -d":"|cut -f1 -d"O"
echo $result
;;
Com_select)
result=${MYSQL} $DEF extended-status |grep -w "Com_select"|cut -d"|" -f3
echo $result
;;
Com_rollback)
result=${MYSQL} $DEF extended-status |grep -w "Com_rollback"|cut -d"|" -f3
echo $result
;;
Questions)
result=${MYSQL} $DEF status|cut -f4 -d":"|cut -f1 -d"S"
echo $result
;;
Com_insert)
result=${MYSQL} $DEF extended-status |grep -w "Com_insert"|cut -d"|" -f3
echo $result
;;
Com_delete)
result=${MYSQL} $DEF extended-status |grep -w "Com_delete"|cut -d"|" -f3
echo $result
;;
Com_commit)
result=${MYSQL} $DEF extended-status |grep -w "Com_commit"|cut -d"|" -f3
echo $result
;;
Bytes_sent)
result=${MYSQL} $DEF extended-status |grep -w "Bytes_sent" |cut -d"|" -f3
echo $result
;;
Bytes_received)
result=${MYSQL} $DEF extended-status |grep -w "Bytes_received" |cut -d"|" -f3
echo $result
;;
Com_begin)
result=${MYSQL} $DEF extended-status |grep -w "Com_begin"|cut -d"|" -f3
echo $result
;;

*) 
echo "Usage:$0(Uptime|Com\_update|Slow\_queries|Com\_select|Com\_rollback|Questions)" 
;; 

esac

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

Screenshot from 2015-10-23 13:13:07](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-131307.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-131307.png) 如果我们直接指定了这个文件,那么那行提示就不会出现 [![Screenshot from 2015-10-23 13:14:57](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-131457.png)
Screenshot from 2015-10-23 13:13:07](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-131307.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-131307.png) 如果我们直接指定了这个文件,那么那行提示就不会出现 [![Screenshot from 2015-10-23 13:14:57](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-131457.png)
/etc/zabbix/my.conf的内容:

[client]
host=localhost
user=zabbix
password=’PASSWORD’
socket = /data/mysql/mysql.sock

3,设置zabbix_agent端 首先启用自定义的key 去掉zabbix_agent配置文件的259行: Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf 然后自定义一个mysql-status.conf 在这个目录下,内容为:

UserParameter=mysql.version,/usr/local/webservers/mysql-5.6.19/bin/mysql -V
UserParameter=mysql.ping,/usr/local/webservers/mysql-5.6.19/bin/mysqladmin –defaults-file=/etc/zabbix/my.conf ping | grep -c alive
UserParameter=mysql.status[*],/home/shell/mysql-status.sh $1

#注意:这里自定义的key 建议使用命令的绝对路径

ok 上面的内容定义好之后重启zabbix_agent服务,然后就可以在zabbix_server端看一下能不能获取到key值 [

Screenshot from 2015-10-23 13:27:02](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132702.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132702.png) 好啦,以上内容中可以看到取值正常,我们在zabbix dashboard中查看一下吧; [![Screenshot from 2015-10-23 13:29:49](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132949.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132949.png) [![Screenshot from 2015-10-23 13:30:31](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-133031.png)
Screenshot from 2015-10-23 13:27:02](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132702.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132702.png) 好啦,以上内容中可以看到取值正常,我们在zabbix dashboard中查看一下吧; [![Screenshot from 2015-10-23 13:29:49](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132949.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-132949.png) [![Screenshot from 2015-10-23 13:30:31](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-133031.png)
至此已经监控到mysql的状态啦;这里一定要注意mysql用户取获取mysql服务的状态时候的权限; 二、zabbix监控mysql主从状态 跟上面的步骤差不多,这里使用的mysql用户我还是使用的zabbix用户 那这里直接就自定义key 啦,大家都知道mysql主从状态我们一般通过在mysql slaves上面的show slave status 然后看

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这两个值,如果其中一个不为Yes那说明主从同步是有问题的,那我们用zabbix这个的身份来获取这个值 编写脚本:mysql_replication.sh

#!/bin/bash
/usr/local/webservers/mysql-5.6.19/bin/mysql –defaults-file=/etc/zabbix/my.conf -e ‘show slave status\G’ | grep -E “Slave_IO_Running:|Slave_SQL_Running:” | awk ‘{print $2}’ | grep -c Yes

这个脚本的用途是,用zabbix用户身份执行”show slave status\G”这个命令,然后截取Yes这个关键字的行数是2 或者非 2 [

Screenshot from 2015-10-23 13:47:37](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-134737.png)
Screenshot from 2015-10-23 13:47:37](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-134737.png)
在zabbix_server 端/usr/local/etc/zabbix_agentd.conf.d/目录下新建文件:mysql-replication.conf,内容为:

UserParameter=mysql.replication,/home/shell/mysql-replication.sh

写好之后,重启zabbix_agent 然后在zabbix_server端测试一下看能否获取到这个值 [

Screenshot from 2015-10-23 14:03:21](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140321.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140321.png) zabbix_server端能获取,现在在zabbix dashboard添加这个item吧 Configuration-->Host-->database-node2-->Items-->Create item [![Screenshot from 2015-10-23 14:07:54](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140754.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140754.png) 这里我们自定义的key 需要手动输入key名称。我这里定义过了,直接点击“Add”就行了 然后我们需要定义一个Triggers Triggers-->Create triggers [![Screenshot from 2015-10-23 14:13:13](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141313.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141313.png) [![Screenshot from 2015-10-23 14:11:53](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141153.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141153.png) 检测它最后一次的取值是不是小于2,定义N的值为2,如果取得的值小于2就说明有问题啦, 定义一下报警: Configuration-->Action-->Create action [![Screenshot from 2015-10-23 14:16:21](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141621.png)
Screenshot from 2015-10-23 14:03:21](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140321.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140321.png) zabbix_server端能获取,现在在zabbix dashboard添加这个item吧 Configuration-->Host-->database-node2-->Items-->Create item [![Screenshot from 2015-10-23 14:07:54](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140754.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-140754.png) 这里我们自定义的key 需要手动输入key名称。我这里定义过了,直接点击“Add”就行了 然后我们需要定义一个Triggers Triggers-->Create triggers [![Screenshot from 2015-10-23 14:13:13](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141313.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141313.png) [![Screenshot from 2015-10-23 14:11:53](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141153.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141153.png) 检测它最后一次的取值是不是小于2,定义N的值为2,如果取得的值小于2就说明有问题啦, 定义一下报警: Configuration-->Action-->Create action [![Screenshot from 2015-10-23 14:16:21](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141621.png)

邮件通知内容:
MySQL.Repliaction
ERROR—MySQL master-slave –>{ITEM.VALUE1}
MySQL 主从出现问题,请检测主从状态!!!
告警主机 : {HOSTNAME1}
告警时间 : {EVENT.DATE} {EVENT.TIME}
告警等级 : {TRIGGER.SEVERITY}
告警信息 : {TRIGGER.NAME}
告警项目 : {TRIGGER.KEY1}
问题详情 : {ITEM.NAME}:{ITEM.VALUE}
当前状态 : {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID : {EVENT.ID}

恢复后的回复:
OK—MySQL master-slave –>{ITEM.VALUE1}
MySQL 主从问题恢复,请确认主从状态!!!
告警主机 : {HOSTNAME1}
告警时间 : {EVENT.DATE} {EVENT.TIME}
告警等级 : {TRIGGER.SEVERITY}
告警信息 : {TRIGGER.NAME}
告警项目 : {TRIGGER.KEY1}
问题详情 : {ITEM.NAME}:{ITEM.VALUE}
当前状态 : {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID : {EVENT.ID}

条件: [

Screenshot from 2015-10-23 14:19:03](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141903.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141903.png) [![Screenshot from 2015-10-23 14:19:35](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141935.png)
Screenshot from 2015-10-23 14:19:03](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141903.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141903.png) [![Screenshot from 2015-10-23 14:19:35](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-141935.png)
zabbix自定义脚本发送邮件; 首先我们要在zabbix_server端启用自定义脚本发送邮件,在zabbix_server主配置文件中修改为 AlertScriptsPath=/usr/lib/zabbix/alertscripts 脚本存放的目录 然后我们自定义一个脚本mail.py

#!/usr/bin/python

#coding:utf-8

import smtplib
from email.mime.text import MIMEText
import sys

#邮箱服务器地址
mail_host = ‘smtp.qq.com’

#邮箱用户名
mail_user = ‘xxxxxxx’

#邮箱密码
mail_pass = ‘xxxxxxxx’
mail_postfix = ‘qq.com’

def send_mail(to_list,subject,content):
me = mail_user+”<”+mail_user+”@”+mail_postfix+”>”
msg = MIMEText(content,_charset=’utf-8’)
msg[‘Subject’] = subject
msg[‘From’] = me
msg[‘to’] = to_list

try:
    s = smtplib.SMTP()
    s.connect(mail_host)
    s.login(mail\_user,mail\_pass)
    s.sendmail(me,to\_list,msg.as\_string())
    s.close()
    return True
except Exception,e:
    print str(e)
    return False

if __name__ == “__main__“:
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

记得加上执行权限; 然后在zabbix dashboard上面定义用户的media加上用户的邮箱即可 [

Screenshot from 2015-10-23 14:25:28](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142528.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142528.png) 以上就可以实现报警啦 测试一下,将mysql-replication.sh这个脚本的值自定义一个输出值为0或者1 [![Screenshot from 2015-10-23 14:28:32](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142832.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142832.png) 查看邮件: [![zabbix_1](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_1.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_1.png) 如果恢复后的回复 [![zabbix_2](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_2.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_2.png) ok 已经成功能看到这个监控没问题啦。 下面来看一下zabbix + grafana ,这个是作为页面展示比较华丽的效果 [![Screenshot from 2015-10-23 14:42:25](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-144225.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-144225.png) [![Screenshot from 2015-10-23 14:40:08](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-144008.png)
Screenshot from 2015-10-23 14:25:28](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142528.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142528.png) 以上就可以实现报警啦 测试一下,将mysql-replication.sh这个脚本的值自定义一个输出值为0或者1 [![Screenshot from 2015-10-23 14:28:32](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142832.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-142832.png) 查看邮件: [![zabbix_1](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_1.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_1.png) 如果恢复后的回复 [![zabbix_2](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_2.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/zabbix_2.png) ok 已经成功能看到这个监控没问题啦。 下面来看一下zabbix + grafana ,这个是作为页面展示比较华丽的效果 [![Screenshot from 2015-10-23 14:42:25](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-144225.png)](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-144225.png) [![Screenshot from 2015-10-23 14:40:08](https://qcloud.coding.net/u/guomaoqiu/p/guomaoqiu/git/raw/master/uploads/2015/10/Screenshot-from-2015-10-23-144008.png)
只要是在zabbix 中有的 items都可以在grafana中展示。