bashスクリプトがカップ/メモリ/ディスクの使用量を監視する方法
2022-01-05 01:10:22
このブログで書かれていることは、実際にはあまり役に立ちませんし、このようなスクリプトを使って監視することはないでしょう。しかし、自分で書くことで、初心者はCPU、メモリ、ディスクなどの基本や基本コマンドをより深く理解することができるようになります。
#! /bin/bash
#Get the memory situation
mem_total=`free | awk 'NR==2{print $2}'` #Get the total memory size
mem_use=`free | awk 'NR==2{print $3}'` #Get memory usage size
#Statistic memory usage (size used/total size)
mem_use_rate=`awk 'BEGIN{print('$mem_use'/'$mem_total')*100}'| awk '{print int($0)}'`
#echo $mem_use_rate ----------
#get disk usage rate
disk_use_rate_str=`df -h | grep /dev/vda1 | awk -F '[ %]+' '{print $5}'| awk '{print int($0)}'`
# Get cpu usage rate
cpu_use_rate=`top -n 1 | grep Cpu |awk '{print $2}'| awk '{print int($0)}'`
#Alarm time
file_log=/home/error.log #create in advance
now_time=`date '+%F %T'`
function send_mail(){
}
function check(){
if [[ "men_use_rate" > 50 ]] || [[ "disk_use_rate" > 50 ]] || [[ "cpu_use_rate" > 50 ]];then
echo "Alarm time: "$now_time > $file_log
echo "cpu usage:${cpu_use_rate}% --> disk usage: ${disk_use_rate}% --> memory usage: ${men_use_rate}%"
send_mail
fi
}
function main(){
check
}
main
注:awk '{print int($0)}' です。
浮動小数点数を整数に変換して、大きさを比較することができます。シェルは浮動小数点と整数の直接比較はサポートしていません。
bcを使用する必要がある計算
if [[ "men_use_rate" > 50 ]] is equivalent to if [ $men_use_rate > 50 ]。
bcの例です。
#! /bin/bash
var1=20
var2=3.14159
var3=`echo "scale=0;$var2 - $var1 " | bc`
echo $var3
var4=`echo "$var1 < $var2"| bc`
echo $var4
最もメモリを消費する上位 40 プロセスを表示します。
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
ベースリソースアラートスクリプトを行う自動化タスク
#! /bin/bash
now=`date -u -d"+8 hour" +'%Y-%m-%d %H:%M:%S'`
#cpu usage threshold
cpu_warn='85'
#mem idle threshold
mem_warn='1000'
#disk usage threshold
disk_warn='90'
#--cpu
item_cpu () {
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'|cut -f 1 -d ". "`
cpu_use=`expr 100 - $cpu_idle`
echo "$now Current cpu usage is $cpu_use" >> /tmp/monitoring.log
if [ $cpu_use -gt $cpu_warn ]
then
echo "cpu warning!!!! "
else
echo "cpu ok!!!! "
fi
}
#--mem
item_mem () {
#-MB as unit
mem_free=`free -m | grep "Mem" | awk '{print $4+$6}'`
echo "$now Current memory space remaining is ${mem_free}MB" >> /tmp/monitoring.log
if [ $mem_free -lt $mem_warn ]
then
echo "mem warning!!!! "
else
echo "mem ok!!!! "
fi
}
#--disk
item_disk () {
disk_use=`df -P | grep /dev/vda2 | grep -v -E '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%"`
echo "$now Current disk usage is $disk_use" >> /tmp/monitoring.log
if [ $disk_use -gt $disk_warn ]
then
echo "disk warning!!! "
else
echo "disk ok!!! "
fi
}
item_cpu
item_mem
item_disk
無料のツールを使って、メモリの使用状況を監視し、80以上のアラートを出し、最もメモリを使用している上位10プロセスを抽出することができます。
コードは以下の通りです。
#! /bin/bash
#!
total=$(free -m | sed -n '2p' | awk '{print $2}')
used=$(free -m | sed -n '2p' | awk '{print $3}')
free=$(free -m | sed -n '2p' | awk '{print $4}')
shared=$(free -m | sed -n '2p' | awk '{print $5}')
buff=$(free -m | sed -n '2p' | awk '{print $6}')
cached=$(free -m | sed -n '2p' | awk '{print $7}')
rate=`echo "scale=2;$used/$total" | bc | awk -F. '{print $2}'`
echo -e "total\tused\tfree\tshared\tbuffer\tavailable"
echo -e "${total}M\t${used}M\t${free}M\t${shared}M\t${buff}M\t${cached}M\nrate:${rate}%"
if [ $rate -ge 80 ]
then echo "Memory Warn"
ps aux | grep -v USER | sort -rn -k4 | head
fi
dfコマンドでディスク使用率を監視し、80以上のアラームを出す。
df : ディスクパーティションの使用可能なディスク容量を表示します。
-h : より読みやすい形で表示します。
-P POSIX 出力形式を使用します。
#! /bin/bash
#!
DEV=`df -hP | grep '^/dev/*' | cut -d' ' -f1 | sort`
for I in $DEV
do dev=`df -Ph | grep $I | awk '{print $1}'`
size=`df -Ph | grep $I | awk '{print $2}'`
used=`df -Ph | grep $I | awk '{print $3}'`
free=`df -Ph | grep $I | awk '{print $4}'`
rate=`df -Ph | grep $I | awk '{print $5}'`
mount=`df -Ph | grep $I | awk '{print $6}'`
echo -e "$I:\tsize:$size\tused:$used\tfree:$free\trate:$rate\tmount:$mount"
F=`echo $rate | awk -F% '{print $1}'`
if [ $F -ge 80 ]; then
echo "$mount Warn"
else echo "It's OK"
fi
done
今回の記事は、bashスクリプトでcup/memory/diskの使用量を監視する方法について書いています。bashでcup/memory/diskの使用状況を監視する方法については、Script Houseの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン