19.12 添加自定义监控项目
19.13/19.14 配置邮件告警
19.15 测试告警
19.16 不发邮件的问题处理
19.12 添加自定义监控项目
自定义监控项目一般都是在版本里面设置的,但如果遇到业务上的需求,则要在客户端上写脚本来获得具体的数字并通过监控项目来形成图标。
这里以“监控某台web的80端口连接数,并出图”为例子
步骤
在kun03上
1.在客户端上编辑脚本
1 | [root@kun03 ~]# vim /usr/local/sbin/estab.sh |
写入下面代码1
netstat -ant |grep ':80' |grep -c 'ESTABLISHED'
netstat -ant 查看所有tcp协议的网络连接情况 grep -c 统计行数
2.更改脚本权限
1 | [root@kun03 ~]# chmod 755 /usr/local/sbin/estab.sh |
3.编辑客户端的zabbix agent的配置文件
1 | [root@kun03 ~]# vim /etc/zabbix/zabbix_agentd.conf |
找到下面参数并修改1
UnsafeUserParameters=1
UnsafeUserParameters=1 表示开启自定义脚本 0则关闭1
UserParameter=estab.count[*],/usr/local/sbin/estab.sh
estab.count表示脚本的键值名字 [*]表示脚本需要的参数,多个用,分开 *表示没有参数
4.重启zabbix agent服务
1 | [root@kun03 ~]# systemctl restart zabbix-agent |
在kun05上
5.在服务端上使用zabbix get来测试是否有数据
1 | [root@kun05 ~]# zabbix_get -s 192.168.80.102 -p 10050 -k 'estab.count' |
zabbix_get是zabbix server命令行工具 -s 指定客户端IP地址 -p指定客户端端口 不写默认指定10050 -k指定键值
6.去监控中心来增加自定义监控项目
配置 —- 主机 —- 监控项 —- 创建监控项 —- 填写上名称和键值 —- 添加

7.创建对应的图表
主机 —- 图形 —- 创建图形 —- 填上名称 —- 选择对应的监控项

8.创建对应的触发器
主机 —- 触发器 —- 创建触发器 —- 填上名称和严重性 —- 添加表达式 —- 选择对应的监控项 —- 填上对应的功能和N值 —- 添加


19.13/19.14 配置邮件告警
我们在zabbix server上写发邮件脚本 并在监控中心上设置,这里使用的是163邮箱来做发告警信息
步骤
1.登录163邮箱 并设置 POP3、IMAP、SMTP服务


2.到监控中心自定义告警
管理 —- 报警媒介类型 —- 创建媒体类型 —- 名称 —- 类型 脚本 —- 脚本名称 —- 参数 —- 添加

{ALERT.SENDTO} 接受邮件的地址{ALERT.SUBJECT} 主题{ALERT.MESSAGE} 邮件内容
3.编辑脚本
1 | [root@kun05 ~]# vim /usr/lib/zabbix/alertscripts/mail.py |
输入下面代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47#!/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]
##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)
if __name__ == "__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
修改邮箱和密码 内容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
其中/usr/lib/zabbix/alertscripts/是zabbix server指定告警脚本的存放路径
4.更改脚本权限
1 | [root@kun05 ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py |
测试
使用命令来试试mial.py是否发邮件1
[root@kun05 ~]# python /usr/lib/zabbix/alertscripts/mail.py coco445566@163.com "test" "aaaa"

5.在监控中心处创建发送告警邮件的用户
先创建组,在创建用户
管理 —- 用户群组 —- 创建用户群组 —- 别名 —- 权限 —- 读写 —- 选择 所有 —- 添加

管理 —- 用户 —- 创建用户 —- 别名 —- 群组 —- 密码 —- 报警媒介 —- 添加 收件人 —- 添加


6.设置动作
配置 —- 动作 —- 创建动作 —- 名称 —- 条件

维护状态 非在 维护 是指定在维护时候不再发送邮件
操作 —- 消息内容 —- 发送到用户群组 —- 发送到用户 —- 仅送到 —- 添加
消息内容1
2
3
4
5HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
恢复操作 —- 消息内容 —- 发送到用户群组 —- 发送到用户 —- 仅送到 —- 添加
设置成功
19.15 测试告警
这里我们创建自定义的触发器来触发告警来测试是否有发邮件 我们以1分钟内系统负载小于1就告警有例子
配置 —- 主机 —- 触发器 —- 创建触发器

等一会就发现了问题了动作并写完成,再去163邮箱看看
发送成功
在把1分钟内系统负载改为大于1

也发送成功