歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

linux實戰(十一)----shell監控服務器性能---綜合運用

前面分別學習了一些監控腳本和實用的功能腳本,本章節是綜合篇,把前面學習的內容綜合起來,實現對服務器性能的監控。

主要實現如下功能:

為了持續觀察服務器每天的基本運行狀態,提供方便方便易讀的集中的日志記錄數據,需要結合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)

相關命令腳本學習

獲取CPU負載信息

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:刷新時間間隔。如果不指定,只顯示一條結果。
count:刷新次數。如果不指定刷新次數,但指定了刷新時間間隔,這時刷新次數為無窮。
vmstat 1 5 表示每1秒刷新一次,取5次 sed -n '3,$p ' -n表示只打印選中的行,地址是一個數字,則表示行號; “$"符號,表示最後一行。 '3,$'表示 第3行到最後一行,p是命令表示打印輸出。   awk '{x = x + $15} END {print x/5}' 表示將每行的 第15列相加後 除以5求平均   awk -F. '{print $1}' 用.來分隔取第1列 也就是對平均數 取整的意思

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 負責備份刪除原文件

checkSys.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

\

\

結果:

\

backup.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  

到這裡我們整個監控服務器性能的例子就完成了。

Copyright © Linux教程網 All Rights Reserved