前面分別學習了一些監控腳本和實用的功能腳本,本章節是綜合篇,把前面學習的內容綜合起來,實現對服務器性能的監控。
主要實現如下功能:
為了持續觀察服務器每天的基本運行狀態,提供方便方便易讀的集中的日志記錄數據,需要結合shell腳本的任務計劃設置,定期記錄不同時間段服務器的CPU負載、內存和交換空間、磁盤使用率等各種信息。
1、每隔15分鐘記錄一次服務器的基本運行狀況,包括:CPU負載、內存和交換空間、磁盤空間信息
2、最近用戶等情況
3、記錄當時的時間信息(以YYYY-mm-dd HH:MM:SS的格式輸出所有信息追加到文件/data/shell/running.log中)
4、每天晚上00:00分時備份running.log文件;進行壓縮備份,保存到/data/shell目錄中;備份的文件名參考:runing.log-YYYYmmdd.tar.bz2;備份完成刪除當天的記錄文件(running.log)
function GetSysCPU { CpuIdle=`vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'` CpuNum=`echo "100-$CpuIdle" | bc` echo $CpuNum }vmstat用來顯示虛擬內存的信息 delay:刷新時間間隔。如果不指定,只顯示一條結果。
CpuIdle=`vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'`
意思是 在vmstat 中 計算出 5秒內的CPU空閒時間平均數
CpuNum=`echo "100-$CpuIdle" | bc`
用100減去空閒時間百分比平均數 則得到 CPU的使用情況。
也就是我們求的CPU負載信息。
function GetSysMem { Mem=`free -m | grep Mem | awk '{print $4}'` echo $Mem }使用free命令查看linux系統內存使用情況:(以M為單位)
# free -m
total used free shared buffers cached
Mem: 3952 3414 538 0 168 484
-/+ buffers/cache: 2760 1191
Swap: 8191 86 8105
free -m | grep Mem | awk '{print $4}獲取剩余內存
grep Mem: 選出含有Mem的行
awk '{print $4}' 以空白作分隔,取第四列,這裡對應到 free,也就是獲取剩余內存。
function GetSysSwap { swap_free=`free -m | grep Swap | awk '{print $4}'` echo $swap_free }free -m | grep Swap | awk '{print $4} 獲取剩余當前剩余的交換分區free大小
grep Swap: 選出含有Swap的行
awk '{print $4}' 以空白作分隔,取第四列,這裡對應到 free,也就是獲取剩余Swap。
function GetSysSpace { SPACE=`df| grep -v Use | gawk '{x = x + $5} END {print x}' | sed 's/%//'` echo $SPACE }
df| grep -v Use | gawk '{x = x + $5} END {print x}' | sed 's/%//'
df是查詢磁盤使用情況的命令
grep -v Use 去掉含有Use字符串的這一行
sed 's/%//' s就是替換符,這裡表示匹配到後面含有%號的字符串取%號前面的值(也就是s位置的值)
gawk '{x = x + $5} END {print x}' 用空白分隔後取每一行的第5列 相加 得到最後值
也就是 磁盤空間的總使用百分比。
使用last命令
YYYY-mm-dd HH:MM:SS的格式
date +"%Y-%m-%d %H:%M:%S"
time=`date +"%Y%m%d"` tar cvf - /data/shell/running.log > runing.log-${time}.tar.bz2 rm running.log新建一個running.log在/data/shell目錄下
然後運行命令
解壓可用
tar -xvf runing.log-20160229.tar.bz2
我們在相關命令中已經學習了實現監控服務器性能的所有命令。
我們現在就把它們組合起來。
分別組合成
checkSys.sh 負責把所有監控信息寫入running.log文件
backup.sh 負責備份刪除原文件
function GetSysCPU { CpuIdle=`vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'` CpuNum=`echo "100-$CpuIdle" | bc` echo $CpuNum } echo CPU have used `GetSysCPU`% >> running.log function GetSysMem { Mem=`free -m | grep Mem | awk '{print $4}'` echo $Mem } echo free Mem is `GetSysMem`M >> running.log function GetSysSwap { swap_free=`free -m | grep Swap | awk '{print $4}'` echo $swap_free } echo free Swap is `GetSysSwap` M >> running.log function GetSysSpace { SPACE=`df| grep -v Use | gawk '{x = x + $5} END {print x}' | sed 's/%//'` echo $SPACE } echo Space have used `GetSysSpace`% >> running.log last >> running.log date +"%Y-%m-%d %H:%M:%S" >> running.log
vim checkSys.sh 後寫入腳本
運行
chmod +x /data/shell/checkSys.sh
./checkSys.sh
結果:
time=`date +"%Y%m%d"` tar cvf - /data/shell/running.log > runing.log-${time}.tar.bz2 rm running.log
vim backup.sh 後寫入腳本
運行
chmod +x /data/shell/backup.sh
./backup.sh
現在兩個腳本都可以正常運行了。
我們把checkSys設置成 每15分鐘運行一次
把backup.sh設置成每天00:00:00運行一次
crontab -e
進入定時運行配置
加入以下定時運行計劃即可。
*/15 * * * * /data/shell/checkSys.sh 0 0 * * * /data/shell/backup.sh
到這裡我們整個監控服務器性能的例子就完成了。