wiki:misc/server_process

Version 2 (modified by kameta, 6 years ago) (diff)

--

サーバープロセスの定期保存

概要

psコマンドによるサーバー毎の状態を定期保存する方法を紹介する。
psコマンドの結果をログとして保存するスクリプトをcronで10毎に実行している。

ディレクトリ構成

ServerProcess
|-- script
|   |-- snap.sh                              <- ログとして保存するスクリプト
|
|-- data
|   |-- pfrproc2                             <- サーバー
|   |   |-- 2018
|   |   |   |-- 02
|   |   |   |   |-- 22
|   |   |   |   |   |-- 20180222000001.log
|   |   |   |   |   |   ..................
|   |   |   |   |   |-- 20180222134001.log
| ..................
|   |-- pfrproc4                             <- サーバー
|   |   |-- 2018
|   |   |   |-- 02
|   |   |   |   |-- 22
|   |   |   |   |   |-- 20180222000001.log
|   |   |   |   |   |   ..................
|   |   |   |   |   |-- 20180222134001.log
| ..................

ログ

ログにはヘッダとしてホスト名、psコマンド、日時を付加している。

# hostname : pfrproc2
# command  : ps axwwwo user,pid,ppid,%cpu,%mem,vsz,rss,tname,stat,start_time,bsdtime,args
# date     : 2018/02/22 14:00:01

USER        PID   PPID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1      0  0.0  0.0  33664  1236 ?        Ss    2017   0:01 /sbin/init
root          2      0  0.0  0.0      0     0 ?        S     2017   0:00 [kthreadd]
root          3      2  0.0  0.0      0     0 ?        S     2017   0:25 [migration/0]
root          4      2  0.0  0.0      0     0 ?        S     2017  11:58 [ksoftirqd/0]
root          5      2  0.0  0.0      0     0 ?        S     2017   0:00 [stopper/0]
root          6      2  0.0  0.0      0     0 ?        S     2017   0:06 [watchdog/0]
root          7      2  0.0  0.0      0     0 ?        S     2017   0:04 [migration/1]
root          8      2  0.0  0.0      0     0 ?        S     2017   0:00 [stopper/1]
root          9      2  0.0  0.0      0     0 ?        S     2017   2:44 [ksoftirqd/1]
root         10      2  0.0  0.0      0     0 ?        S     2017   0:07 [watchdog/1]
root         11      2  0.0  0.0      0     0 ?        S     2017   1:17 [migration/2]
root         12      2  0.0  0.0      0     0 ?        S     2017   0:00 [stopper/2]
root         13      2  0.0  0.0      0     0 ?        S     2017   6:29 [ksoftirqd/2]
root         14      2  0.0  0.0      0     0 ?        S     2017   0:05 [watchdog/2]
root         15      2  0.0  0.0      0     0 ?        S     2017   0:46 [migration/3]
..................

スクリプト

ディレクトリの設定を変更することによって他の環境でも使用可能。
cERL/PFではppidも情報として残したいのでpsコマンドを変更している。

#!/bin/sh

#PS_CMD="ps auxwww"
PS_CMD="ps axwwwo user,pid,ppid,%cpu,%mem,vsz,rss,tname,stat,start_time,bsdtime,args"   <- psコマンド

HOST_NAME="`hostname -s`"

YEAR="`date +%Y`"
MONTH="`date +%m`"
DAY="`date +%d`"
HOUR="`date +%H`"
MIN="`date +%M`"
SEC="`date +%S`"

BASE_DIR="/pf/archive/OP/ServerProcess/"                                                <- ディレクトリ
DATA_DIR="$BASE_DIR/data"

LOG_DIR="$DATA_DIR/$HOST_NAME/$YEAR/$MONTH/$DAY"
LOG_NAME="$YEAR$MONTH$DAY$HOUR$MIN$SEC.log"
LOG_FULL_NAME="$LOG_DIR/$LOG_NAME"

#echo "$HOST_NAME"
#echo "$YEAR"
#echo "$MONTH"
#echo "$DAY"
#echo "$HOUR"
#echo "$MIN"
#echo "$SEC"

#echo "$BASE_DIR"
#echo "$DATA_DIR"

#echo "$LOG_DIR"
#echo "$LOG_NAME"
echo "$LOG_FULL_NAME"

if [ ! -e $LOG_DIR ]; then
  mkdir -p $LOG_DIR
fi

echo "# hostname : $HOST_NAME" > $LOG_FULL_NAME
echo "# command  : $PS_CMD" >> $LOG_FULL_NAME
echo "# date     : $YEAR/$MONTH/$DAY $HOUR:$MIN:$SEC" >> $LOG_FULL_NAME
echo "" >> $LOG_FULL_NAME
$PS_CMD >> $LOG_FULL_NAME