・2008/06/07 里親になりそうです
・2008/06/15 やってきた
・2008/06/16 写真と動画
・2008/07/18 もみちゅぱ
・2008/07/20 もみちゅぱ動画
・2010/06/09 猫を飼ってる人には判ること
・2011/04/30 もみもみちゅぱちゅぱ
・2011/05/01 むにゅーん
☆エイプリルフール
・2005/04/01
・2004/04/01
・2003/04/01
☆サーバ設定
・2004/12/14(1) ハード・ソフト一覧
・2004/12/14(2) OS Install
・2004/12/15(1) /etcの下
・2004/12/15(2) 各portの設定
・2004/12/17(1) RAIDディスク監視
・2004/12/17(2) IDEディスク監視
・2004/12/17(3) HotSaNIC
・2008/05/31 メンテナンスのお知らせ文テンプレ
・2008/06/01 ECCエラーなHDD入れ替え
・2008/12/30 HDD入れ替え
・2009/06/06 電源が壊れたときの作業ログ
・2011/05/29 tDiaryを3.0系統に入れ替えたときのパッチ
☆Xperia acroHD・Android
・2012/12/22 root取り~Titaniumまで
・2013/01/06 アプリ整理・Link2SD
・2013/01/21 旧端末→新端末アプリ移動
・2013/02/09 旧端末分解・アプリ整理
☆写真
・2002/12/31 冬コミ ブリジットコス
・2004/02/16 Babyロリ服
・2011/03/09 リーマンコス(笑)
・2011/07/19 BABYロリ服・浴衣
・2011/08/13 夏コミ2日目。薄桜鬼千鶴・BABYロリ服
・2011/08/14 夏コミ3日目。リリカルなのは制服・薄桜鬼千鶴
☆その他
・2004/08/08 tDiary改造メモ
・2003/02/18 キャッチセールスの断り方
・2010/08/12 リネ2 FFC応募作品
・2011/07/12 リネ2とTERAとの比較記事
2004-12-17 (Fri)
★[サーバ] 設定メモ書き(5) [16:29]
昨日は飲みに誘われてたので何も欠けなかった。一昨日の続きです。
●RAIDディスク監視体制
○必要なバイナリ
3ware社(RAIDボードのメーカー)が配布しているCLIプログラム (tw_cli-freebsd-x86.tgz)
3ware社のページ(英語) にある。日本代理店のページには無いようだ。○インストール
展開すると、tw_cli-freebsd-x86 というディレクトリの中にプログラムとマニュアルが入る。
$ tar xvzf tw_cli-freebsd-x86.tgz
x tw_cli-freebsd-x86/
x tw_cli-freebsd-x86/tw_cli
x tw_cli-freebsd-x86/tw_cli.8.html
x tw_cli-freebsd-x86/tw_cli.8.nroff
x tw_cli-freebsd-x86/tw_sched
x tw_cli-freebsd-x86/tw_sched.8.html
x tw_cli-freebsd-x86/tw_sched.8.nroff
x tw_cli-freebsd-x86/tw_sched.cfg
これを、それぞれのディレクトリにコピー
tw_cli, tw_sched
→ /usr/local/sbin/ に root:wheel 500 でコピー
tw_cli.8.nroff, tw_sched.8.nroff
→ 名前を *.8.nroff → *.8 に変更して、gzip 圧縮。
そして /usr/local/man/man8/ に root:wheel 444 で置いた
tw_cli.8.html, tw_sched.8.html
→ /usr/local/share/doc/ に twa/ というディレクトリを作り(root:wheel 755)
そこに root:wheel 444 で置いた
tw_sched.cfg
→ /usr/local/etc/tw_sched.cfg.sample (root:wheel 444) として置いた
パーミッションが500であるのは、tw_cli を一般ユーザで実行しようとしても
$ /usr/local/sbin/tw_cli
Error: (CLI:001) Only root/administrator can run this program.
と出るため。一般ユーザに触らせる意味が無い。
○dailyで動くように設定
/usr/local/etc/periodic/daily/401.status-twa (root:wheel 755) を作って、periodicにつっこみました。
#!/bin/sh
daily_status_twa_cli_cmd="/usr/local/sbin/tw_cli"
daily_status_twa_cli_controller="c0"
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
case "$daily_status_twa_enable" in
[Yy][Ee][Ss])
echo ""
echo "3ware RAID status:"
echo ""
$daily_status_twa_cli_cmd info
$daily_status_twa_cli_cmd info $daily_status_twa_cli_controller
;;
*) ;;
esac
exit 0
そして /etc/periodic.conf に以下を。
daily_status_twa_enable="YES"
これで、daily status output のメールに以下のようなのが追加される。
3ware RAID status:
Ctl Model Ports Drives Units NotOpt RRate VRate
------------------------------------------------------------------
c0 9500S-4LP 4 4 1 0 4 4
Unit UnitType Status %Cmpl Stripe Size(GB) Cache AVerify OvrECC
------------------------------------------------------------------------------
u0 RAID-5 OK - 64K 558.762 ON OFF OFF
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 189.92 GB 398297088 B403xxxx
p1 OK u0 189.92 GB 398297088 B403xxxx
p2 OK u0 189.92 GB 398297088 B403xxxx
p3 OK u0 189.92 GB 398297088 B403xxxx
★[サーバ] 設定メモ書き(6) [16:41]
●IDEディスク監視体制
○必要なport
sysutils/smartmontools make 時のオプションは無し
○dailyで動くように設定
RAIDと同様。periodic につっこんだ。/usr/local/etc/periodic/daily/402.status-smart (root:wheel 755)
#!/bin/sh
daily_status_smart_smartctl_cmd="/usr/local/sbin/smartctl"
daily_status_smart_smartctl_option="-H -l error /dev/ad0"
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
case "$daily_status_smart_enable" in
[Yy][Ee][Ss])
echo ""
echo "SMART status:"
echo ""
$daily_status_smart_smartctl_cmd $daily_status_smart_smartctl_option
;;
*) ;;
esac
exit 0
そして /etc/periodic.conf に以下。
daily_status_smart_enable="YES"
daily status output のメールのサンプル
SMART status:
smartctl version 5.xx Copyright (C) 2002-4 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
The SMART RETURN STATUS return value (smartmontools -H option/Directive)
can not be retrieved with this version of ATAng, please do not rely on this value
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
SMART Error Log Version: 1
No Errors Logged
quietオプション(-q errorsonly)を追加した方が良いかもしれない。
★[サーバ] 設定メモ書き(7) [19:14]
●システム監視体制 (HotSaNIC)
○実際に動いている例
○必要なport
net/rrdtool make 時のオプションは無し
sysutils/xmbmon make 時のオプションは WITHOUT_X11=yes
graphics/ImageMagick make 時のオプションは無し (無くても可だが汚いグラフになる)
snmpは不要
○port以外で必要なバイナリ
HotSaNIC http://hotsanic.sourceforge.net/
使ったのは、0.5.0系のHotSaNIC。まだ正式リリースではなくpre5版だが、特に不具合は感じてない
○インストール
(1) (rootで作業) hotsanic というユーザ/グループを作る。自動起動を設定するために必要なので shell は /bin/sh。nologin では駄目だった。パスワードは「*」(ログインできない) にした。
(2) (一般ユーザで作業) パッケージを取ってきて展開。HotSaNIC というディレクトリの中にいろいろできる。
(3) (一般ユーザで作業) cd HotSaNIC; ./setup.pl
どのモジュールを有効にするかとか、いろいろ聞かれる。あとで変えられるので適当に。私の設定は以下
APCUSV :無効(n)
APPS :有効(y)、web上で公開(y)
BIND :無効(n)
DISKIO :有効(y)、web上で公開(y)
DNET :無効(n)
MAILQ :有効(y)、web上で公開(y)
NETSTAT :有効(y)、web上で公開(y)
NETWORKS :無効(n)
PART :有効(y)、web上で公開(y)
PING :無効(n)
SENSORS :有効(y)、web上で公開(y)
SHOUTCAST :無効(n)
SYSTEM :有効(y)、web上で公開(y)
TRAFFIC :有効(y)、web上で公開(y)
WORMS :無効(n)
これを選択したあと何も進まなかったのでenter押してあげたら進んだ。他にも、同じ質問が何回も出てきたりしたので、setup.pl はまだ (少なくとも FreeBSD に対しては)不具合がある模様。まぁ setup が難ありでも、実際に動けば問題ないのだけれど。
ちなみに上のモジュール設定だと、たとえばこんな感じで
setting up diskio ...
not supported yet, sorry
Please check the settings file and adapt it to satisfy your needs.
文句を言われたりもする。改造するつもりなので無視。
(4) (一般ユーザで作業) 設定
var/settings/ に設定ファイルがある。var/settings/main に対して settings という名前で symbolic link が貼られている。
デフォルトの設定から変えたところは、以下。
・var/settings/main
DAEMONDIR="/usr/local/HotSaNIC"
WEBDIR="/usr/local/www/data/HotSaNIC"
手順 (5)(6) で使う予定のディレクトリに合わせる
IMAGEFORMAT="png"
LZWの特許は切れたはずなのでgifでも問題ないとは思うが、なんとなく。
DTIME="6"
グラフを6分ごとに作り直す。
CTIME="0.1"
縮小画像を0.1時間(=6分)ごとに作り直す。要するにグラフ生成ごとに毎回作ることになる。
CONVERTMETHOD="I::M"
縮小画像を作るのに perl の Image::Magick を使う。
THUMBSIZE="46%"
このへんはお好みで。
REFRESH="60"
html のリロード時間。
・var/settings/mod_apps
APP=httpd
監視するアプリを設定。perl も監視したほうがいいかも、とか最近おもってたり。
・var/settings/mod_diskio
DEV=da0,da0
DEV=ad0,ad0
・var/settings/mod_part
DRIVE=/dev/da0s1a,root-filesystem
DRIVE=/dev/da0s1g,/home
DRIVE=/dev/ad0s1d,/tmp
DRIVE=/dev/da0s1d,/usr
DRIVE=/dev/da0s1e,/var
DRIVE=/dev/da0s1f,/var/log/httpd
DRIVE=/dev/ad0s1e,/backup
・var/settings/mod_sensors
SENSOR=0,TEMP0,Temperture 1,,,,C
SENSOR=1,TEMP1,Temperture 2,,,,C
SENSOR=2,TEMP2,Temperture 3,,,,C
SENSOR=3,FAN0,Fan rotate,,,,RPM
SENSOR=4,VC0,VCore 1,,,,V
SENSOR=5,VC1,VCore 2,,,,V
SENSOR=6,V33,+3.3V,,,,V
SENSOR=7,V50P,+5V,,,,V
SENSOR=8,V12P,+12V,,,,V
SENSOR=9,V12N,-12V,,,,V
SENSOR=a,V50N,-5V,,,,V
・var/settings/mod_traffic
DEV="gif0,12500000,12500000,100 MBit Ethernet"
(5) (rootで作業) 上で作ったものを /usr/local/HotSaNIC にコピー、chown -R hotsanic:hotsanic *
どうも var ディレクトリ以外でもいろんなところに data file/temporary file を生成するようで、まるごと chown してやらなければ駄目だった。ちょっとお行儀が悪いですよね…
(6) (rootで作業) 画像が生成されるディレクトリを作成。mkdir /usr/local/www/data/HotSaNIC
(7) (rootで作業) cd /usr/local/HotSaNIC; ./makeindex.pl
index.html とかが生成されるので、それを適当に編集。一回生成されたら自動では作り直されないのでご自由に。
(8) (rootで作業) cd /usr/local/www/data/HotSaNIC; chown -R hotsanic:hotsanic *
画像を生成するディレクトリを hotsanic さんが書き込み可能にする。
○改造
・rrdtimer.pl (Context diff)
HotSaNIC は10秒ごとにシステムからデータを取ってくる。グラフを作る時間とは無関係に10秒ごとにデータを収集している。
データを取ってくるだけでも、決して軽い処理ではないと思うのだけれど…。
この間隔は10秒でソースに埋め込んであるので、これを30秒ごとに変更した。
*** rrdtimer.pl.orig Thu Dec 9 22:05:55 2004
--- rrdtimer.pl Thu Dec 9 22:06:12 2004
***************
*** 181,187 ****
$lastconvert+=$CONFIG{CTIME};
}
}
! $sleeptime=10-(time % 10);
sleep $sleeptime;
}
}
--- 181,187 ----
$lastconvert+=$CONFIG{CTIME};
}
}
! $sleeptime=30-(time % 30);
sleep $sleeptime;
}
}
・modules/diskio/platform/freebsd.pm (Context diff)
rrdtool に小数を入れようとして失敗して、うまく動いていないようなので、int() を追加。rrdtool って小数扱えないの?
*** modules/diskio/platform/freebsd.pm.orig Thu Dec 9 22:07:51 2004
--- modules/diskio/platform/freebsd.pm Thu Dec 9 22:08:05 2004
***************
*** 28,34 ****
if ( ! -e "rrd/$drive.rrd" ) {
system("./makerrd","$drive","U");
}
! RRDs::update "rrd/$drive.rrd",time.":".($KBt*1024).":$xfr:$time:".($MB*1024*1024);
if ($ERROR = RRDs::error) {
print time," ",$args{MODNAME},
": unable to update `$drive.rrd': $ERROR\n";
--- 28,34 ----
if ( ! -e "rrd/$drive.rrd" ) {
system("./makerrd","$drive","U");
}
! RRDs::update "rrd/$drive.rrd",time.":".int($KBt*1024).":".int($xfr).":$time:".int($MB*1024*1024);
if ($ERROR = RRDs::error) {
print time," ",$args{MODNAME},
": unable to update `$drive.rrd': $ERROR\n";
../modules/netstat/platform/freebsd.pm (File)
新規作成。netstat コマンドを叩いて、その出力で "ESTABLISHED" とか書いてあるところの matching を取って、数えているだけです。原理的には FreeBSD じゃなくても使えるはず。
../modules/netstat/diagrams.pl Context diff
../modules/netstat/makerrd (Context diff)
この2つは、FreeBSD のときは動作しないようになっていた。if の条件だけを修正。
*** modules/netstat/diagrams.pl.orig Thu Dec 9 22:11:49 2004
--- modules/netstat/diagrams.pl Thu Dec 9 22:11:55 2004
***************
*** 77,83 ****
my ($prints,$xs,$ys);
! if ($^O =~ /linux/) {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b","1024", "-v", $LEGEND,
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"}, "-a", uc($IMGFMT),
"-u",1, "-l",0, "--title", "socket stats for $name - last $descr ($DATESTRING)",
--- 77,83 ----
my ($prints,$xs,$ys);
! if ($^O =~ /linux/ || $^O =~ /freebsd/) {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b","1024", "-v", $LEGEND,
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"}, "-a", uc($IMGFMT),
"-u",1, "-l",0, "--title", "socket stats for $name - last $descr ($DATESTRING)",
*** modules/netstat/makerrd.orig Thu Dec 9 22:12:19 2004
--- modules/netstat/makerrd Thu Dec 9 22:12:25 2004
***************
*** 14,20 ****
echo $SECS $MODNAME: setting up database $DEV.rrd for values [0..unknown]
! if [ $OS_TYPE = "Linux" ]; then
$BINPATH/rrdtool create rrd/$DEV.rrd --step 10 \
DS:unknown:GAUGE:300:0:U \
DS:established:GAUGE:300:0:U \
--- 14,20 ----
echo $SECS $MODNAME: setting up database $DEV.rrd for values [0..unknown]
! if [ $OS_TYPE = "Linux" -o $OS_TYPE = "FreeBSD" ]; then
$BINPATH/rrdtool create rrd/$DEV.rrd --step 10 \
DS:unknown:GAUGE:300:0:U \
DS:established:GAUGE:300:0:U \
../modules/sensors/platform/freebsd.pm (Context diff)
センサーから取れる情報に「-5V」「-12V」があったのだが、負の値を入れると nan とされていた。絶対値を入れるようにして修正。rrdtool って小数だけじゃなくて負の値も扱えないの?
*** modules/sensors/platform/freebsd.pm.orig Thu Dec 9 22:10:04 2004
--- modules/sensors/platform/freebsd.pm Thu Dec 9 22:10:13 2004
***************
*** 26,32 ****
if ( ! -e "rrd/$dev.rrd" ) { system("./makerrd","$dev","10000") }
# update database
! RRDs::update "rrd/$dev.rrd",time.":".$value;
if ($ERROR = RRDs::error) { print time," ",$args{MODNAME},": unable to update `$dev.rrd': $ERROR\n"; }
}
}
--- 26,32 ----
if ( ! -e "rrd/$dev.rrd" ) { system("./makerrd","$dev","10000") }
# update database
! RRDs::update "rrd/$dev.rrd",time.":".abs($value);
if ($ERROR = RRDs::error) { print time," ",$args{MODNAME},": unable to update `$dev.rrd': $ERROR\n"; }
}
}
../modules/traffic/diagrams.pl (Context diff)
トラフィックのグラフが上下に出るのって見にくくないですか?
私はこれ、なんか好きになれなかったので、両方とも上に出るように修正。
グラフを作るときに "CDEF:avgout_draw=avgout,$SWAPOI,*" とやって-1をかけて負の値にしていたので(←逆ポーランド記法です)、$SWAPOIの値を1にした。rrdファイルに入っているデータは修正していない。(ここだけ書き換えれば過去のデータを修正しなくてもグラフが全部書き換わる)
*** modules/traffic/diagrams.pl.orig Thu Dec 16 17:35:57 2004
--- modules/traffic/diagrams.pl Thu Dec 16 17:51:54 2004
***************
*** 56,62 ****
if ($SCALE eq "") { $SCALE=-1000; }
if ($SCALE > 0) { push @FEATURES,"--rigid"; }
! my $SWAPOI=-$SWAPIO;
# generate diagrams
#
--- 56,63 ----
if ($SCALE eq "") { $SCALE=-1000; }
if ($SCALE > 0) { push @FEATURES,"--rigid"; }
! #my $SWAPOI=-$SWAPIO;
! my $SWAPOI=$SWAPIO;
# generate diagrams
#
○実験
su hotsanic
cd /usr/local/HotSaNIC
../rrdgraph start
しばらく待って画像が出てくれば成功。
../rrdgraph stop
止まれば (ps x してプロセスが残らなければ) 成功。
○自動起動設定
/usr/local/etc/rc.d/hotsanic.sh を root:wheel 555 で作成。
スクリプトの内容をサボってるので、rc.conf で起動する/しないの設定ができなかったり。
#!/bin/sh
PREFIX=/usr/local
HOTSANICBIN=/usr/local/HotSaNIC/rrdgraph
HOTSANICUSER=hotsanic
case $1 in
start)
[ -x ${HOTSANICBIN} ] && {
echo ' hotsanic'
su -l ${HOTSANICUSER} -c "exec ${HOTSANICBIN} start"
}
;;
stop)
[ -x ${HOTSANICBIN} ] && {
su -l ${HOTSANICUSER} -c "exec ${HOTSANICBIN} stop"
}
;;
restart|reload)
[ -x ${HOTSANICBIN} ] && {
su -l ${HOTSANICUSER} -c "exec ${HOTSANICBIN} restart"
}
;;
status)
[ -x ${HOTSANICBIN} ] && {
su -l ${HOTSANICUSER} -c "exec ${HOTSANICBIN} status"
}
;;
*)
echo "usage: `basename $0` {start|stop|restart|reload|status}" >&2
exit 64
;;
esac