目录
一、添加自定义监控项目
二、配置邮件告警
三、测试告警
四、不发邮件的问题处理
一、添加自定义监控项目
Zabbix可以很方便地添加自定义监控项目,它虽然提供了丰富的模板,但依然不能满足各种各样的特殊个性化需求。
需求:监控某台web的80端口连接数,并出图
解决方案:
创建自定义监控项
针对该监控项设置成图形
- 在zabbix客户端上编辑自定义脚本
[root@minglinux-02 ~] vim /usr/local/sbin/estab.sh
#写入以下内容
#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
#然后要修改该脚本的权限
[root@minglinux-02 ~] chmod 755 /usr/local/sbin/estab.sh
- 编辑zabbix客户端上配置文件
[root@minglinux-02 ~] vim /etc/zabbix/zabbix_agentd.conf
#修改以下内容
···
UnsafeUserParameters=1 #值为1启用zabbix自定义脚本,为0则关闭
···
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
#定义自定义脚本名称及路径
#my.estab.count[*]是自定义监控项的键值,后面的[*]里面写脚本的参数,
[*]表示该脚本没有参数,若有参数要将参数写入[]中并用逗号分割
···
#重启zabbix-agent服务
[root@minglinux-02 ~] systemctl restart zabbix-agent
- 到zabbix服务端验证脚本配置是否正确
[root@minglinux-01 ~] zabbix_get -s 192.168.162.132 -p 10050 -k 'my.estab.count'
0
#在服务端执行zabbix_get命令
#-s后跟客户端IP
#-p指定端口,不加则默认使用10050
#-k跟监控项的键值
#报错网络通畅,无防火墙规则和关闭SELINUX
#由于客户端上并没有任何80端口的访问,所以结果为0。
#这里能正常获取到客户端上的数据说明配置没问题。
#若将客户端自定义监控脚本权限改为700(用户无执行权限)
[root@minglinux-02 ~] chmod 700 /usr/local/sbin/estab.sh
#此时zabbix用户无执行权限
[root@minglinux-01 ~] zabbix_get -s 192.168.162.132 -p 10050 -k 'my.estab.count'
sh: /usr/local/sbin/estab.sh: 权限不够
- 到zabbix监控中心(浏览器)配置增加监控项目
创建监控项
依次点击“配置”→“主机”,然后点击minglinux-02主机的“监控项”,再点“创建监控项”
填写监控项相关信息
名称自定义
键值要和客户端配置文件中定义的相同
其余项保持默认点击添加即可
为该监控项添加图形
依次点击“配置”→“主机”,再点击minglinux-02的“图形”,再点击“创建图形”按钮
填写图形项相关信息
定义图形名称
添加刚才创建的“并发连接数”监控项
其他保持默认点击添加即可
图形预览
为自定义监控项创建触发器
当并发连接数超过200时告警
二、配置邮件告警
可以使用163或者QQ邮箱发告警邮件,这里使用QQ邮箱
登录QQ邮箱,设置开启POP3、IMAP、SMTP服务
开启并记录授权码
-
到监控中心设置邮件告警
依次点击“管理”→“报警媒介类型”,在右上角点击“创建媒体类型”
填写相关内容
自定义名称
类型选脚本
定义3个脚本参数
- 编写发送报警邮件的Python脚本
#通过zabbix_server的配置文件确定告警邮件的脚本l存放路径
[root@minglinux-01 ~] grep 'AlertScriptsPath=' /etc/zabbix/zabbix_server.conf# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@minglinux-01 ~] cd /usr/lib/zabbix/alertscripts
[root@minglinux-01 /usr/lib/zabbix/alertscripts] ls
[root@minglinux-01 /usr/lib/zabbix/alertscripts] vim mail.py
###脚本内容如下
#!/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 = MIMEText(content,'plan','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('[email protected]','aaaaaaaaaa','[email protected]',to,subject,content)
if __name__ == "__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
#给予用户脚本的可执行权限
[root@minglinux-01 /usr/lib/zabbix/alertscripts] chmod 755 mail.py
#测试脚本发邮件
[root@minglinux-01 /usr/lib/zabbix/alertscripts] python mail.py [email protected] "test" "hello"
-
创建一个接受告警邮件的用户
依次点击“管理“→“用户”,再点击右上角的“创建用户”蓝色按钮进入创建用户的页面,
填写用户基本信息、群组和密码
添加报警媒介
用户没有权限,需要到用户组去设置权限
修改用户所在群组Zabbix administrators的权限
给所有群组增加读写读写权限,注意要记得点击添加和更新
再查看用户权限
- 配置动作
定义触发器被触发后执行的动作
依次点击“配置”→“动作”→右上角的“创建动作”
定义名称,设置触发条件
切换到操作界面定义操作
切换到恢复操作界面定义恢复操作
故障恢复时执行的操作
HOST:{HOST.NAME} {HOST.IP} 定义的主机名及主机ip
TIME:{EVENT.DATE} {EVENT.TIME} 发生的日期和时间
LEVEL:{TRIGGER.SEVERITY} 示警度
NAME:{TRIGGER.NAME} 即定义的key,指出发出告警的触发器
messages:{ITEM.NAME}:{ITEM.VALUE} 发出告警时显示的状态码
ID:{EVENT.ID} 事件ID
配置完成
三、测试告警
创建一个自定义触发器来测试
被监控主机系统负载小于1就告警
被监控主机系统负载肯定小于1,所以系统会告警并发送告警邮件
[root@minglinux-02 ~] w
16:41:50 up 1 day, 10:49, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.162.1 12:54 6.00s 0.01s 0.00s w
将触发器触发规则修改为当系统负载大于1告警,本身系统负载是小于1的,所以修改后会触发发送恢复邮件操作