システム監視スクリプト
1. httpdが停止していたら自動起動
# /usr/bin/ps ax | grep -v grep | grep -q httpd || /usr/bin/systemctl start httpd.service
■実行と同時にメールを送信する場合
/usr/bin/ps ax | grep -v grep | grep -q httpd || (/usr/bin/systemctl start httpd.service && (echo 'Sent from www.example.jp' | mail -s 'Started httpd service.' xxxx@example.jp))
※このコマンドをcronで定期実行します。
2. ディスク使用率の監視
ディスクの使用率がしきい値を超えていたら、メールを送信します。
ここでは2つのパーティションを監視していますが、1つの場合は「Partition1」のみにし、また3つ以上の場合は項目をコピーして設定値を作成して下さい。
#!/bin/bash
#================================================================
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Notification email address.
MAIL_ADDRESS="xxxx@example.jp"
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Get server information.
SERVER_NAME=`hostname`
EXECUTION_DATETIME=`date`
DISK_USAGE=`df -h`
# Email sending information.
EMAIL_SUBJECT="[${SERVER_NAME}] Disk space usage rate alert!!"
EMAIL_SERVER_INFO1="ServerName:${SERVER_NAME}"
EMAIL_SERVER_INFO2="date:${EXECUTION_DATETIME}"
EMAIL_SERVER_INFO3="Disk usage:"
EMAIL_SERVER_INFO4="${DISK_USAGE}"
#================================================================
error_flag=0
#///////////////////// Partition1 check //////////////////////////
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Partition to monitor.
MONITORING_PARTITION1=/dev/mapper/cl-root
# Disk space usage rate(%).
THRESHOLD_VALUE1=80
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Check Disk.
USED_CAPACITY1=` df -h | grep $MONITORING_PARTITION1 | awk '{ print $5 }' | sed -e '$s/.$//' `
# Checkthreshold_value.
if [ $USED_CAPACITY1 -gt $THRESHOLD_VALUE1 ]
then
error_flag=1
EMAIL_MESSAGE1="'${MONITORING_PARTITION1}' exceeded [${THRESHOLD_VALUE1}]%."
else
EMAIL_MESSAGE1=""
fi
#/////////////////////////////////////////////////////////////////
#///////////////////// Partition2 check //////////////////////////
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Partition to monitor.
MONITORING_PARTITION2=/dev/vda1
# Disk space usage rate(%).
THRESHOLD_VALUE2=80
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Check Disk.
USED_CAPACITY2=` df -h | grep $MONITORING_PARTITION2 | awk '{ print $5 }' | sed -e '$s/.$//' `
# Checkthreshold_value.
if [ $USED_CAPACITY2 -gt $THRESHOLD_VALUE2 ]
then
error_flag=1
EMAIL_MESSAGE2="'${MONITORING_PARTITION2}' exceeded [${THRESHOLD_VALUE2}]%."
else
EMAIL_MESSAGE2=""
fi
#/////////////////////////////////////////////////////////////////
##################################################################
# If the threshold has been exceeded.
if [ $error_flag -eq 1 ]
then
mail -s "$EMAIL_SUBJECT" $MAIL_ADDRESS << EOM
=============================================================
$EMAIL_SUBJECT
=============================================================
$EMAIL_MESSAGE1
$EMAIL_MESSAGE2
-------------------------------------------------------------
$EMAIL_SERVER_INFO1
$EMAIL_SERVER_INFO2
$EMAIL_SERVER_INFO3
$EMAIL_SERVER_INFO4
EOM
fi
##################################################################
3. ディスク使用状況レポート
ディスクの使用状況をメールで送信します。
#!/bin/bash
TODAY_DATE_VAL="$(date "+%Y-%m-%d")"
TODAY_DATE_VAL2="$(date "+%Y-%m-%d %H:%M:%S")"
#==============================================
REPORT_FILENAME=/tmp/disk_usage.txt
#----------------------------------------------
EMAIL_TO="xxxxx@example.jp"
EMAIL_FROM="webmaster@example.jp"
EMAIL_SUBJECT="[${HOSTNAME}] ディスク使用状況レポート($TODAY_DATE_VAL)"
#==============================================
echo "${HOSTNAME}" > $REPORT_FILENAME
echo "【ディスク使用状況】[ $TODAY_DATE_VAL2 ]" >> $REPORT_FILENAME
echo "" >> $REPORT_FILENAME
df -hT | grep root | awk '{print "ディスク容量:" $3 "\n使用容量:" $4 "\n使用%:" $6}' >> $REPORT_FILENAME
/usr/bin/sleep 1
mail -s "$EMAIL_SUBJECT" -r $EMAIL_FROM $EMAIL_TO < $REPORT_FILENAME
※「EMAIL_TO」、「EMAIL_FROM」には実際のメールアドレスを書き換えて下さい。
4. リソース監視(画面表示)
現在のリソース状況を画面に表示するコマンドです。
#!/bin/bash
INTERVAL=30
LOOP_COUNT=3
count=1
while true; do
memory_free_rate=`cat /proc/meminfo |awk -F "[: ]+" '{val[$1]=$2}END{rate=val["MemAvailable"] /val["MemTotal"] *100; printf("%d",rate)}'`
swap_free_rate=`cat /proc/meminfo |awk -F "[: ]+" '{val[$1]=$2}END{if(val["SwapTotal"] > 0) rate=(val["SwapFree"])/val["SwapTotal"] *100; printf("%d",rate)}'`
cpu_usage=`vmstat 1 3 | awk 'NR==4{use=100-$15;print use}'`;
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "----- ${timestamp} -----"
echo "Memory Free:${memory_free_rate}%"
echo "Swap Free:${swap_free_rate}%"
echo "CPU Usage:${cpu_usage}%"
((count++))
if [ ${count} -gt ${LOOP_COUNT} ]; then
break
fi
sleep $INTERVAL
done
exit 0
「INTERVAL」:表示間隔(秒)
「LOOP_COUNT」:繰り返し回数
最終更新:2024年09月17日 07:36