19.12 添加自定义监控项目
运维过程中,经常会遇到一些个性化的需求,例如要统计网站每天活跃度数据,zabbix提供的模版不能够满足这样的需求,我们需要自定义编写shell、python脚本来统计,然后把数据交给zabbix收集,再通过zabbix形成图表展现出来。可以通过统计web的80端口连接数实现网站活跃度统计
1、zabbix-agent机器上编写脚本:
vim /usr/local/sbin/estab.sh
#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
chmod 755 /usr/local/sbin/estab.sh //修改该脚本的权限为755
2、修改agent配置文件:/etc/zabbix/zabbix_agentd.conf,增加配置行
UnsafeUserParameters=1 //表示使用自定义脚本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh //自定义监控项的key是my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略
3、重启zabbix-agent
systemctl restart zabbix-agent
4、在server端验证自定义agent是否正常:使用zabbix-get
zabbix_get -s 192.168.87.130 -p 10050 -k 'my.estab.count'
0 //因为130服务器上没有80端口被访问,所以结果为0。
5、在zabbix-web界面,创建监控项目、并做图形展现
配置-->主机-->监控项目-->创建监控项:名称、键值:my.estab.count(agent配置定义的)
图形-->名称-->添加监控项-->触发器-->创建-->告警设置-->监控项值大于200时告警。
19.13/19.14 配置邮件告警
我们使用第三方邮箱进行告警邮件的发送,这里使用163邮箱进行配置。
1、登录163邮箱网页版,开启POP3/SMTP/IMAP服务,设置授权码与zabbix进行通信认证
2、创建告警邮件发送的python脚本:/usr/lib/zabbix/alertscripts 存放目录是固定的
vim /usr/lib/zabbix/alertscripts/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.163.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]
//定义邮箱的账号和密码,你需要修改成你自己的账号和密码
sendqqmail('lgs@163.com','aaaaaaa','lgs@163.com',to,subject,content)
if __name__ == "__main__":
main()
3、在zabbix-web界面中配置报警媒介:
管理-->报警媒介类型-->新建报警媒介类型-->名称为baojing-->脚本名:mail.py-->脚本参数分别为:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
4、新建告警触发的用户,增加用户群组读写权限
管理-->用户-->新建用户-->用户名-->群组选择Zabbix administrators-->配置zabbix的密码
报警媒介-->类型选择-->新创建的报警媒介类型:baojing-->输入接收告警邮箱账号-->选择告警严重性等级
管理-->用户群组-->权限-->设置权限:所有组都有读写权限
5、配置告警的动作
1、配置-->动作-->新建动作-->动作-->名称:发送邮件-->条件:维护状态非在维护
2、操作-->修改默认信息:
HOST:{HOST.NAME} {HOST.IP} #定义主机名
TIME:{EVENT.DATE} {EVENT.TIME} #定义事件发生时间
LEVEL:{TRIGGER.SEVERITY} #定义示警度
NAME:{TRIGGER.NAME} #定义哪一个触发器发出的报警
messages:{ITEM.NAME}:{ITEM.VALUE} #发出告警会出现什么状态码
ID:{EVENT.ID} #发生事件的id
发送的用户-->选择新建的用户-->仅发送到:新建的报警媒介baojing
3、恢复操作-->修改默认信息与操作页一样、发送的用户选择新建的用户、仅发送到新建的报警媒介baojing
6、自定义触发器:选择监控系统负载小于1时产生告警。
19.15 测试告警、19.16 不发邮件的问题处理
1、将触发器的规则设置为监控系统负载小于1,模拟产生问题。
2、切换至zabbix主页,在最近20个问题栏目中进行观察:zabbix监控到问题的产生,触发了告警动作
3、查看邮箱,收到告警邮件:告警ID是20
4、将触发器的规则设置为监控系统负载大于1,模拟问题解决。zabbix系统发送恢复操邮件通知
5、查看邮箱,收到恢复邮件:告警ID也是20
7、如果告警邮件接收不到,我们通过以下几个方面来排查:
1、单独测试邮件脚本,看看邮件功能是否正常,查看脚本的权限等是否755
2、检查zabbix告警媒介设置
3、用户、媒介、用户组权限等是否正常
4、动作是否配置正常。
5、触发条件规则是否满足。