wiki:misc/server_process

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

概要

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

定期実行(cron)

*/10 * * * * /pf/archive/OP/ServerProcess/script/snap.sh
Last modified 10 months ago Last modified on 02/22/18 14:48:39