前面分別學習了一些監控腳本和實用的功能腳本,本章節是綜合篇,把前面學習的內容綜合起來,實現對服務器性能的監控。
主要實現如下功能:
為了持續觀察服務器每天的基本運行狀態,提供方便方便易讀的集中的日志記錄數據,需要結合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
到這裡我們整個監控服務器性能的例子就完成了。