zabbix自定义监控mysql主从状态,并作邮件告警(详细解说)

                                               经过zabbix自定义监控mysql主从状态,并作邮件告警 python

分析: mysql主要是经过主历来提供安全性,一个完整的主从体系,就应该包括数据同步、开启二进制日志、全备、还有对Slave_IO_RunningSlave_SQL_Running两个线程的实时监测,并作告警,而zabbix监控软件就提供了很好的方法;对于zabbix这个监控软件,我的来讲也是比较熟悉,如今的企业们都基本用的是zabbix软件来作系统的资源的监控,zabbix的强大不只仅体现于,它自身自带的监控模板比较全面,而是经过它,咱们能够本身自定义获取咱们想要的参数,而且出图作邮件告警。mysql

 实现过程:linux

1、添加mysql主从状态自定义监控web

1、修改客户端:首先须要在mysql的从库上安装zabbix客户端(安装这里再也不演示,我这里使用的是一键安装的,详细能够参考文章:使用ansible一键实现zabbix源代码安装  咱们直接进入咱们的主题)。咱们须要在zabbix的客户端更改文件一些参数。sql

进入zabbix_agentd.conf文件,usr/local/zabbix/为个人安装路径vim

#vim /usr/local/zabbix/etc/zabbix_agentd.conf

编辑文件,向文件添加以下:安全

UnsafeUserParameters=1
UserParameter=slavestatus,mysql -uroot -p123456  -e "show slave status\G" |grep "Running" |awk '{print $2}' | grep Yes | wc –l

解析:UnsafeUserParameters=1,意思是开启自定义监控,UserParameter为获取的数据结果,slavestatus为名字,后面的是获取slave_IO状态的命令bash


2、测试命令,是否能获取到数据,且获取的数据信息是否正确。微信

[root@mysqlslave ~]# mysql -uroot -p123456  -e "show slave status\G" |grep "Running" |awk '{print $2}' | grep Yes | wc -l
2

#获取Yes的个数的命令写法有不少,按你喜欢的获取就好,我这里能够知道,命令,命令获取状态是没问题的。运维


3、重启客户端,添加自定义监控

[root@mysqlslave mysql]# service zabbix_agentd restart
Restarting zabbix_agentd (via systemctl):                  [  肯定  ]


#咱们去到zabbix服务端,看看能不能,获取到数据

[root@zabbix bin]# pwd
/usr/local/zabbix/bin
[root@zabbix bin]# ./zabbix_get -s 192.168.1.220  -k slavestatus
2

#能够获取到数据,证实咱们能够在web端能够添加监控,并出图了,这里的-k 指的是你在zabbix客户端上设置UserParameter参数的名字,这个名字能够随意。


4zabbix服务端监控出图

去到zabbixweb页面建立新的模板,点击:配置à模板à建立模板,以下图所示

2.jpg


5、建立监控项,点击:mysql-slavestatusà监控项à建立监控项,以下图所示:


3.jpg


6添加监控项名称为slavestatus,键值为slavestatus

注意,所为的键值就是你写在zabbix_agentd.conf的自定义keys名称

4.jpg

7、添加图像,绑定监控项,(监控项是咱们刚建立的slavestatus的监控项)

5.jpg

8、添加新的触发条件,过程以下

由于是自定义keys监控,因此咱们没有定义触发器,触发器通常是为了作告警用的,若是在是使用自定义keys的时候,只为了出图,而没有定义触发条件的作法是没有意义的,因此,咱们须要定义一个触发条件。

 6.jpg

#而后继续添加表达式,并设置严重性

7.jpg

设置T值不为N时,触发告警。N2,以下图所示:(这个要根据实际状况而定的)

8.jpg

添加完的结果以下图:

10.jpg

9、绑定主机,出图,出数据。

到了这一步,咱们的自定义keys监控就基本完成了;可是,咱们的自定义keys毕竟只是一个模板,并不可以出图出数据,因此,这就须要人为的让主机绑定模板,这样才能出图出数据,注意的是,绑定模板的主机必需要有自定义keys的定义,不然都是啥扯淡。

#点击:配置à主机(自定义keys主机)à模板,以下图所示

11.jpg

#点击:选择à选择群组找到模板à选择,以下图所示

注:linux server是我在新建模板的时候绑定的群组,绑定群组的好处就是,方便查找。

12.jpg

 #添加完毕后,点击更新。

13.jpg

#查看图像,查看获取的数据,是否正确

14.jpg

#能够发现,获取的数据和出图都已经达到咱们的目的了。自动义监控mysql-slavestatus的状态已经成功了。

 

2、邮件告警的实现

       为何要作告警呢?一个监控系统,每每离不开告警,总的来讲,在zabbix应用中,咱们经过zabbix来作监控,咱们的最终目的并非,让它出图,让咱们来观察。你能够想像,做为一个运维人员,讲究的是自动化,简单,便捷。你是不会那么有空去时刻看着你所监控的服务的状态的,固然,你喜欢这样,那也没办法。再也不废话了,今天的目的是,为了实现告警部署,完善整个监控系统的部署。

告警方式有不少,我这里提供的是邮件告警,若是你有时间的,也能够弄一个微信告警也能够,接下来,进入咱们的主题,部署邮件告警。


1zabbix Server端修改配置文件建立自定义媒介,发送邮件

[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_server.conf


找到AlertScriptsPath选项,添加媒介

AlertScriptsPath=/usr/local/zabbix/alertscripts


2、建立目录和邮件告警文件。

[root@zabbix ~]# mkdir /usr/local/zabbix/alertscripts 
[root@zabbix ~]# cd /usr/local/zabbix/alertscripts/
[root@zabbix alertscripts]# ls


我这里提供一个python邮件发送脚本:

[root@zabbix alertscripts]## cat  send_mail.py
#!/usr/bin/python
#coding: utf-8
import smtplib
import sys
from email.mime.text import MIMEText
_user = "847536**@qq.com"    ##这里填写你的邮件号
_pwd  = "ilbsly******"   
##这里填写你邮件的密码 ,我这里使用的是qq邮箱(其余邮箱也能够),qq邮箱密码是要到QQ邮箱里面申请的,而后它会生成一个密码的
#_to   = "dsf@163.com"    ##这里是发送给谁,这个通常注释掉,在执行脚本的时候指定发给谁就能够了
def send_mail(to,subject,contain):
    msg = MIMEText(contain)
    msg["Subject"] = subject
    msg["From"]    = _user
    msg["To"]      = to
    try:
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)
        s.login(_user, _pwd)
        s.sendmail(_user, to, msg.as_string())
        s.quit()
        with open('/tmp/zabbix.log', 'w') as f:
            f.write("%s\n%s\n%s\n"%(to,subject,contain))
#        print "Success!"
    except smtplib.SMTPException,e:
        print "Falied,%s"%e
if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])


4、测试脚本邮件

 [root@zabbix ~]# python "/usr/local/zabbix/alertscripts/send_mail.py" "84753***@qq.com" "xiaozhang" "xiaozhang"


查看是否收到;能够发现脚本是没问题的。

blob.png

5、报警媒介建立。在zabbix web端建立媒介类型,点击:管理à报警媒介类型à建立媒介类型,如图所示:

 

15.jpg

#定义媒体类型,咱们能够看一下定义的参数

名称:python_send_mail (名称能够随意指定,后期调用)

类型:脚本

脚本名称: send_mail.py  ##这个要跟你的邮件脚本的名称同样。

添加脚本参数(在 3.0 版本以前默认传值不用添加):

     {ALERT.SENDTO}  ####发送地址

     {ALERT.SUBJECT}  ###主题

     {ALERT.MESSAGE}  ###发送内容

配置结果以下图:

16.jpg

6、添加用户操做命令,做用该发送给谁,什么时段发送:

1)、步骤:   管理à用户àAdminà报警示警媒介à建立示警媒介:

1.png 

备注: 类型选择添加的示警媒介名称,收件人表示要发送到哪一个地方: 启用时间:表示能够发送邮件的时间段。


2)添加结果。添加完成后以下:

2.png

7、添加要执行的动做

1)、步骤: 配置à动做à添加触发器动做:

 19.jpg

2)、动做选择项:

定义动做名称、使用默认选项,而后勾选恢复通知和已启用。 条件选择默认便可 操做主要定义发送步骤,选择发送用户和发送脚本: 操做步骤定义(时间假如我定义为 60s):而后操做不走选择 1-2 说明前面 120 两次发送 的告警都会发送到 zabbix 这个用户。

 动做操做结果以下:

20.jpg

配置消息恢复结果:

21.jpg

 

备注:操做类型:能够是发送命令或者邮件。例如操做命令能够在监控服务的适合发送 一条 restart 命令重启服务

8、查看动做结果。

 22.jpg

从图上能够发现,已经能够添加动做完成了,而且动做状态是已经启用的了。整个告警部署就完成了。(由于业务不容许,我这里就不演示,触发告警的结果)


3、总结

    整个告警系统依赖的是咱们定义的触发器的触发条件,一但咱们监控的数据不知足或者超出咱们设定的监控外,系统就会执行动做:发送消息给用户: Admin (Zabbix Administrator) 经过 python_send_mail,接着咱们也就能够收到邮件告警。

相关文章
相关标签/搜索