19.12 添加自定义监控项目
19.13/19.14 配置邮件告警
19.15 测试告警(包括主动与被动、总结)
19.16 不发邮件的问题处理
19.12 添加自定义监控项目:
很多的监控项目是在模板里配置体现的。但是有时候会有一些个性化的需求。比如我们就像知道某一个业务的数据,想每天的会员的活跃度,那这些数据实际上是可以通过数据库里的表的数字体现出来的。但是我们zabbix模板是不可能提供这么详细的监控项目的。这时候就要写脚本把这个数字展现出来。然后通过一个监控项目再去形成图表。这就是zabbix可以让我们自定义的去监控一个项目:
~1.需求:监控某台web的80端口连接数,并出图
~2.两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现
~3.对于第一步,需要到客户端定义脚本
vim /usr/local/sbin/estab.sh //内容如下(路径的话无所谓,名字也自定义)
#!/bin/bash
##以下获取80端口并发连接数的命令
netstat -ant |grep ':80 ' |grep -c ESTABLISHED #80端口下ESTABLISHED状态的连接数有多少个(正常一台服务器数量不会超过100)
~4.chmod 755 /usr/local/sbin/estab.sh
#目的是给zabbix执行,所以要设置权限
~5.客户端上编辑配置文件vim /etc/zabbix/zabbix_agentd.conf//增加
UnsafeUserParameters=1 //表示使用自定义脚本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
#my.estab.count这个名字是在web界面下,键值那一栏里填的要保持一致
#[*]表示参数为空。如果有参数就写进去,以逗号分隔
//自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh
~6.重启zabbix-agent服务systemctl restart zabbix-agent
~7.首先到服务端验证,执行命令
zabbix_get -s 192.168.30.136 -p 10050 -k 'my.estab.count'
#zabbix_get为命令行工具。收跟客户端的数字是一样的,为0
~8.然后在zabbix监控中心(浏览器)配置增加监控项目
键值写my.estab.count #就是我们在~05.步骤,配置客户端文件所设置额名字,要与他保持一致
~9.添加该项目后,到“监测中” “最新数据”查看刚添加的项目是否有数据出现
~10.有了数据就可以添加图形了
“配置”“主机” “图形” “创建图形”
实例:
[root@afeilinux-02 ~]# vi /usr/local/sbin/estab.sh
#!/bin/bash
##以下获取80端口并发连接数的命令
[root@afeilinux-02 ~]# netstat -ant |grep ':80 ' |grep -c ESTABLISHED
0 #先在客户端上这个命令,先出这个数字。在跟后面的服务端操作的数字是否一致
[root@afeilinux-02 ~]# chmod 755 /usr/local/sbin/estab.sh
[root@afeilinux-02 ~]# vi /etc/zabbix/zabbix_agentd.conf
### Option: UnsafeUserParameters
# Allow all characters to be passed in arguments to user-defined parameters.
# The following characters are not allowed:
# \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
# Additionally, newline characters are not allowed.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Range: 0-1
# Default:
# UnsafeUserParameters=0 #搜索UnsafeUserParameters。在这一行下面定义
UnsafeUserParameters=1
### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter= #搜索UserParameter。在这一行下面定义
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
[root@afeilinux-02 ~]# systemctl restart zabbix-agent
[root@afeilinux-01 ~]# zabbix_get -s 192.168.30.136 -p 10050 -k 'my.estab.count'
0 #这个数字对应客户端的一开始测试的数字
然后下面我们再在监控中心,增加这个监控项目
添加完监控项,我们还要给他做图形,因为这是我们的需求
以上完成需求。如果我们的网站访问量很大,每隔30秒就会出一次数据
那么我们还可以添加触发器:
以上,其中表达式添加如何选如下图:
以上,满足我们设置的条件就会报警(我们设置的警告级别)。至于怎么报警后面我们在讲
总结:首先我们要通过脚本获得出这个数字,因为我们成图的这个要求都是这个数字。写完脚本再给权限,然后zabbix1 get这个工具能在服务端获得这个数字。然后再监控中心获得这个监控项,然后去创建图形。有需要报警的话再创建触发器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19.13/19.14 配置邮件告警:
~1.使用163或者QQ邮箱发告警邮件
~2.首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务
~3.开启并记录授权码
~4.然后到监控中心设置邮件告警
“管理”,“报警媒介类型”,“创建媒体类型”
{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
#并在脚本参数里添加这三个参数
{ALERT.SENDTO}表示发给谁,就是你接受邮件的邮箱地址
{ALERT.SUBJECT}是主题
{ALERT.MESSAGE}是邮件内容
以上这三个分布在我们的pytion脚本的三个参数里,等会会在命令行下测试
~5.创建报警脚本mail.py(配置文件里定义的AlertScriptsPAth定义的,就是我们的mail.py文件必须要放在他定义的这个路径下)
vim /usr/lib/zabbix/alertscripts/mail.py//内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
~6.chmod 755 /usr/lib/zabbix/alertscripts/mail.py #!!非常重要
~7.python mail.py wangxinlinux@163.com "这是一封测试的邮件" "linux21:41"
#测试能不能发邮件,并回到邮箱里检查
~8.创建一个接受告警邮件的用户,“管理”,“用户”,“创建用户”,“报警媒介”,类型选择“baojing”,注意用户的权限,如果没有需要到用户组去设置权限
~9.设置动作(意思就是触发了规则,要做什么,邮件或是短信等等),“配置”,“动作”,“创建动作”,名称写“sendmail”(自定义),“操作”页面,内容如下
HOST:{HOST.NAME} {HOST.IP} #定义的hostname
TIME:{EVENT.DATE} {EVENT.TIME} #发生的日期和时间
LEVEL:{TRIGGER.SEVERITY} #示警度。刚刚定义的未分类
NAME:{TRIGGER.NAME} #我们之前定义的KEY,是哪个触发器触发了告警
messages:{ITEM.NAME}:{ITEM.VALUE} #告警的时候会出现什么样的状态码
ID:{EVENT.ID} #这个事件的ID
“新的触发条件”,A维护状态非在维护,B触发器示警度>=未分类
“操作”,选择发送的用户为刚创建的用户,仅送到选择“baojing”
切换到“恢复操作”,把信息改成如下
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
点击“新的”,“操作”,选择发送的用户为刚创建的用户,仅送到选择“baojing”
~10.测试告警
实例:
开启服务后,我们在去监控中心设置邮件告警
然后回到linux01机器上来:
[root@afeilinux-01 ~]# vi /usr/lib/zabbix/alertscripts/mail.py #创建这个python脚本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' #因为用的163,所以定义为163
gport = 25 #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('wangxin@163.com','***********','wangxin@163.com',to,subject,content)
邮箱邮箱密码邮箱
if __name__ == "__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱"邮件主题" "邮件内容"
[root@afeilinux-01 ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py #一定要记得改权限,不然那不能够报警
[root@afeilinux-01 alertscripts]# python mail.py wangxinlinux@163.com "这是一封测试的邮件" "linux21:41" #我们测试一下能不能发邮件。并回到163邮箱里检查是否收到这封邮件
然后接下来,我们就要创建一个接受邮件的用户了(点击创建用户):
以上用户设置完
我们还要设置他的报警媒介:
以上,报警媒介设置完
我们还要设置他的用户组权限。要去用户组里去设置:
以上我们,设置了所有组的权限。(选择完成过别忘记点添加)
以上,别忘了,我们再去检查一下所有组的权限是不是读写。很重要!!
然后去设置动作:
以上设置动作、操作、恢复动作
以上全部配置邮箱告警就已完成
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19.15 测试告警:
~~扩展补充
更改监控项的主动与被动:
点击模板,axin那一行里点监控项,选择一项。如下图:
~~总结:
告警发邮件
1.163邮箱开启服务,并记录授权码。授权码要写到到脚本里面的
2.监控中心设置邮件告警。首先做一个告警媒介。实验中名字就叫baojing,注意名字与linux上的脚本名字(mail.py)一致,三个参数写对并且顺序不能改
3.在linux上配置mail.py脚本。路径要搞对/usr/lib/zabbix/alertscripts/这个路径下创建mail.py(当然名字自定义)
4.千万记得配置完的mail.py这个脚本权限改为755
5.配置用户。要在用户组权限里把这个用户的权限改为读写,因为我们要把这个用户加入到组里面(组的权限也要是读写)。这个用户要加入到组里面(我们实验中加入到了admin*组里面去了)。并且报警媒介再次检查权限与邮箱地址,然后测试,在linux上命令行给自己发一封测试邮件
6.动作。创建的时候,名称自定义,条件保持默认。操作项里,格式复制笔记里面的,还要加新的(就是定义给谁发邮件)、仅送到选择我们设置的baojing 这个告警媒介。恢复操作项,格式一样复制笔记里的,还要加新的(给谁发邮件)、仅送到选择我们设置的baojing
7.测试。我们人为的搞个触发器出来
比如系统负载当他小于1的时候就告警(正常是0,没有负载)。故意的搞错让他告警发邮件。关注仪表盘的最近20个问题这一栏
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19.16 不发邮件的问题处理:
~~出现问题几个排查项:
1.保证脚本能发邮件、并且有权限
2.检查报警媒介有没有配置对
3.查看用户。报警媒介、权限
4.动作。条件保持默认即可。操作项(给谁发)、恢复操作项(给谁发)
以上若都没问题,只能重做一遍,有可能是zabbix的bug