shell 學習一

日誌監控:
某模塊輸出日誌格式如下
192.168.1.1 [2010 08:03 11:07:16] * a=(a,x,a) b=(b,b,y) c=(z,c,c)
其中x,y,z的值輸出範圍爲0~9,當且僅當x=3,y=5,z=1的時候我們認爲該條日誌不符合預期
要求對該模塊的日誌作監控,需要滿足如下條件:
1、在每天10:00~22:00期間,監控粒度爲60min;在其餘時間監控粒度爲120min
2、在每天10:00~22:00期間,每次監控到的不符合預期的日誌比例超過10%則通過郵件發送報警給相關人員,
郵件要求說明監控時段以及不符合預期的日誌佔這段時間日誌的比例(精確到小數點後兩位);在其餘時間,
每次監控到的不符合預期的日誌比例超過5%則對該次監控的結果進行記錄,每天10:00統一發出報警郵件
3、監控腳本在默認情況下執行10:00~22:00的監控需求,其餘時間的監控需求通過可配參數進行控制
4、對於一天內的監控結果進行彙總,將不符合預期的日誌比例由高到低進行排序(要求給出對應不符合預期的日誌比例產生的時間)
5、擴展內容,如果對於100臺部署了該模塊的服務器同時進行監控,怎麼做

vi  monitor.sh

#!/bin/bash
##
## 第一個習題 最後修改於 2011-04-16 10:20
###文件目錄 以及時間 限制 等信息
D=`pwd`
filename=1.log
mail_txt=$(date +%Y%m%d).mail.txt
date_h=`date +%H`
Limit_a="10"
Limit_b="5"

### 錯誤的行數
wrong_line=`awk -F "[,)(]+" -v a=0 '{if ($3 == "3" && $8 == "5" && $10 == "1") {a+=1}}END{print a}' ${filename}`

####當前小時內總log數量

total_line=`grep -E "$(date +"%Y %m:%d %H:")[0-9]+:[0-9]+" ${filename} |wc -l`
##total_line=`wc -l < ${filename}`

###百分比
###Percentage=`echo "scale=2;${wrong_line}/${total_line}" |bc`   ###精確到小數點後兩位 例如 0.25
Percentage=`awk "BEGIN{c=($warning/$total)*100;printf(\"%d\",c)}"`
### 輸出整數 例如 百分比爲25% 輸出爲0.25

###開始跑程序
cd ${D}
if [ ${date_h} > "10" && ${date_h} < "22" ]; then
        if [ ${Percentage} > ${Limit_a} ]; then
                echo "date is : `date +"%Y %m:%d %H:"`" "perce is :"`awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` | mail -s "monitor log" [email protected]
                ###輸出結果 當前時間精確到小時,輸出百分比精確到小數點後兩位 發送郵件 例如 date is : 2011 04:16 09: perce is :30.43%

                echo "`date +"%Y:%m:%d:%H"`" `awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> monitor.log
                ### 輸出監控百分比到 彙總log中去  例如:2011:04:16:09 30.43%
        else
                echo "`date +"%Y:%m:%d:%H"`" `awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> monitor.log
        fi
else
        case ${date_h} in
                "24")
                if [ ${Percentage} > ${Limit_b} ]; then
                        echo "date is : `date +"%Y %m:%d %H:"`" "perce is :"`awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> ${mail_txt}     
                        ###對百分比超出5%的數據進行記錄

                        echo "`date +"%Y:%m:%d:%H"`" `awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> monitor.log
                        ### 輸出監控百分比到 彙總log中去  例如:2011:04:16:09 30.43%

                        mail -s "monitor log" [email protected] < cat ${mail_txt}
                        ### 在24點最後一次統計的時候 將0-10點 22-24點中百分比超過5%的記錄發送郵件

                        sort -r -k 2 monitor.log > new_monitor.log
                        ###排序 一天彙總的記錄 按照第二字段 百分比的 由高到低的順序排列
                else
                        echo "`date +"%Y:%m:%d:%H"`" `awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> monitor.log
                        sort -r -k 2 monitor.log > new_monitor.log

                ;;
                *)
                if [ ${Percentage} > ${Limit_b} ]; then
                        echo "date is : `date +"%Y %m:%d %H:"`" "perce is :"`awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> ${mail_txt}
                        echo "`date +"%Y:%m:%d:%H"`" `awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> monitor.log
                else
                        echo "`date +"%Y:%m:%d:%H"`" `awk "BEGIN{c=(${wrong_line}/${total_line})*100;printf(\"%0.2f\", c);print \"%\"}"` >> monitor.log
                fi
                ;;

        esac
fi

配合crontab執行

* */[10-22] * * * root bash monitor.sh

* [23-09]/2 * * * root bash monitor.sh

第三條要求 在shell中沒有體現

關於第五條要求,希望大家給予意見,(*^__^*) 嘻嘻……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章