一 添加自定义监控项目
zabbix很受欢迎的原因之一是:能够自定义监控项目,之前我们看到的很多的监控项目都是在模板里面提现的,但是当我们需要一些个性化的监控项目,比如某一个业务的监控数据 需求:监控某台web的80端口连接数,并出图 两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现
1)创建监控项目
- 对于第一步,需要到客户端定义脚本 ,脚本的名字及位置可以自定义 vim /usr/local/sbin/estab.sh //内容如下
#!/bin/bash
##获取80端口并发连接数,也就是查看80端口中处于ESTABLISHED状态的链接有多少个,一般正常的也不会超过100
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
- 更改执行脚本的权限,主要为了授予zabbix用户执行这个脚本的权限
# chmod 755 /usr/local/sbin/estab.sh
- 客户端上编辑配置文件
# vim /etc/zabbix/zabbix_agentd.conf
在配置文件中修改以下参数的值,
#表示使用自定义脚本,相当于开关,如果等于0,他就没办法使用脚本
UnsafeUserParameters=1
还要在配置文件中找到UserParameter参数,并设置自定义监控项下面的键值key为my.estab.count,后面的[]里面写脚本的参数,一般脚本是带有参数的,如果没有参数则可以写成,脚本为/usr/local/sbin/estab.sh,
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
如下图的key
- 重启zabbix-agent服务
# systemctl restart zabbix-agent
2)针对该监控项目以图形展现
- 首先到服务端验证,执行下面命令,要保证没有防火墙规则,也没有selinux
[root@lijie-01 ~]# zabbix_get -s 192.168.75.134 -p 10050 -k 'my.estab.count'
0
[root@lijie-01 ~]#
- 然后在zabbix监控中心(浏览器)配置增加监控 项目
然后跳转到以下界面,写上名称,键值写my.estab.count,其他保持默认就可以了,最后点击页面底部的添加按钮
- 添加该项目后,到“监测中”--“最新数据”查看刚添加的项目是否有数据出现
从上图可以看到已经有数据产生了 - 有了数据就可以添加图形了 按照这个顺序点击 “配置”“主机” “图形” “创建图形”,
进入到创建自定义监控项的图形显示界面,名称可以写并发连接数,
监控项框内点击添加按钮找到我们在监控项中定义的并发连接数的并确定后,
页面变成下图样子
最后点击页面最下方的添加按钮,即可成功添加图形 - 按照同样的方式,我们也可以给监控项并发连接数设置触发器,告诉系统什么时候报警,只是在表达式选择的时候
需要填写下图的信息,设置当并发连接数大于200时报警
二 配置邮件告警
- 使用163或者QQ邮箱发告警邮件,相当于就是调用第三方的邮箱来发出告警邮件,以QQ为例:
首先登录QQ邮箱,设置开启POP3、IMAP、SMTP服务,第一次开启会使用短信验证
短信验证后我们需要开启并记录授权码 - 然后到监控中心设置邮件告警,“管理”,“报警媒介类型”,“创建媒体类型”,下图中我们可以看到默认有Email告警方式,但不太好用,因此我们可以自己写一个python脚本
然后弹出以下页面,此时这个脚本我们还没有写的,三个参数分别为{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE},分别表示发给谁,主题、邮件内容,这三个东西分布在我们写的脚本的三个参数里 - 创建报警脚本mail.py
我们可以到zabbix的配置文件 /etc/zabbix/zabbix_server.conf中查找alert找到以下一行内容
AlertScriptsPath=/usr/lib/zabbix/alertscripts
这行代码的含义是告警脚本的路径为/usr/lib/zabbix/alertscripts,这说明zabbix的告警脚本都应该放到这个路径下面
# vim /usr/lib/zabbix/alertscripts/mail.py //内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/tree/master/D22Z?public=true
在上述路径中有两个mail相关的python脚本,都需要将gserver改为使用的邮箱的域名服务器,第一种,
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = 'smtp.qq.com'
gport = 25
try:
msg = MIMEText(unicode(content).encode('utf-8'))
msg['from'] = mailfrom
msg['to'] = mailto
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
smtp = smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)
if __name__ == "__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
第二种
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.163.com'
mail_user = 'abcdefg@xx.com'
mail_pass = '1111111'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, 'plain', '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])
- 修改配置文件的权限
# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
然后我们来测试下是否能成功发送邮件,如果发送成功则不会有任何提示
[root@lijie-01 alertscripts]# python mail.py ******@qq.com "title" "content"
我使用qq邮箱发送邮件测试了好几次都没有成功,然后我更换使用163邮箱来给我的qq邮箱发送邮件OK
- 创建一个接受告警邮件的用户,“管理”,“用户”,“创建用户”,“报警媒介”,类型选择“QQalert”
然后填写以下信息
还有报警媒介
注意用户的权限目前是无权限,如果这里设置不对的话,最终也是收不到告警邮件的
这时需要到用户组去设置权限
跳转到以下页面 - 用户配置完成后,还需要设置动作,动作是告警触发器被触发后需要做的动作,“配置”,“动作”,“创建动作”
名称写“sendmail”(自定义),条件A是【维护状态 非在 维护】表示的含义是有一些维护并不是在真正的维护时就不需要发邮件,比如当我们重启网络服务等情况下就不是真正的维护,就不用发送邮件;条件B【触发器示警度>=未分类】表示所有状态的告警都需要发送邮件 - “操作”,选择发送的用户为刚创建的用户,仅送到选择“QQalert”
上面定义的是发送邮件的动作,我们来到“操作”页面,定义发给谁,主题、内容等信息,默认信息内容我们填写以下内容:
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
填写的内容如下图,其中条件可以不用设置,条件A表示的是发生的事件处于非确认状态时来发送邮件
- 切换到“恢复操作”,把默认信息改成如下
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
其他填写的信息如下:
上面操作完成后再点击页面底部的添加按钮,即可添加成功,成功后如下图
- 测试告警 为了测试告警,我们在主机lijie-02中创建一个新的触发器,配置信息如下 ,我们这里没有对zabbix-agent做任何操作,因此系统负载为0,下面我们是设置当系统负载小于1时发邮件告警
等一会儿之后,我们就能收到邮件,并且可以看到zabbix首页有以下提示:
如果上图中的【完成】变成了空,很有可能是脚本没有权限导致的,如果是【失败】,则需要将鼠标划动到失败二字上面查看具体的失败原因 收到的告警邮件信息如下:
上面我们测试了问题告警,下面我们来测试问题解决后的通知消息是否能成功发送,我们先来将lijie-02中上面创建的触发器改一下,改为当系统负载大于1时发邮件告警
由于目前系统负载为0,因此告警解除,我们就能收到告警解除的邮件
并且可以看到下图页面提示已解决