linux服務器性能(網卡流量、CPU、內存、磁盤使用率)監控

  轉載請註明:http://www.cnblogs.com/zishengY/p/6819606.html html

  廣義的網站的監控涵蓋全部的非業務行爲的數據採集與管理,包括數據分析師和產品設計師使用的網站用戶行爲日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。react

     本文主要是經過shell腳原本收集服務器性能指標,如系統load、內存佔用、磁盤IO、CPU佔用,並將其寫入一個文件中,及時判斷應用狀況,防患於未然 。linux

  實現步驟以下:shell

第一步:編寫shell腳本

vim check.sh

添加下面腳本以後保存 vim

#!/bin/bash
#這個腳本使用來統計CPU、磁盤、內存使用率、帶寬的
total=0
system=0
user=0
i=0

#帶寬使用狀況
time=`date "+%Y-%m-%d %k:%M"`
day=`date "+%Y-%m-%d"`
minute=`date "+%k:%M"`
echo  "*************************************************************************" >> 123.txt
echo "統計開始時間:$day $minute" >> 123.txt

#循環五次,避免看到的是偶然的數據
echo "#帶寬的使用狀況:#" >>123.txt
while (( $i<5 ))
do
#原先的`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`方式獲取網卡的信息爲空,已經註釋掉
#rx_before=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
#tx_before=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
rx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
tx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
sleep 2
#rx_after=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
#tx_after=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
rx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
tx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')

rx_result=$[(rx_after-rx_before)/1024/1024/2*8]
tx_result=$[(tx_after-tx_before)/1024/1024/2*8]
echo  "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >>123.txt

let "i++"
done

rx_result=$(cat 123.txt|grep "$time"|awk '{In+=$4}END{print In}')
tx_result=$(cat 123.txt|grep "$time"|awk '{Out+=$7}END{print Out}')
In_Speed=$(echo "scale=2;$rx_result/5"|bc)
Out_Speed=$(echo "scale=2;$tx_result/5"|bc)
#echo "#帶寬的5次的平均值是:#" >>123.txt
echo  "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>123.txt

#CPU使用狀況
which sar > /dev/null 2>&1
if [ $? -ne 0 ]
then
  total=`vmstat 1 5|awk '{x+=$13;y+=$14}END{print x+y}'`
  average=$(echo "scale=2;$total/5"|bc)
fi
echo "#CPU使用率:#" >>123.txt
echo "Total CPU  is already use: $average%" >>123.txt
#磁盤使用狀況(注意:須要用sed先進行格式化才能進行累加處理)
disk_used=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{used+=$3} END{print used}')
disk_totalSpace=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{totalSpace+=$2} END{print totalSpace}')
disk_all=$(echo "scale=4;$disk_used/$disk_totalSpace" | bc)
disk_percent1=$(echo $disk_all | cut -c 2-3)
disk_percent2=$(echo $disk_all | cut -c 4-5)
disk_warning=`df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{if ($5>85) print $5 $6;} '`
echo "#磁盤利用率#" >>123.txt
echo "hard disk has used: $disk_percent1.$disk_percent2%" >>123.txt
echo -e "\t\t#磁盤存在目錄使用率超過85%報警#" >>123.txt
echo -e "\t\tover used: $disk_warning" >>123.txt


#內存使用狀況
memery_used=$(free -m | awk 'NR==2' | awk '{print $3}')
buffer_used=$(free -m | awk 'NR==2' | awk '{print $6}')
cache_used=$(free -m | awk 'NR==2' | awk '{print $7}')
free=$(free -m | awk 'NR==2' | awk '{printf $4}')
memery_all=$(free -m | awk 'NR==2' | awk '{print $2}')
used_all=$[memery_all-(free+buffer_used+cache_used)]
echo "$used_all $memery_all $free" >>123.txt
memery_percent=$(echo "scale=4;$memery_used / $memery_all" | bc)
memery_percent2=$(echo "scale=4; $used_all / $memery_all" | bc)
percent_part1=$(echo $memery_percent | cut -c 2-3)
percent_part2=$(echo $memery_percent | cut -c 4-5) 
percent_part11=$(echo $memery_percent2 | cut -c 2-3)
percent_part22=$(echo $memery_percent2 | cut -c 4-5)
echo "#內存使用率#" >> 123.txt
echo "system memery is already use: $percent_part1.$percent_part2%" >>123.txt
echo "actual memery is already use: $percent_part11.$percent_part22%" >>123.txt

echo  "結束本次統計:$day $minute" >> 123.txt
echo  "*************************************************************************" >> 123.txt
echo -e "\n\n\n\n" >> 123.txt

第二步:建立shell腳本中用到的文件123.txt    

touch 123.txt

第三步:給check.sh和123.txt授予全部權限  

chmod 777 check.sh
chmod 777 123.txt

第四步:執行check.sh腳本   

./check.sh

第五步:查看執行寫入文件的狀況

出現這信息表名腳本成功運行實時統計狀況。bash

 

參考文章

如果想使用定時任務,可以使用crontab進行設置,請參見這篇文章服務器

 

學習本就是一個不斷模仿、練習、再到最後面本身原創的過程。運維

雖然可能歷來不能寫出超越網上通類型同主題博文,但爲何仍是要寫?
於本身而言,博文主要是本身總結。假設本身有觀衆,畢竟講是最好的學(見下圖)。
post

於讀者而言,筆者能在這個過程get到知識點,那就是共贏了。
固然因爲筆者能力有限,或許文中存在描述不正確,歡迎指正、補充!
感謝您的閱讀。若是本文對您有用,那麼請點贊鼓勵。性能

相關文章
相關標籤/搜索