编写shell脚本检测网络状态,结合计划任务自动发送邮件告警

安装 (方案1)

 

 一.安装邮件服务可安装mailx,也可安装mutt;任意安装一种邮件服务即可。

安装mailx 需配置发送邮箱
yum install -y sendmail.i686
yum install -ymailx.i686

启动:service sendmail start

netstat -lnp | grep :25
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1102/master
tcp 0 0 ::1:25 :::* LISTEN 1102/master

 安装(方案2)

 一.安装邮件服务

1.安装sendmaill、mailx邮件服务

yum -y install mailx sendmail dos2unix

2.配置邮件发送人,邮箱需要启用POP3等协议,在mail.rc配置文件的结尾添加

vim /etc/mail.rc

#用来发送邮件的邮箱
set from=XXXX@qq.com
#smtp服务器的地址
set smtp=smtp.qq.com
#smtp服务器认证的用户名,和第一项一致
set smtp-auth-user=XXXX@qq.com
#smtp服务器认证的用户密码(授权码)
#set smtp-auth-password=XXXXX

3.测试邮件发送功能

# echo 内容 | mail -s "主题"  收件人邮箱地址
echo  test | mail -s "test"   136×××@126.com

Linux mail 邮件发送 - kevin.Xiang - 博客园 以上mailx部分版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

二、安装邮件服务mutt

yum -y install sendmail mutt
#需要安装sendmail并开启防火墙的25端口,如果你需要收邮件110端口也要开

二、配置信息

关于配置信息,有一点需要说明的,网上很多教程都说,编辑/root/.muttrc以修改配置文件,我想说的是,我在安装完成之后, /root目录下并没有 .muttrc 这个隐藏文件,你可以从其它地方复制过来,或者自己新建一个文件。这里我是复制的。

你可以通过find命令找到Muttrc这个文件,命令如下 find / -name Muttrc ,然后通过命令 cp /etc/Muttrc /root/.muttrc 复制到 /root 下后更名为 .muttrc ,然后你就可以编辑配置文件了。

#如果你收到的邮件乱码,设置以下信息
set charset="utf-8"
set rfc2047_parameters=yes
#如果你想自定义发件人信息,需要进行如下设置
set envelope_from=yes
set use_from=yes
set from=root@itdhz.com
set realname="itdhz"

邮件发送

语 法:

  mutt [-hnpRvxz][-a<文件>][-b<地址>][-c<地址>][-f<邮件文 件>][-F<配置文件>][-H<邮件草稿>][-i<文件>][-m<类型>] [-s<主题>][邮件地址]
  参 数:
 -a <文件> 在邮件中加上附加文件。
 -b <地址> 指定密件副本的收信人地址。
 -c <地址> 指定副本的收信人地址。
 -f <邮件文件> 指定要载入的邮件文件。
 -F <配置文件> 指定mutt程序的设置文件,而不读取预设的.muttrc文件。
 -h 显示帮助。
 -H <邮件草稿> 将指定的邮件草稿送出。
 -i <文件> 将指定文件插入邮件内文中。
 -m <类型> 指定预设的邮件信箱类型。
 -n 不要去读取程序培植文件(/etc/Muttrc)。
 -p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。
 -R 以只读的方式开启邮件文件。
 -s <主题> 指定邮件的主题。
 -v 显示mutt的版本信息以及当初编译此文件时所给予的参数。
 -x 模拟mailx的编辑方式。
 -z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。

四、举例

这里我用自己备份网站的一段代码举例加以说明

mutt abc@mail.com -s "itdhz数据备份" -a /home/backup/itdhz.sql </root/readme.txt
或者 
echo "test" | mutt abc@mail.com -s "itdhz数据备份" -a /home/backup/itdhz.sql

这段代码表示,发送邮件到abc@mail.com 这个邮箱,邮件主题是“itdhz数据备份”,邮件内容在 /root/readme.txt 中,邮件中包含附件 /home/backup/itdhz.sql。如果要发送多个附件,需要在每个附件前加 -a 参数。

出处:zqifa - 博客园 以上mutt部分版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

以上启动 sendmail 服务后,系统启动或关机时会很慢的解决方法

在大部分linux发行版本中,sendmail这个古老的邮件系统包是默认安装的,装完系统后,重启时,不少兄弟遇到在启动过程中,到了启动sendmail服务的时候就停止了,没有耐性和经验的朋友这时候可能会以为系统出故障或者系统没有装好,其实既不是系统出故障,一般也不是系统没有安装好,而是系统sendmail的时候在查询你设置的主机名的A记录或反向域名记录,由于全球9台DNS根系统都在美国,这个时候会去查询本机主机名对应的dns A记录,特别时你安装系统时设置的一些“奇怪”的主机名的时候,比如webserver等等之类的,这个时候sendmail会去做这个操作过程。

Apr 28 13:41:36 webserver sendmail[3494]: gethostby*.getanswer: asked for "webserver IN AAAA", got type "A"
Apr 28 13:42:36 webserversendmail[3499]: gethostby*.getanswer: asked for "webserver IN AAAA", got type "A"
Apr 28 13:43:37 webserver sendmail: sendmail startup succeeded
Apr 28 13:43:37 webserver sm-msp-queue[3509]: gethostby*.getanswer: asked for "webserver IN AAAA", got type "A"

运气好,我的意思是你的“RP”好,呵呵,查询比较快,你感觉不到异样,“RP”不好,少则一到两分钟,多则四到五分钟,而且要命的是不报任何错误信息,这个时间大大超过了我们能忍受的“8s”时间了,心里承受力差的兄弟就要受煎熬了。

知道了问题的症结,就可以对症下药了,比如我们可以修改系统配置文件/etc/hosts 和/etc/resolv.conf

查看计算名称:hostname

让sendmial绕过查询远程主机,这里给出一种最简单的方法,给主机设置一个别名

修改/etc/hosts  ,未修改之前

127.0.0.1     localhost.localdomain localhost 

修改成
127.0.0.1     localhost.localdomain localhost webserver

再次重新启动sendmail看看

[root@webserver ~]# service sendmail restart
Shutting down sm-client:                                   [  OK  ]
Shutting down sendmail:                                    [  OK  ]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

启动时间已经可以到秒级了。


©著作权归作者所有:来自51CTO博客作者meiyanaa的原创作品,如需转载,请注明出处,否则将追究法律责任 https://blog.51cto.com/justim/239963

Centos 网络监控脚本,mail邮件告警

编写检测脚本

[root@localhost ~]# vim mail.sh

#!/bin/bash

#Network Checking script

iplist="172.X.X.38 172.X.X.40" #需要监控的IP地址池

for ip in $iplist

do

  if ping -c 10 $ip >iplog.txt;cat iplog.txt | grep -w '0% packet loss'
#ens32本机网卡
  then

      rm -f iplog.txt

      echo $ip line is ok 

  elif

     cat iplog.txt | grep -w '100% packet loss'

  then

      rm -f iplog.txt

      echo "服务器 $ip 网络已经断开,请注意.`date` " | mutt -s "[告警]:服务器网络异常!" XXXX@qq.com  #使用mutt邮件服务发送接收人邮箱  也可用mailx 邮件发送,把mutt  改成mail即可。

  fi

done

#!/bin/bash
Monitor(){

for i in  14 15 16 35 38 40 ;do 
#注意,我的括号是放在for循环里面的,一定要放在循环里面,放外面无效!
{
        ip="172.16.3.$i"
        ping=`ping -c 2 $ip |grep From| awk '{print $1}'`
        #echo $ping
        if [ "$ping" = "" ] ; then
                echo 172.16.3.$i is up 
        else
               echo "请注意服务器 $ip 网络已经断开,注意查看,请及时处理。`date` " | mail -s "[告警]: $ip 服务器网络异常!"  XXX@qq.com  #接收人邮箱
        fi
#中括号结束位置也是在for循环里面
}&
done
wait

}
#定义死循环,每30秒调用一次Monitor()方法
step=5
while(true)
do
    Monitor
        #这里是输出到日志文件,我们不开启,直接在控制台查看情况
        # >>$TomcatMonitorLog
        sleep $step
done
 

 

添加执行权限

[root@localhost ~]# chmod 777 mail.sh 
八、添加计划任务,每隔两分钟检测一次

[root@localhost ~]# pwd
/root
[root@localhost ~]# ll
-rwxrwxrwx. 1 root root  446 Mar 22 04:32 mail.sh
[root@localhost ~]# crontab -e

*/2 * * * * /root/mail.sh

————————————————
版权声明:以上脚本为原文链接:https://blog.csdn.net/tladagio/article/details/88739719

Centos mysql和Tomcat服务状态监控脚本,mail邮件告警

编写检测脚本

#!/bin/bash
# func:自动监控tomcat并且在异常时30s发送邮件提醒

#获取本机名称
host=$(hostname)

#获取网卡名称并列出第1行名称
eth=`ifconfig -a | grep 'Ethernet' | awk '{print $1}' | head -1` 

#获取本机IP地址
IP=`/sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p'|grep -v '127.0.0.1'`

Monitor(){

# 获取tomcat进程ID
        TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}')
        echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
# 判断TOMCAT进程是否存在
       if [ $TomcatID ];then  
        echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
# 如果tomcat进程不存在则发送邮件
        else
        echo "时  间:[$(date +'%F %H:%M:%S')]
              服务器:$host
              I    P: $IP 
              tomcat异常,请及时查看..." |mutt -s " [告警] 服务器 $IP tomcat服务异常提醒" XXX@qq.com
        echo "tomcat异常,已发送邮件提醒..." 
       fi

 # 获取mysql进程ID
        MysqlID=`ps -ef|grep  mysqld|grep -E "basedir|datadir" |grep -vE "mysqld_|grep"|awk '{print $2}'`
        port=`netstat -nlt|grep 3306|wc -l`
        echo "[info]开始监控mysql...[$(date +'%F %H:%M:%S')]"
 # 判断mysql进程是否存在
       if [ $port -eq 1 ] && [ $MysqlID ];then
         echo "[info]当前mysql端口和ID为 $port : $MysqlID,继续检测页面..."
# 如果mysql进程不存在,则发送邮件
         else
         echo "时 间: [$(date +'%F %H:%M:%S')]
              服务器: $host
              I    P:$IP 
              mysql异常,请及时查看..."|mutt -s " [告警] 服务器 $IP mysql服务异常提醒" XXX@qq.com
         echo "mysql异常,已发送邮件提醒..." 
       fi
  
# 获取TC5002进程状态
         TC5002=`ps aux | grep -i "TC5002" | grep -v "grep" | wc -l`
         echo "[info]开始监控TC5002...[$(date +'%F %H:%M:%S')]"
       if [ $TC5002 -ge 1 ]
# 判断mysql进程是否存在
         then
         echo "[info]当前TC5002服务正常,继续检测页面..."
# 如果TC5002进程不存在,则发送邮件
         else
         echo "时 间: [$(date +'%F %H:%M:%S')]
              服务器: $host
              I    P:$IP
              TC5002服务异常,请及时查看..."|mutt -s " [告警] 服务器 $IP TC5002服务异常提醒" XXX@qq.com
         echo "TC5002服务异常,已发送邮件提醒..."
       fi 

# 获取Nisec进程状态
         nisec=`ps aux | grep -i "nisec" | grep -v "grep" | wc -l`
         echo "[info]开始监控Nisec...[$(date +'%F %H:%M:%S')]"
       if [ $nisec -ge 1 ]
# 这里判断Nisec进程是否存在
         then
         echo "[info]当前Nisec服务正常,继续检测页面..."
#如果Nisec进程不存在,则发送邮件
         else
         echo "时 间: [$(date +'%F %H:%M:%S')]
              服务器: $host
              I    P:$IP 
              Nisec服务异常,请及时查看..."|mutt -s " [告警] 服务器 $IP Nisec服务异常提醒" XXX@qq.com
         echo "Nisec服务异常,已发送邮件提醒..."
       fi

#获取硬盘使用状态
          partition_list=(`df -h | awk 'NF>3&&NR>1{sub(/%/,"",$(NF-1));print $NF,$(NF-1)}'`)
#设置硬盘预警参数
          critical=85
#判断磁盘使用是否大于80%
         crit_info=""
                  for (( i=0;i<${#partition_list[@]};i+=2 ))
        do
        if [ "${partition_list[((i+1))]}" -lt "$critical" ];then
        echo "当前磁盘使用情况正常 ${partition_list[i]} 已使用 ${partition_list[((i+1))]}%"
        else
            if [ "${partition_list[((i+1))]}" -gt "$critical" ];then
            crit_info=$crit_info"磁盘容量预警!!! ${partition_list[i]} 路径已使用: ${partition_list[((i+1))]}%\n"
            fi
        fi
        done
        if [ "$crit_info" != "" ];then
        echo -e $crit_info | mutt -s " [告警] 服务器 $IP 磁盘容量异常提醒" XXX@qq.com
        fi
# 获取内存使用量
bu=`free | grep 'buffers/cache' | awk '{print $3}'`
to=`free | awk 'NR==2{print $2}'`
mem=`expr "scale=2;$bu/$to" |bc -l | cut -d. -f2`
     echo "当前内存已经使用:${mem}%"
# 判断内存占用大于等85时
       if
        (($mem >= 85))
        then
     echo "时  间:[$(date +'%F %H:%M:%S')]
           服务器:$host  
           I    P: $IP
           内  存:$mem %                    
           内存占用异常,请及时查看.."  |mutt -s " [告警] 服务器 $IP 内存占用异常提醒" XXX@qq.com
fi

#取当前空闲cpu百份比值(只取整数部分)  
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
      echo "CPU使用剩余量: $cpu_idle %"
#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警  
if (($cpu_idle < 20)); then
      echo "时  间:[$(date +'%F %H:%M:%S')]
           服务器:$host  
           I    P: $IP
           C  P U:服务器cpu剩余: $cpu_idle%,
           CPU使用率已经超过预警值,请及时处理。" | mutt -s " [告警] 服务器 $IP CPU使用异常提醒" XXX@qq.com
fi

#网络实时监控
while true
do
    sleep 5
    in=$(cat /proc/net/dev | grep $eth | sed 's=^.*:==' | awk '{print $1}')
    out=$(cat /proc/net/dev | grep $eth | sed 's=^.*:==' | awk '{print $9}')

    dif_in=$((in-in_old))

    if [ $dif_in -gt 1048576 ]
    then
        dif_in1="$((dif_in/1024/1024)) MB/s"

     echo "时  间:[$(date +'%F %H:%M:%S')]
           服务器:$host  
           I    P: $IP
           C  P U:服务器cpu剩余 $cpu_idle%,
           入网流量:${dif_in1}   出网流量:${dif_out1}
           使用率已经超过预警值,请及时处理。" | mutt -s " [告警] 服务器 $IP 网络速率异常提醒" XXX@qq.com
    else
        dif_in1="$((dif_in/1024)) KB/s"
    fi

    dif_out=$((out-out_old))

     if [ $dif_out -gt 1048576 ]
     then
        dif_out1="$((dif_out/1024/1024)) MB/s"

    else
        dif_out1="$((dif_out/1024)) KB/s"
    fi
    echo "入网流量:${dif_in1}   出网流量:${dif_out1}"

    in_old=${in}
    out_old=${out}
done

  echo "------------------------------"
}
 
#定义死循环,每30秒调用一次Monitor()方法
step=300
while(true)
do
    Monitor
        #这里是输出到日志文件,我们不开启,直接在控制台查看情况
        # >>$TomcatMonitorLog
        sleep $step
done

 版权声明:以上脚本为原文链接:程序猿劝退师的博客_peixinRo_CSDN博客和其他网络查询到的资料拼凑而成,如有侵权,请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值