一,利用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取值,例如: [ /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值 [ 至此已经监控到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 [ 在zabbix_server 端/usr/local/etc/zabbix_agentd.conf.d/目录下新建文件:mysql-replication.conf,内容为:
UserParameter=mysql.replication,/home/shell/mysql-replication.sh
写好之后,重启zabbix_agent 然后在zabbix_server端测试一下看能否获取到这个值 [
邮件通知内容:
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}
条件: [ 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加上用户的邮箱即可 [ 只要是在zabbix 中有的 items都可以在grafana中展示。