0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mac標準コマンドでリソースモニタリング、ロギングのスクリプト例

Posted at

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

  1. デスクトップとか好きな場所に「mac_monitoring.sh」とか、
    '好きな名前.sh'ってテキストファイルを作成。
  2. スクリプト内容をコピペ、保存。不要な処理あればコメントアウト。
  3. Mac標準のターミナルを起動。
  4. 「chmod 755 」と打った後に、作成したスクリプトをドラックアンドドロップ。
    →例「chmod 755 /Users/user01/Desktop/monitoring.sh」
  5. 作成したスクリプトファイルをターミナルにドラックアンドドロップして、エンター。
  6. モニタリング開始ならy押下してエンター。
  7. 何か作業しても良いし、無風確認として放置しても良い。
  8. 止めたくなったらy押下してエンター。
  9. ログフォルダ開くので中身を確認。ログの加工などお好みで。

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でのログ加工の例として、以下をご利用ください。

https://qiita.com/kubo4ka/items/142573fb8d5bb7fa1eb4

image exam

image.png

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?