需求
- 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。
- 思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。
- 主程序:作为整个脚本的入口,是整个系统的命脉。
- 配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
- 子程序:这个才是真正的监控脚本,用来监控各个指标。
- 邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码
- 输出日志:整个监控系统要有日志输出。
- 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。
- 程序架构:
(主目录 mon)_______________________|______________________________________
| | | | |
bin conf shares mail log
| | | | |
[main.sh] [ mon.conf] [load.sh 502.sh] [mail.py mail.sh] [ mon.log err.log ]
bin下是主程序
conf下是配置文件
shares下是各个监控脚本
mail下是邮件引擎
log下是日志。
环境准备
centos7操作系统、可以联网、安装python3环境(直接yum install -y python3即可)net-tools。
任务实施
1、配置main.sh
这里我们讲一个小习惯,就是以后我们写的所有的脚本都放在一个目录下,方便我们以后去查找,这里我们的项目就放在/usr/local/sbin/目录下。
# 创建项目主目录
[root@localhost ~]# mkdir /usr/local/sbin/mon
# 创建项目各个子目录
[root@localhost mon]# mkdir bin conf shares mail log
[root@localhost mon]# cd bin/
[root@localhost bin]# vim main.sh
2、配置mon.conf
这个文件就是我们项目各个程序的主开关,负责各个程序是否监控,这里面我们定义了很多参数,有些是我们用不到的,文件放在conf目录下。
[root@localhost bin]# cd ../conf/
[root@localhost conf]# vim mon.conf
3、配置监控子程序
这些子程序才是我们真正的监控程序,这些程序我们都放在shares目录下,这里主要有三个程序,分别是load.sh、502.sh、disk.sh。
load.sh程序的核心就是利用uptime命令取程序最近一分钟的负载值做判断,如果值大于我们设定的阈值就发送邮件告警。mail.sh后面跟三个参数 分别是邮件接收人、邮件主题、邮件内容,可以根据需要自定义参数。
[root@localhost conf]# cd ../shares/
[root@localhost shares]# vim load.sh
502.sh 核心就是监控nginx运行日志一分钟502出现的次数,如果大于我们设定的阈值就发送邮件告警。这个脚本需要在conf目录下mon.conf设置502运行日志的目录位置。
[root@localhost shares]# vi 502.sh
disk.sh 核心思想就是利用for循环遍历每个分区的磁盘利用率,如果有分区磁盘利用率超过设定的阈值就发送告警邮件。
[root@localhost shares]# vi disk.sh
4、配置告警系统邮件引擎
告警系统邮件引擎由两个文件组成,都在mail目录下,mail.py负责发送邮件,mail.sh负责告警收敛。
mail.py是由python3编写的脚本,如果没有学过python 内容不需要关心,只需要注意最下面一行,填写你的网易163账号、授权码和发送人邮箱。
[root@localhost shares]# cd ../mail/
[root@localhost mail]# vi mail.py
mail.sh是负责告警收敛的,如果每次运行脚本出现问题都发送邮件就太烦人了,所以就有了这个告警收敛脚本。这个脚本设置了三种场景,分别是第一次执行脚本如果有警告就发送邮件、业务连续报警十分钟再发送一封邮件和业务间断的报警一小时内满十分钟就报警一次。
[root@localhost mail]# vi mail.sh
测试
因为系统没有nginx环境,所以这里我们只测试Linux负载情况load.sh这个脚本。
首先我们需要安装python3环境和net-tools。
[root@localhost bin]# yum install -y net-tools python3
如果是真实需求,这个脚本需要写入到crontab当中去,我们这里因为是测试就先不要写进去了。
[root@localhost bin]# crontab -e
因为是测试我们先把日志关掉,注释掉main.sh脚本exec那一行。
我们要把load.sh脚本改成满足我们设定的阈值,所以改一下判断条件当系统负载等于0时我们就告警。
执行主程序
[root@localhost bin]# sh -x main.sh
直接结果显示我们的邮件发送成功了,并且收到了邮件