20220429_log
about
- Macのリソースモニタリング、ロギングのスクリプト。
- 普段の作業前に起動して、終わったら止める。
- 作業時と無風状態との比較対象として、放置してログ取ってみるなど。
commands
hostinfo
uptime
top -o mem -l 1
ps aux
vm_stat -c 86400 10
iostat 10
netstat 10
log dir
- Mac標準のコマンドで、10秒ごとに各種リソース、プロセスのログを書き出すスクリプト。
- ログサイズは1分当たり1MBくらいなので、そこまで気にしなくて良いはず。
- ログはグラフにするならエクセルなどで手動で。
- ログは/tmp/配下に日付フォルダで。
要らなくなったら削除を。
/tmp/配下は時間経過か起動時かで消えるはずなので、消したく無いログは退避を。
steps
- デスクトップとか好きな場所に「mac_monitoring.sh」とか、
'好きな名前.sh'ってテキストファイルを作成。 - スクリプト内容をコピペ、保存。不要な処理あればコメントアウト。
- Mac標準のターミナルを起動。
- 「chmod 755 」と打った後に、作成したスクリプトをドラックアンドドロップ。
→例「chmod 755 /Users/user01/Desktop/monitoring.sh」 - 作成したスクリプトファイルをターミナルにドラックアンドドロップして、エンター。
- モニタリング開始ならy押下してエンター。
- 何か作業しても良いし、無風確認として放置しても良い。
- 止めたくなったらy押下してエンター。
- ログフォルダ開くので中身を確認。ログの加工などお好みで。
src
script
#!/bin/bash
clear
echo ""
echo "**** **** **** ****"
echo ""
echo "monitoring tool"
echo "log this mac's resource by some commands every 10 seconds"
echo ""
echo "**** **** **** ****"
echo ""
read -p "start monitoring? (y/N) : " YN
if [ "$YN" = "y" ]; then
echo "start monitoring"
else
echo "bye"
echo ""
echo "**** **** **** ****"
echo "5 seconds wait..."
sleep 5
echo ""
clear
exit
fi
echo ""
echo "**** **** **** ****"
echo ""
DATE=`date +%Y%m%d`
DATETIME=`date +%Y%m%d_%H%M%S`
LOGD=/tmp/"$DATE"_mon_log
mkdir -p "$LOGD"
hostinfo >> "$LOGD"/`hostname`_hostinfo_"$DATETIME".txt
uptime >> "$LOGD"/`hostname`_uptime_"$DATETIME".txt
TOPLOGD="$LOGD"/"$DATE"_top
mkdir -p "$TOPLOGD"
echo "checking cpu, mem by top"
while true ; do DATETIME=`date +%Y%m%d_%H%M%S` ; top -o mem -l 1 >> "$TOPLOGD"/`hostname`_top_"$DATETIME".txt ; sleep 10 ; done &
TOPPID=$!
PSLOGD="$LOGD"/"$DATE"_ps
mkdir -p "$PSLOGD"
echo "checking process, cpu, mem by ps"
while true ; do DATE=`date +%Y%m%d` ; DATETIME=`date +%Y%m%d_%H%M%S` ; ps aux >> "$PSLOGD"/`hostname`_ps_"$DATETIME".txt ; sleep 10 ; done &
PSPID=$!
VMSTATLOGD="$LOGD"/"$DATE"_vm_stat
mkdir -p "$VMSTATLOGD"
echo "checking mem by vm_stat"
vm_stat -c 86400 10 >> "$VMSTATLOGD"/`hostname`_vm_stat_"$DATETIME".txt &
VMSTATPID=$!
IOSTATLOGD="$LOGD"/"$DATE"_iostat
mkdir -p "$IOSTATLOGD"
echo "checking disk io by iostat"
iostat 10 >> "$IOSTATLOGD"/`hostname`_iostat_"$DATETIME".txt &
IOSTATPID=$!
NETSTATLOGD="$LOGD"/"$DATE"_netstat
mkdir -p "$NETSTATLOGD"
echo "checking NW io by netstat"
netstat 10 >> "$NETSTATLOGD"/`hostname`_netstat_"$DATETIME".txt &
NETSTATPID=$!
echo ""
echo "**** **** **** ****"
echo ""
jobs
echo ""
echo "**** **** **** ****"
echo ""
while :
do
read -p "stop monitoring? (y/N) : " YN
if [ "$YN" = "y" ]; then
echo "stop monitoring"
break
elif [ "$YN" = "n" ]; then
echo "still monitoring"
else
echo "type y or n"
fi
done
echo ""
echo "**** **** **** ****"
echo ""
kill -1 $TOPPID
kill -1 $PSPID
kill -1 $VMSTATPID
kill -1 $IOSTATPID
kill -1 $NETSTATPID
sleep 5
echo ""
echo "**** **** **** ****"
echo "check no jobs"
jobs
echo ""
echo "**** **** **** ****"
echo ""
echo "result : $LOGD"
echo "bye"
echo ""
echo "**** **** **** ****"
echo "10 seconds wait..."
sleep 10
echo ""
clear
open $LOGD
log chk exam
grep "CPU usage" /*/*/*.* > /tmp/cpulog.txt
grep "Phy" /*/*/*.* > /tmp/memlog.txt
grep "written" /*/*/*.*> /tmp/diskiolog.txt
あとはエクセルにスペース区切りで読み込んで、
開始時間から10秒ごとにそれぞれの列を線グラフとかにするとか、
特定のプロセスについて深く見るならps結果とか。
Bashでのログ加工の例として、以下をご利用ください。
image exam
以上