linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

发布于 2018-04-16  755 次阅读


自定义监控项目

其实 Zabbix 还能监控一个站点或一个项目的用户注册量、使用量等,而这些功能,一般没有自带的模板,这时就需要运维人员来写 shell 脚本实现这种需求了

模拟需求:监控某台 web 的 443 端口的连接数并出图

思路:先使用脚本获取 443 端口的信息,之后再到 Zabbix 中定义监控项目,最后再针对该项目以图形展示出来

为保证实验结果,这次实验将在线上服务器做

客户端上操作

定义脚本:

[root@LZWP:/data/shell#] netstat -ant | grep ':443' | grep -c ESTABLISHED

1

[root@LZWP:~#] cd /data/

[root@LZWP:/data#] ls

backup  mysql  www

[root@LZWP:/data#] mkdir shell

[root@LZWP:/data#] cd shell/

[root@LZWP:/data/shell#] vim estab.sh

#!/bin/bash

netstat -ant | grep ':443' | grep -c ESTABLISHED

#脚本语句解析,"netstat -ant | grep ':443 ' | grep -c ESTABLISHED"显示所有跟 tcp 链接相关的信息,并只截取 443 端口并且状态为 ESTABLISHED 的信息,并做统计

赋予对应权限并编辑配置文件,重启 zabbix-agent:

[root@LZWP:/data/shell#] chmod 755 estab.sh

[root@LZWP:/data/shell#] vim /etc/zabbix/zabbix_agentd.conf

UnsafeUserParameters=1

#表示使用自定义脚本

UserParameter=my.estab.count[*],/data/shell/estab.sh

#自定义监控项的 key 为 my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/data/shell/estab.sh

[root@LZWP:/data/shell#] systemctl restart zabbix-agent.service

[root@LZWP:/data/shell#] ps -aux | grep zabbix

zabbix   28527  0.0  0.1  84812  1284 ?        S    14:48   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

zabbix   28528  0.0  0.1  84812  1308 ?        S    14:48   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]

zabbix   28529  0.0  0.1  84812  1864 ?        S    14:48   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]

zabbix   28530  0.0  0.1  84812  1864 ?        S    14:48   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]

zabbix   28531  0.0  0.1  84812  1864 ?        S    14:48   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]

zabbix   28532  0.0  0.2  84944  2196 ?        S    14:48   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]

root     28539  0.0  0.0 112652   960 pts/0    R+   14:48   0:00 grep --color=auto zabbix

服务端上操作

测试自定义脚本是否能识别

[root@am-01:/usr/share/zabbix/fonts#] zabbix_get -s XX.XX.XX.XX -p 10050 -k 'my.estab.count'

0

[root@am-01:/usr/share/zabbix/fonts#] zabbix_get -s XX.XX.XX.XX -p 10050 -k 'my.estab.count'

2

#可以见到,Zabbix 能识别到客户端的脚本,-s 后面跟客户端 IP 地址,-p 是指 tcp 端口 10050,-k 是指定 key

Zabbix web 页面上操作

因为这里是使用线上环境做实验,所以需要新增模板和主机,这里不详说,可以看下面链接了解

新增模板和新增主机

添加新的监控项

按需修改一些参数,记得键值就是你刚自定义'my.estab.count'linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

添加图形

按需设置参数

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

测试效果

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

设置触发器(为了令其实现报警功能)

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

设置邮件告警

这里使用 163 邮箱做实验

首先是登录到 163 邮箱(没有的去注册一个,当然,其他邮箱也可以,设置方法大同小异)

验证通过后,再次设置一个授权码()

设置一下,开启第三方邮箱设置

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

返回到 Zabbix web 页面设置报警媒介类型

名称:自定义

类型:脚本,这里是使用脚本方式做告警的

脚本名称:mail.py,待会要在服务端设置一个名为 mail.py 的脚本

脚本参数:{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE},这三个参数分别表示,发给谁,邮件主题,邮件内容,待会要在脚本中定义

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

在服务端写脚本并赋予其适当权限

脚本参考链接:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py

[root@am-01:/usr/share/zabbix/fonts#] vim /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts

#脚本的存放路径已经被定义到了/usr/lib/zabbix/alertscripts/目录下

[root@am-01:/usr/share/zabbix/fonts#] cd /usr/lib/zabbix/alertscripts/

[root@am-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

def sendqqmail(username,password,mailfrom,mailto,subject,content):

gserver = 'smtp.qq.com'

gport = 25

#!/usr/bin/env python

#-*- coding: UTF-8 -*-

import os,sys

reload(sys)

sys.setdefaultencoding('utf8')

import getopt

import smtplib

from email.MIMEText import MIMEText

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('XXX@163.com','XXX','XXX@163.com',to,subject,content)

if __name__ == "__main__":

main()

#三个 XXX 分别代表,163 邮箱账号,授权码,163 邮箱账号

[root@am-01:/usr/lib/zabbix/alertscripts#] chmod 755 mail.py

检测脚本是否能使用,注意修改 XXX 位置为你的邮箱地址,我这里自己发给自己

[root@am-01:/usr/lib/zabbix/alertscripts#] python mail.py XXX@163.com "123" "123"

查看是否能收到,实验证明是可以收到的

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

创建一个用来接收告警邮件的用户,设置接收告警的邮箱等信息

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

设置权限,权限没设置正确,最终还是没发收到告警邮件的

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

设置动作,这个动作的目的是为了定义当触发了触发器的规则后,会做什么行为

名词解析

维护状态 非在 维护:当服务器维护状态的时候,不报警,防误报

触发器示警度 >= 未分类:所有报警信息均发邮件

与/或:A 和 B 条件均满足的时候才会发告警信息

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

设置操作,意思就是这发邮件的动作要发给谁

详解

HOST:客户端定义的 HostName

TIME:时间

LEVEL:定义的示警度,未分类、信息、警告等

NAME:定义的触发器

messages:状态码

ID:时间的 ID

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

设置恢复操作,设置完成后点击添加即可

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

测试告警

设置触发器,让其故意告警

这里使用 am-02 主机

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

测试可以见到,已经有告警邮件发过来了

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

恢复原始状态,修改触发器系统负载为>1,间隔 1 分钟后可以收到问题已修复的邮件

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

linux 学习笔记-067-Linux 监控平台-自定义监控项目,邮件告警,测试邮件告警,问题处理

邮件告警排错

01:

确定发邮件脚本能正常发送邮件

02:

检查报警媒介的设置

03:

查看告警信息的动作,是失败还是成功,失败的话一般会有提示,如果为空就有可能是脚本没权限或者 Zabbix 用户没权限

04:

收告警邮件的 Zabbix 用户要对所有组有读写权限

05:

发邮件的动作设置要正确

06:

如果检查之后均无法发邮件告警,那么,很有可能是你安装的 Zabbix 有问题,这时建议重新安装 Zabbix

07:

收到的告警信息因为触发器是中文而导致的乱码问题,可以使用另外一个 py 脚本

py 脚本:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail2.py?public=true