shell-告警系統
shell專案-告警系統
需求背景
使用shell定製各種個性化告警工具,但需要統一化管理、規範化管理。當zabbix伺服器之間因為網路原因而無法上報資料時,就可以先通過shell指令碼來暫時監控。這樣的告警系統屬於分散式的,需要在每一臺機器上去放置該shell指令碼,每一臺機器都獨立監控,不需要依賴其他機器。
思路:指定一個指令碼包,其中包含以下內容
(1)主程式:作為整個指令碼的入口,是整個系統的命脈
(2)配置檔案:是一個控制中心,用他來開關各個子程式,指定各個相關聯的日誌檔案
(3)子程式:這個才是真正的監控指令碼,用來監控各個指標
(4)郵件引擎:是由一個pythen程式來實現,它可以定義發郵件的伺服器、發郵件人以及發件人密碼。
(5)輸出日誌:整個監控系統要有日誌輸出要求:機器角色很多種,但是所有機器上都要部署同樣的監控系統,也就是說所有的機器不管什麼角色,整個程式框架是一致的,不同之處在於根據不同的角色,定製不同的配置檔案。
程式框架
告警系統主指令碼
先定義各個監控系統的目錄,然後再去定義主指令碼,因為是分散式的,所以每一臺機器都需要這樣去做。可以在其他機器上建立那些目錄,然後將這臺機器上的指令碼拷貝過去,並做一些更改。
將指令碼全部放在/usr/local/sbin目錄下,方便以後的查詢。
建立mon目錄,並建立bin 、 conf 、shares 、log 、mail這幾個子目錄。
-主指令碼放在/bin目錄下,並寫入以下內容
#!/bin/bash
##written by zcy
#是否傳送郵件的開關,0為是指不傳送
export send=1 //所有的子指令碼只是關閉告警,監控還是繼續監控
#過濾ip地址
export addr=` /sbin/ifconfig |grep -A1 "ens33: "|awk '/inet/ {print $2}'`
dir=`pwd`
#只需要最後一些目錄名
last_dir=`echo $dir |awk -F '/' '{print $NF}'`
#下面判斷的目的是,保證執行指令碼的時候,我們在bin目錄裡面,不然監控指令碼、郵件和日誌很有可能找不到
if [ $last_dir == "bin" ] || [ $last_dir == "/bin/" ] ;
then
conf file="../conf/mon.conf"
else
echo "you shoud cd bin dir"
exit
fi
exec 1 >> ../log/mon.log 2>> ../log.err.log
echo "`date+"%F %T"` load average"
#主指令碼中呼叫了子指令碼
/bin/bash ../shares/load.sh
#先檢查配置檔案中舒服需要監控502
if grep -q 'to_mon_502=1' $conf_files ;
then
export log=`grep 'logfile='$conf file |awk -F '=' '{print $2}' |sed 's/ //g'`
/bin/bash ../shares/502.sh
fi
告警系統配置檔案
它主要定義一些開關和日誌的路徑
切換到conf子目錄中建立配置檔案mon.conf,並寫入以下內容
## to config the options if to monitor
## 定義mysql的伺服器地址、埠以及user 、password
to_mon_cdb=0 ##0 or 1, default 0,0 not monitor, 1 monitor
db_ip=192.168.244.136
db_port=3315
db_user=zcy
db_pass=xxxxx
## httpd 如果是1則監控,為0不監控
to_mon_httpd=0
## php 監控為1 不監控為0
to_mon_php_socket=0
## http_code_502 需要定義訪問日誌的路徑
to_mon_502=1
logfile=/data/log/xxx.xxx.com/access.log
## request_count 定義日誌路徑以及域名
to_mon_request_count=0 //是否監控請求數,為0不監控
req_log=/data/log/www.discuz.net/access.log
domainname=www.discuz.net
配置檔案怎麼定義取決於子指令碼里面需要用到的資源, 可以把用到的所有資源,比如日誌、域名等全部寫入到子指令碼中,前提是機器不多才可以。
將請求日誌摘取到配置檔案中,目的是為保證通用性。
告警系統監控專案 ##
- 監控專案放在shares目錄下,建立load.sh,寫入以下內容
#!/bin/bash
load=`uptime |awk -F 'average:' '{print $2}'|cut -d ',' -f1 |sed 's/ //g' |cut -d . -f1` //系統負載的值
if [ $load -gt 10 ] && [ $send -eq "1" ]
then
echo "$addr `date+%T` load is $load" > ../log/load.tmp 這個日誌是用來發郵件用到的日誌。
/bin/bash ../mail/mail.sh $addr\_load $load ../log/load.tmp
fi
echo "`date+%T` load is $load"
- 建立502.sn
#!/bin/bash
d=`date -d "-1 min" +%H:$M`
c_502=`grep :$d: $log |grep '502' |wc -l `
if [ $c_502 -gt 10 ] && [ $send == 1 ]; then
echo "$addr $d 502 count is $c_502">../log/502.tmp
/bin/bash../mail/mail.sh $addr\_502 ../log/502.tmp
fi
echo "`date+%T` 502 $c_502"
- 監控磁碟 使用率disk.sh
#!/bin/bash
rm -f ../log/disk.tmp
for in `df -h |awk -F '[%]+' '{print $5}' |grep -v Use`
do
if [ $r -gt 90 ] && [ $send -eq "1" ]
then
echo "$addr `date+%T` disk uesrage is $r" >>../log/disk.tmp
fi
if [ -f ../log/disk.tmp ]
then
df -h >> ../log/disk.tmp
/bin/bash ../mail/mail.sh $addr \_disk $r ../log/disk.tmp
echo "`date+%T` disk uesrage in nook"
else
echo "`date+%T` disk uesrage is ok"
fi
awk -F ’ [ % ]+’ /表示以一個或多個空格或%作為分隔符
相關文章
- 告警系統郵件引擎 執行告警系統
- AOP實現系統告警
- shell -5 告警系統郵件
- 【系統設計】指標監控和告警系統指標
- AlertManager解析:構建高效告警系統
- 監控系統告警指令碼集合指令碼
- 基於AWS-ELK部署系統日誌告警系統
- 運維文件:系統監控及告警配置運維
- AI識別工人安全繩佩戴告警系統AI
- 多雲監控告警系統的優勢
- 基於多雲構建監控告警系統
- 細說夜鶯監控系統告警自愈機制
- 可伸縮的微服務告警系統設計指南微服務
- Shell-變數高階用法變數
- 車輛違規掉頭車禍識別告警系統
- 尚矽谷監控告警系統(Zabbix)視訊教程釋出
- Prometheus+Grafana+Alertmanager搭建全方位的監控告警系統PrometheusGrafana
- 5 個適合系統管理員使用的告警視覺化工具視覺化
- 分散式監控系統Zabbix3.4-釘釘告警配置記錄分散式
- 容器雲平臺監控告警體系(五)—— Prometheus傳送告警機制Prometheus
- 安防監控影片匯聚系統EasyCVR平臺如何接入EHOME告警?VR
- 告警運維中心|構建高效精準的告警協同處理體系運維
- shell-計算下一天的日期
- 快速實現釘釘告警通知、處理告警、關閉告警
- 雲監控告警2.0:革新傳統告警機制,引領智慧化監控新時代
- 告警與恢復告警原理及實現
- 22.Prometheus告警之Alertmanager告警(二)-手機電話加簡訊告警Prometheus
- prometheus告警配置Prometheus
- Shell-變數高階用法 (3) 有型別變數變數型別
- shell-定義一個顏色輸出字串函式字串函式
- vivo統一告警平臺設計與實踐
- HertzBeat赫茲節拍 v1.0.beta.4 釋出,易用友好的監控告警系統
- HertzBeat赫茲節拍 v1.0.beta.5 釋出,易用友好的監控告警系統
- ZABBIX新功能系列1-使用Webhook將告警主動推送至第三方系統WebHook
- MASW之APM告警
- 【轉!】skywalking告警配置
- nagios mail告警通知iOSAI
- 21.Prometheus告警之Alertmanager告警(一)-郵件釘釘微信Prometheus