Linux系統(tǒng)監(jiān)控知識分享
作為系統(tǒng)運(yùn)維人員,就要實(shí)時的監(jiān)控系統(tǒng)的一些重要參數(shù),不如僵尸進(jìn)程,CPU的利用率,內(nèi)存的使用情況,磁盤空間的使用情況,系統(tǒng)的均衡負(fù)載,根據(jù)得到的最新信息,我們就能判斷系統(tǒng)運(yùn)行的狀態(tài)是否良好。本人接觸Linux系統(tǒng)也有一點(diǎn)時間,在網(wǎng)上看看了,經(jīng)過整理,將一些常用的系統(tǒng)監(jiān)控的命令shell腳本拿出來曬曬,希望給新手提供學(xué)習(xí)的機(jī)會,同時也希望經(jīng)驗(yàn)豐富者提夠些技術(shù)知道,多多探討交流!
獲得某個用戶的某個進(jìn)行的信息:
- function GetPID #user #name
- {
- PsUser=$1
- #echo $PsUser
- PsName=$2
- #echo $PsName
- pid=`ps -u $PsUser | grep $PsName | grep -v grep | grep -v vi | grep -v dbx\n | grep -v tail | grep -v start | grep -v stop | sed -n 1p | awk '{print $1}'`
- echo $pid
- }
- PID=`GetPID lgy cat`
- echo $PID
- #The process does not exist.
- if [ "-$PID" == "-" ]
- then
- {
- echo "The process does not exist."
- }
- fi
這里面涉及一些最基本的進(jìn)程監(jiān)控命令,在linux中你只要man ps就會得到很多使用說明,grep按照一定的匹配規(guī)則進(jìn)行字符串分割匹配,還有一些簡單的控制語句,這些基本的shell語法應(yīng)該是我們的基本技能,在晚上會有很多的學(xué)習(xí)資料。
獲得CPU的使用率:
- function GetCPU
- {
- CPUValue=`ps -p $1 -o pcpu | grep -v CPU | awk '{print $1}' | awk -F. '{print $1}'`
- echo $CPUValue
- }
- function CheckCPU
- {
- PID=$1
- cpu=`GetCPU $PID`
- if [ $cpu -gt 80 ]
- then
- {
- echo "The usage of cpu is larger than 80%"
- }
- else
- {
- echo "The usage of cpu is normal"
- }
- fi
- }
- CheckCPU $PID
這個程序和上一個代碼片段是一脈相承,本段代碼的運(yùn)行結(jié)果一會會有相應(yīng)的展示!
這段腳本的主要目的是用來進(jìn)行對某個進(jìn)程的內(nèi)存使用情況的檢測:
- function GetMem
- {
- MemUsage=`ps -o vsz -p $1 | grep -v VSZ`
- ((MemUsage /= 1024))
- echo $MemUsage
- }
- mem=`GetMem $PID`
- if [ $mem -gt 1600 ]
- then
- {
- echo "The usage of memory is larger than 1.6G"
- }
- else
- {
- echo "The usage of memory is normal"
- }
- fi
這是用來進(jìn)行獲得此進(jìn)程的句柄使用量:
- function GetDes
- {
- DES=`ls /proc/$1/fd | wc -l`
- echo $DES
- }
- des=`GetDes $PID`
- if [ $des -gt 900 ]
- then
- {
- echo "The number of des is larger than 900"
- }
- else
- {
- echo "The number of des is normal"
- }
- fi
進(jìn)行對某個端口的綁定的查詢:
- function Listening
- {
- TCPListeningNum=`netstat -an | grep ":$1 " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`
- UDPListenNum=`netstat -an | grep ":$1 " | awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' | wc -l`
- ((ListeningNum = TCPListeningNum + UDPListenNum ))
- if [ $ListeningNum == 0 ]
- then
- {
- echo "0"
- }
- else
- {
- echo "1"
- }
- fi
- }
- isListen=`Listening 8080`
- if [ $isListen -eq 1 ]
- then
- {
- echo "The port is listening"
- }
- else
- {
- echo "The port is not listening"
- }
- fi
系統(tǒng)CPU的使用情況:
- function GetSysCPU
- {
- CPUIdle=`vmstat 1 5 | sed -n '3,$p' | awk '{xx = x + $15} END {print x/5}' | awk -F. '{print $1}'`
- CPUNum=`echo "100-$CPUIdle" | bc`
- echo $CPUNum
- }
- cpu=`GetSysCPU`
- echo "The System CPU is $cpu"
- if [ $cpu -gt 90 ]
- then
- {
- echo "The usage of system cpu is larger than 90%"
- }
- else
- {
- echo "The usage of system cpu is normal"
- }
- fi
獲得某制定的磁盤空間:
- function GetDiskSpc
- {
- if [ $# -ne 1 ]
- then
- return 1
- fi
- Folder="$1$"
- DiskSpace=`df -k | grep $Folder | awk '{print $5}' | awk -F% '{print $1}'`
- echo $DiskSpace
- }
- Folder="/dev"
- DiskSpace=`GetDiskSpc $Folder`
- echo "The system $Folder disk space is $DiskSpace%"
- if [ $DiskSpace -gt 90 ]
- then
- {
- echo "The usage of system disk($Folder) is larger than 90%"
- }
- else
- {
- echo "The usage of system disk($Folder) is normal"
- }
- fi
在本機(jī)上代碼檢測的結(jié)果如下:
- lgy@lgy-HP:~$ ./monitorCPU.sh
- 2388
- The usage of cpu is normal
- The usage of memory is normal
- The number of des is normal
- The port is not listening
- The System CPU is 1
- The usage of system cpu is normal
- The system /dev disk space is 1%
- The usage of system disk(/dev) is normal