开发本身的监控系统1、email篇

前言: php

随着维护服务器量的增多,愈来愈以为监控的重要性。监控,就是运维人员的眼睛,没有了监控,你不知道磁盘是否满了,网络流量是否超标,甚至服务器是否宕机。监控的重要性不言而喻。市面上的监控软件也不少,如商业版的ipmontor、opmanager,免费开源的nagios、cacti等。每一个监控软件都有各自优缺点和应用场景,这里不去探讨。本文要探讨的是从一个初学者的角度去打造属于本身的监控系统。共分为三部分:email篇web篇移动篇(android)。好了,不废话了,下面开始。

email篇:

关键字:shell、email html

原理:
定时执行监控脚本,提取服务器运行状态,如系统负载、磁盘空间或是相关服务是否运行等,只要有一项异常,即立刻发送邮件警报。下面是脚本内容(因为只是个事例,因此只设定了两个监控项目,你们根据本身的需求增减监控项目)。 linux

#!/bin/bash
#Server status monitor
#by caishzh 2013
 
#初始化变量及设置阀值
DIR="/root/tool"
NOW=$(date "+%F %T")
>${DIR}/messages.txt  #先清空messages.txt里的内容
 
ADMIN="xxx@qq.com" #邮箱地址,用于接收警报邮件
HOSTNAME="Server1"
IP=$(ifconfig eth0|grep 'inet addr'|sed 's/.*addr:\(.*\) Bcast:.*/\1/')
 
UPTIME_MAX=3 #系统负载
DISK_MAX=90 #磁盘使用率
 
#系统负载
UPTIME=$(uptime|sed 's/^.*age: \(.*\)$/\1/')
UPTIME_NOW=$(echo $UPTIME|awk -F',' '{print $1}')
if echo "$UPTIME_NOW>$UPTIME_MAX"|bc >/dev/null;then  #UPTIME_NOW包含小数,而test只支持整数间的比较,因此这里使用bc
     echo "UPTIME: $UPTIME" >>${DIR}/messages.txt
fi
 
#根分区
DISK=$(df -h|grep /$|awk '{print $5,$2,$4}')
DISK_USAGE=$(echo $DISK|awk '{print $1}'|tr -d '%')
[ "$DISK_USAGE" -ge "$DISK_MAX" ] && $(echo "DISK: $DISK" >> ${DIR}/messages.txt)
 
#若是messages.txt文件不为空则发送警报信
if [ -s ${DIR}/messages.txt ];then
     mail -s "system monitor: $NOW  $IP  $HOSTNAME" "$ADMIN" <${DIR}/messages.txt
fi

将脚本放到/root/tool目录下,给予执行权限: android

chmod 755 /root/tool/system_monitor.sh

放入crontab中,每3分钟执行一次: ios

echo "*/3 * * * * root /root/tool/system_monitor.sh" >>/etc/crontab

实际生产环境下执行该脚本后收到的警报邮件:
monitor_email web

开发本身的监控系统2、web篇
开发本身的监控系统3、移动篇(android) shell

参考:

简单的系统监控脚本
鸟哥的linux私房菜–学习shell scripts bash

相关文章
相关标签/搜索