Recently, some people have asked me questions about server monitoring from time to time. I asked if common server monitoring software, such as cacti and nagios, can I write shell scripts by myself? The shell scripts written based on your needs can better meet your needs and refine the comprehensiveness of host monitoring.
The following are some of my commonly used host monitoring scripts. You can modify them based on your situation and hope to help you.
1. View host Nic traffic
- #!/bin/bash
- #!/bin/bash
- #network
- #Mike.Xu
- while : ; do
- time='date +%m"-"%d" "%k":"%M'
- day='date +%m"-"%d'
- rx_before='ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-'
- tx_before='ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-'
- sleep 2
- rx_after='ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-'
- tx_after='ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-'
- rx_result=$[(rx_after-rx_before)/256]
- tx_result=$[(tx_after-tx_before)/256]
- echo "$time Now_In_Speed: "$rx_result"kbps Now_OUt_Speed: "$tx_result"kbps"
- sleep 2
- done
- done
2. system status monitoring
- #!/bin/sh
- #systemstat.sh
- #Mike.Xu
- IP=192.168.1.227
- top -n 2| grep "Cpu" >>./temp/cpu.txt
- free -m | grep "Mem" >> ./temp/mem.txt
- df -k | grep "sda1" >> ./temp/drive_sda1.txt
- #df -k | grep sda2 >> ./temp/drive_sda2.txt
- df -k | grep "/mnt/storage_0" >> ./temp/mnt_storage_0.txt
- df -k | grep "/mnt/storage_pic" >> ./temp/mnt_storage_pic.txt
- time=`date +%m"."%d" "%k":"%M`
- connect=`netstat -na | grep "219.238.148.30:80" | wc -l`
- echo "$time $connect" >> ./temp/connect_count.txt
3. Monitor the disk space of the host. If the disk space exceeds 90%, send a mail to send a warning.
- #!/bin/bash
- #monitor available disk space
- SPACE='df | sed -n '/ \ / $ / p' | gawk '{print $5}' | sed 's/%//'
- if [ $SPACE -ge 90 ]
- then
- fty89@163.com
- fi
4. Monitor CPU and memory usage
- #!/bin/bash
- #script to capture system statistics
- OUTFILE=/home/xu/capstats.csv
- DATE='date +%m/%d/%Y'
- TIME='date +%k:%m:%s'
- TIMEOUT='uptime'
- VMOUT='vmstat 1 2'
- USERS='echo $TIMEOUT | gawk '{print $4}' '
- LOAD='echo $TIMEOUT | gawk '{print $9}' | sed "s/,//' '
- FREE='echo $VMOUT | sed -n '/[0-9]/p' | sed -n '2p' | gawk '{print $4} ' '
- IDLE='echo $VMOUT | sed -n '/[0-9]/p' | sed -n '2p' |gawk '{print $15}' '
- echo "$DATE,$TIME,$USERS,$LOAD,$FREE,$IDLE" >> $OUTFILE
5. Comprehensive host monitoring
- #!/bin/bash
- # check_xu.sh
- # 0 * * * * /home/check_xu.sh
- DAT="`date +%Y%m%d`"
- HOUR="`date +%H`"
- DIR="/home/oslog/host_${DAT}/${HOUR}"
- DELAY=60
- COUNT=60
- # whether the responsible directory exist
- if ! test -d ${DIR}
- then
- /bin/mkdir -p ${DIR}
- fi
- # general check
- export TERM=linux
- /usr/bin/top -b -d ${DELAY} -n ${COUNT} > ${DIR}/top_${DAT}.log 2>&1 &
- # cpu check
- /usr/bin/sar -u ${DELAY} ${COUNT} > ${DIR}/cpu_${DAT}.log 2>&1 &
- #/usr/bin/mpstat -P 0 ${DELAY} ${COUNT} > ${DIR}/cpu_0_${DAT}.log 2>&1 &
- #/usr/bin/mpstat -P 1 ${DELAY} ${COUNT} > ${DIR}/cpu_1_${DAT}.log 2>&1 &
- # memory check
- /usr/bin/vmstat ${DELAY} ${COUNT} > ${DIR}/vmstat_${DAT}.log 2>&1 &
- # I/O check
- /usr/bin/iostat ${DELAY} ${COUNT} > ${DIR}/iostat_${DAT}.log 2>&1 &
- # network check
- /usr/bin/sar -n DEV ${DELAY} ${COUNT} > ${DIR}/net_${DAT}.log 2>&1 &
- #/usr/bin/sar -n EDEV ${DELAY} ${COUNT} > ${DIR}/net_edev_${DAT}.log 2>&1 &
In crontab, automatic execution is performed hourly:
- 0 * * * * /home/check_xu.sh
The cpu, memory, network, and IO statistics of each hour are generated in the/home/oslog/host_yyyymmdd/hh directory.
If a problem occurs in a certain period of time, you can view the corresponding log information to see how the host performance was at that time.