开发系统监控脚本

■ 企业环境说明
● 某公司随着业务的不断发展,所使用的Linux服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各服务器中,当监控指标出现异常时发送告警邮件
■ 需求描述
● 编写名为sysmon.sh的Shell|监控脚本
● 监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
● 百分比只需精确到个位,如7%、 12%、23%等
● 出现以下任一-情况时告警:磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
● 结合crond服务,每半小时执行一次监控脚本
■ 脚本编程
● 磁盘占有率
一、分步脚本说明

[root@hdss31-12 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        66G  5.4G   61G    9% /

[root@hdss31-12 ~]# df -Th|grep ' /$' |awk '{print $6}' |awk -F% '{print $1}'
9
#磁盘的使用量
[root@hdss31-12 ~]# mpstat
Linux 3.10.0-693.el7.x86_64 (hdss31-12)         2021年05月24日  _x86_64_        (1 CPU)

18时29分00秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
18时29分00秒  all    1.84    0.00    2.84    9.27    0.00    0.02    0.00    0.00    0.00   86.02
#总的CPU使用状态
[root@hdss31-12 ~]# mpstat |tail -1 |awk '{print $12}' |awk -F. '{print $1}'
90
  #此处是空闲的CPU
[root@hdss31-12 ~]# expr 100 - $(mpstat |tail -1 |awk '{print $12}' |awk -F. '{print $1}')
7
#CPU使用量
[root@hdss31-12 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1823         334         963           9         525        1259
Swap:          3999           0        3999
#内存的使用状态
[root@hdss31-12 ~]# expr $(free -m |grep "Mem:" |awk '{print $7}') \* 100 / $(free -m |grep "Mem:" |awk '{print $2}')
69
#内存的使用率

二、邮件服务器的配置
Linux下可以通过使用mail命令,利用外部的一个邮箱(比如xxx.163.com)发送邮件到另外一个邮箱(比如yyy.qq.com),这在某些情况下很有用,比如监测系统温度,当温度达到一定时就报警,向邮箱发送报警信息,提示管理员温度异常。

一般Linux系统自带mail命令,不用系统的sendmail来发送用外部邮箱来发送。

这里主要讲如何配置,这里建议不用qq邮箱作为发送邮箱,因为我在用qq邮箱时遇到一些问题目前我无法解决,我这里使用163邮箱作为发送邮箱,用qq邮箱作为接收邮箱

  1. 首先在/etc/mail.rc文件中添加(需要root权限):
set from=xxx@163.com      (你的163邮箱)
set smtp=smtp.163.com      (163邮箱默认就用这个)
set smtp-auth-user=xxx@163.com     (与第一行的一致)
set smtp-auth-password=aaaaaaa     (这里等号后面填写的是163邮箱的客户端授权密码,下面会告诉你在哪里找到)
set smtp-auth=login                  (登录方式)

添加完成后保存
2. 如何找到客户端授权密码:

163邮箱的授权码是自己设置的:

首先登录网页163邮箱,然后进入“设置”选项,再进入“POP3/SMTP/IMAP”,如下图所示

然后要把下图所示的这两个服务开启,记得保存,然后进入左边的“客户端授权密码”选项

记住自己的授权密码!!!!
3. 关闭Linux下相关服务(CentOS7.x和ReadHat最新版都是下面的方法关闭(需要root权限),其他系统自行百度(比如用service命令),此外,貌似不做处理也行,你们自己试试吧):

systemctl stop sendmail.service 
systemctl disable sendmail.service 
systemctl stop postfix.service
systemctl disable postfix.service
  1. 接收邮件的邮箱的相关设置(这步很重要,我搞了好长时间才发现这个问题):

我在用QQ邮箱作为接收邮件的邮箱时,如果我不对163邮箱设置白名单,则QQ邮箱就不会接收到mail命令发送的邮件

首先进入QQ邮箱网页版,然后进入设置,,进入反垃圾,设置白名单:

然后填写上发送邮箱的邮箱地址,点击“添加到白名单”即可:

  1. 邮件发送测试:

在终端输入如下类似语句测试:

echo "TEST" | mail -s "Title" yyy@qq.com

如果QQ邮箱收到邮件,则设置成功!!!

三、整体脚本

vim /root/sys.sh

#!/bin/bash
# 磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%告警发送邮件
disk=`df -Th | grep ' /$' |awk '{print $6}' |awk -F% '{print $1}'`
CPU=`expr 100 - $(mpstat |tail -1 |awk '{print $12}' |awk -F. '{print $1}')`
mem=`expr $(free -m |grep "Mem:" |awk '{print $7}') \* 100 / $(free -m |grep "Mem:" |awk '{print $2}')`
A=/root/alert.txt
B=yyy@qq.com
if [ $disk -ge 90 ]
then
        echo "磁盘占有率超过90%" >> $A
fi

if [ $CPU -ge 80 ]
then
        echo "CPU使用率超过80%" >> $A
fi
if [ $mem -ge 90 ]
then
echo "内存使用率超过90%" >> $A
fi
if [ -f $A ]
then
cat $A | mail -s "alert report" $B
rm -rf $A
fi

每三十分钟执行一次脚本
在/etc/crontab中加入一条

30 * * * * root bash /root/sys.sh
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值