前言: 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
實際生產環境下執行該腳本後收到的警報郵件:
web
開發本身的監控系統2、web篇
開發本身的監控系統3、移動篇(android) shell