前言:
随着维护服务器量的增多,越来越觉得监控的重要性。监控,就是运维人员的眼睛,没有了监控,你不知道磁盘是否满了,网络流量是否超标,甚至服务器是否宕机。监控的重要性不言而喻。市面上的监控软件也很多,如商业版的ipmontor、opmanager,免费开源的nagios、cacti等。每个监控软件都有各自优缺点和应用场景,这里不去探讨。本文要探讨的是从一个初学者的角度去打造属于自己的监控系统。共分为三部分:email篇、web篇和移动篇(android)。好了,不废话了,下面开始。
email篇:
关键字:shell、email
原理:
定时执行监控脚本,提取服务器运行状态,如系统负载、磁盘空间或是相关服务是否运行等,只要有一项异常,即马上发送邮件警报。下面是脚本内容(由于只是个事例,所以只设定了两个监控项目,大家根据自己的需求增减监控项目)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/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目录下,给予执行权限:
chmod 755 /root/tool/system_monitor.sh
放入crontab中,每3分钟执行一次:
echo "*/3 * * * * root /root/tool/system_monitor.sh" >>/etc/crontab
实际生产环境下执行该脚本后收到的警报邮件:
(责任编辑:IT) |