1. 程式人生 > >開放系統監控shell腳本

開放系統監控shell腳本

cal crontab free server password tex pos term letter

開發系統監控腳本

1、需求描述?
編寫名為sysmon.sh的Shell監控腳本
監控內容包括CPU使用率、內存使用率、根分區的磁盤占用率
百分比只需精確到個位,如7%、12%、23%等
出現以下任一情況時告警:磁盤占用率超過90%、CPU使用率超過80%、
內存使用率超過90%,告警郵件通過mail命令發送到指定郵箱
結合crond服務,每半小時執行一次監控腳本?

2、思路與命令測試
?分析:監控內容包括CPU使用率、內存使用率、根分區的磁盤占用率
df?命令
awk??命令
mpstat??命令(需安裝sysstat軟件包)
free?命令
crontab?命令
3、腳本編程與調試
?使用用df命令提取出根分區的磁盤占用率,賦值給變量DUG

?使用mpstat命令提取CPU使用率,賦值給變量CUG
?使用free命令提取出內存使用率,賦值給變量MUG
?使用if語句判斷上述監控項目是否超標,將需要告警的信息保存到/tmp/alert.txt文件;若該存在則作為告警郵件發送
?調試優化並設置crontab計劃

使用用df命令提取出根分區的磁盤占用率
df -hT |grep "/$" |awk ‘{print $6}‘ |awk -F% ‘{print $1}‘
技術分享圖片
使用mpstat命令提取CPU使用率,先安裝需安裝sysstat軟件包
[root@localhost opt]# yum -y install sysstat
技術分享圖片
技術分享圖片

[root@localhost opt]# id=$(mpstat |grep all |awk ‘{print $12}‘ |awk -F"." ‘{print $1}‘)

[root@localhost opt]# echo "$id"
99
[root@localhost opt]# u=expr 100 - $id
[root@localhost opt]#
[root@localhost opt]# echo "$u"
1

使用free命令提取出內存使用率,
技術分享圖片
[root@localhost ~]# total=$( free -m |grep Mem |awk ‘{print $2}‘ )
[root@localhost ~]# echo $total ###撈取總內存
976
[root@localhost ~]# used=$( free -m |grep Mem |awk ‘{print $3}‘ )

[root@localhost ~]# echo $used ###撈取使用的內存。
589
[root@localhost ~]# mug=expr $used \* 100 / $total ### 這裏我們要用到運算,使用的除以總的,但是直接除是小數,我們需要的是百分比,在則expr只能算整數運算,所以的先乘以100,得到的數值也是整數部分
[root@localhost ~]# echo $mug
60

編輯腳本信息編寫名為sysmon.sh的Shell監控腳本

  1. 先編輯變量文件
    使用用df命令提取出根分區的磁盤占用率,賦值給變量DUG
    ?使用mpstat命令提取CPU使用率,賦值給變量CUG
    ?使用free命令提取出內存使用率,賦值給變量MUG
    技術分享圖片
    編輯警告信息配置文件
    出現以下任一情況時告警:磁盤占用率超過90%、CPU使用率超過80%、
    內存使用率超過90%,告警郵件通過mail命令發送到指定郵箱

生成告警文件,配置如下
技術分享圖片
[ $DUG -ge 90 ] && echo "根分區內存使用率超標達到:$DUG %" >> /tmp/warrin.txt
###當根分區內存使用率大於 90 %,輸出報警信息,並定向保存到/tmp/warrin.txt警告文件中
[ $CUG -ge 80 ] && echo "cpu使用率超標達到: $CUG %" >> /tmp/warrin.txt
###當cpu使用率大於 80 %,輸出報警信息,並定向保存到/tmp/warrin.txt警告文件中
[ $MUG -ge 90 ] && echo "內存使用率超標達到: $MUG %" >> /tmp/warrin.txt
###當內存使用率大於 90 %,輸出報警信息,並定向保存到/tmp/warrin.txt警告文件中
技術分享圖片
當有告警文件產生時,就發送郵件,

[ -f /tmp/warrin.txt ] && cat /tmp/warrin.txt | mail -s "警告"$amail && rm -rf /tmp/warrin.txt
###當/tmp/warrin.txt有文件生成時,就發送郵件,並刪除/tmp/warrin.txt

整篇配置如下
技術分享圖片

###設置郵箱服務,添加第三方服務器發送郵件。
在郵箱配置文件 vim /etc/mail.rc 添加如下文件。
set bsdcompat
set [email protected] ###對方收到郵件時顯示的發件人
set smtp="smtps://smtp.qq.com:465" ###指定第三方發送郵件的smtp服務器地址
set [email protected] ### 第三方發郵件的用戶名
set smtp-auth-password=vyluygwcaxnabajc ###郵箱密碼使用SMTP授權碼
set smtp-auth=login ###SMTP的認證方式。默認是LOGIN,也可改為CRAM-MD5或PLAIN方式
set nss-config-dir=/etc/pki/nssdb ###存放認證證書的地址
set ssl-verify=ignore ###ssl協議發送

[root@localhost opt]# systemctl restart postfix.service? #重啟服務

測試,修改參數,生成告警文件,並檢驗郵箱是否發送。
技術分享圖片

運行程序
./sysmon.sh
可以看到郵件
技術分享圖片
改回參數,編輯計劃任務文件
crontab –e 添加計劃任務,在裏面添加該配置文件

[root@localhost opt]# systemctl start crond.service ###開啟計劃任務
[root@localhost opt]# crontab -e ###編輯計劃任務
/30 /opt/sysmon.sh ### /表示每隔30分鐘,後面運行程序不用加點,直接運行
先做一分鐘測試
技術分享圖片
查看計劃任務狀態
技術分享圖片
每隔一分鐘會收到一封郵件
技術分享圖片
表示計劃任務也設置成功了。
在將其改回30,就可以了

再發送郵件時,出現的一些問題及解決辦法:
Resolving host /smtp.qq.com . . .Could not resolve host: /smtp.qq.com"/root/dead.letter" 11/330
. . . message not sent.
是域名解析不成功,解決辦法:
在vim /etc/resolv.conf #在本文件中增加一條記錄,必須寫在第一個,因為這個文件時順序執行,會解析第一個nameserver,第一個解析不了再去解析下一個
nameserver 114.114.114.114

如果遇到,503錯誤,smtp-server: 535 Error
那代表你的郵箱還沒開啟smpt服務。 QQ郵箱登錄後,設置–>帳號–>pop3/smtp,開啟,然後QQ郵箱還會給出授權碼,就是上面配置時候填的smtp-auth-passwd。

· · 連接超時 ,防火墻和核心防護沒關。
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

開放系統監控shell腳本