いつきコンテンツ

ヘルプ

カウンター


2007-11-06 お、サーバの設定終わった?

必要な物は全部入れた……ハズ!

→残念、apacheのログ取得周りと、webalizer入れてない!あとruby

[日記][FreeBSD] fstabの書き方間違えた(汗

/usr/home/ituki/htdocs /cgiroot/ituki nullfs rw 0 0

な(笑)

dumpかけたりchkdskかけてどうするよ(笑)

そりゃ止まるさ(笑)

[日記][FreeBSD] 時々sendmailを必要とするプログラムがsendmailの前に立ち上がって固まる件

どうやらlocalhost:25にコネクションを張りに行って固まる模様(笑)

しばらく放っておくとタイムアウトしてくれるっぽいので、放置。

[情報] 【amazonの分割配送の送料変更が想像より極悪な件】一括発送と分割発送

わしは一括発送しか使ってないので(古い本とか取り寄せるのに便利)あんまり関係ないけど、関係する人は多数いそうなので一応書いておく。

なかなかに激しい条件の様で…(苦笑

関連:アマゾンの分割配送時の送料がかなり割高に変更された!?

[ネタ] アニメ最萌トーナメント2007優勝は「ひぐらし」古手梨花

あー、そういえばやってましたなぁー。

結局梨花になったのか。

[メモ][情報] 地デジをDRM解除録画する「フリーオ」のまとめサイト登場

あー。

なんか誰かが「欲しいー」とか言ってたな、そういえば。

[ネタ] 台湾のテレビでニコニコ動画が紹介されたときのムービー

うは、テレビで紹介されたのかよ(笑)

つか、馬!!(笑)

[情報][ネタ] ノート PC の無線機能が外出先で自宅住所をバラす危険

外出先は大抵無線LANオフだからなぁ……(省電力のため(笑)

まぁ、でも注意って事で。

関連:セキュリティホールmemo

[ネタ] ニコニコ動画(RC2)‐KAITOですがPC内の雰囲気が最悪です

うわあああーーーーΣ(゜▽゜;

ちょ、おまあああぁぁーーーーーーーΣΣ

キャラのイメージ変わったがな(笑)

[日記] なんかtwa0がエラー吐いたΣ

twa0: ERROR: (0x05: 0x210B): Request timed out!: request = 0xc7050040
twa0: INFO: (0x16: 0x1108): Resetting controller...:
twa0: INFO: (0x04: 0x0001): Controller reset occurred: resets=1
twa0: INFO: (0x16: 0x1107): Controller reset done!:

何事。

再起動したら出なくなったので、まぁ良しとしよう(良いのかそんなので?)

[日記][FreeBSD] apacheのログをmultilogで取りつつ、webalizerを入れる

まず、基本方針として、

・Apacheのログはfifo(mkfifoで作れるパイプ)に吐き出す

・fifoからログを読み込んで、標準出力に吐く

・標準出力をmultilogに噛ませて、実ログを吐き出す

・webalizer解析用のログは別途吐かせて、multilogからwebalizerを呼び出す

という方法を取ります。

この方法の利点:突如凄いhttpのアクセスを喰らってもログ領域が溢れない。あと、webalizerが勝手に解析してくれる。

まずこの辺からrdfifoを落としてきてgcc -o rdfifo rdfifo.c、cp rdfifo /usr/local/bin/rdfifo、chmod 755 /usr/local/bin/rdfifoとしてインストール。

別に/bin/catでも対応できるんだけど、mkfifoで作ったfifoパイプはしょっちゅうEOFを投げてきて、そのたびに/bin/cat起動し直しなので、ひたすらfifoを読み続けるプログラムを使うのさー。

とりあえず、一旦動いてるapacheを止める。

apachectl stopで止まったのを確認。

cd /var/logとして、rm httpd-suexec.log;mkfifo httpd-suexec.log

んで、httpd_log、httpd_logrというやる気無い名前のユーザ名&グループを作ってchown www:httpd_logr httpd-suexec.log; chmod 640 httpd-suexec.log。

これでhttpd-suexec.logはwwwユーザが読み書き、httpd_logrユーザが読み込み可能になる。chown root:httpd_logr httpd-suexec.log; chmod 640 httpd-suexec.log。

これでhttpd-suexec.logはrootユーザが読み書き、httpd_logrユーザが読み込み可能になる。よく考えたらapacheはwwwじゃなくてrootでログファイルをオープンするんでした。

んでもって、/var/log/httpdに移動して、error.logに対して同じ操作をする。まとめてやるとこんな感じ

rm error.log; mkfifo error.log ; chown root:httpd_logr error.log ;chmod 640 error.log

これでエラーログに対しても同じ事が出来る様になった。

ついでなのでディレクトリを作る

mkdir /var/log/httpd/suexec /var/log/httpd/error /var/log/httpd/access /var/log/httpd/access/analyze /var/log/httpd/access/main /var/log/httpd/access/server; chown httpd_log:httpd_log /var/log/httpd/suexec /var/log/httpd/error /var/log/httpd/access/analyze /var/log/httpd/access/main /var/log/httpd/access/server; chmod 700 /var/log/httpd/suexec /var/log/httpd/error /var/log/httpd/access/analyze /var/log/httpd/access/main /var/log/httpd/access/server

としておく。

んでもって、/var/log/httpd/accessで、mkfifo analyze.log main.log server.log、chown root:httpd_logr analyze.log main.log server.log、chmod 640 analyze.log main.log server.logとしてとりあえずファイルとディレクトリを作りまくる。

あと、一応念のため(今回は使わないけど)/var/log/httpdでmkfifo ssl.log; chown root:httpd_logr ssl.log; chmod 640 ssl.logとしておく。あと、mkdir ssl;chmod 700 ssl;chown httpd_log:httpd_log sslな。

書き忘れていたけど、もしssl使うなら、/usr/local/etc/apache2/ssl.confをErrorLog /var/log/httpd/ssl.log、TransferLog /var/log/httpd/access.log、CustomLog /var/log/httpd/ssl.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

な。この辺は趣味だが。

あと、logrotateとかnewsyslogとかにhttpdログローテート命令書いてる場合は、全部コメントアウトな。multilog使うので不要になるから。

んで、次は順にreadしてwriteする設定をちまちまとやっていく。

基本的には/usr/serviceにhttpd-ほげほげってディレクトリをつくって、その中のrunファイルに

#!/bin/sh

exec 2>&1
exec /usr/local/bin/setuidgid httpd_logr /usr/local/bin/rdfifo \
/var/log/さっき作ったfifoファイル

と書き、log/runファイルに

#!/bin/sh
exec /usr/local/bin/setuidgid httpd_log /usr/local/bin/multilog t s1024000 n64 \
/var/log/httpd/さっき作ったログ格納先

って感じでガシガシ書いていけばよい。斜体になってる部分でログ量を制御(上の設定だと、1Mのファイルが64個な)できるので、そこは適切に。

runとlog/runファイルをchmod 700 run log/runとしておいて、/serviceからln -s ../usr/service/httpd-ほげほげ で読み込み&multilog起動。

さっき作ったファイル全部にmultilogが起動していないと、apacheが起動中にログが吐けなくて止まるので要注意ね(笑)

あとはひたすらさっき作ったfifoの分だけ増殖させる。

一個マスターをつくっておいて、ちなちま書き換えるのが良いかもよ(笑)

analyzeだけはあとで追加設定があるので、/serviceからリンク張るのは後回し。

それ以外はがががががーっとリンクを張ってしまいましょう。

ちなみにワシはこんな状態

httpd-log-access-main
httpd-log-access-server
httpd-log-error
httpd-log-ssl
httpd-log-suexec

ちなみに、httpd-log-access-mainだけはログが巨大化するので、 log/runのmultilogのオプションをs10240000 n200としています。

ちなみにvirtual serverを何も起動していない状態なら、ここまで出来た段階でapachectl startで動き始めるはずです。

念のため、/var/log/httpdの中のerror/current当たりをcatしてみましょう。多分、ログが吐かれているはず。


というわけで、次はwebalizerの設定。

インストールはやる気無く/usr/ports/www/webalizerでmake installしましょう(笑)なんかgdを入れようとしてるのでiconvだけサポートにしておく。なんかlibjpeg、libpng、freetype2、pkg_configなどなど勝手にportsの依存関係を辿って入れてくれますが、とりあえずエラー無く終わり。

rehashしてwhich webalizerで/usr/local/bin/webalizerとなっている事を確認。

どっか適当なディレクトリにこんな感じでconfigファイルを作ります。

ROOT="/適当なディレクトリ"

んでもって、適当なユーザ(webalizerとでも名付けておこう)をつくって、chown webalizer:webalizer /var/log/httpd/access/analyze。

$ROOTにbinとtmpとworkとconfというディレクトリをwebalizer権限で作る。

んで

$ROOT/bin/multilog.analyze.sh (multilogからログがいっぱいになった次の瞬間に呼び出されるスクリプト)

#!/bin/sh
. /適当なパスのconfigファイル
/usr/bin/tee $ROOT/tmp/access_log
exec $ROOT/bin/analyze.sh

teeで$ROOT/tmp/access_logと標準出力に入力を吐いて、$ROOT/bin/analyze.shで実際のwebalizerを呼び出します。

$ROOT/bin/analyze.sh

#!/bin/sh
. /適当なパスのconfigファイル
umask 027
$ROOT/bin/analyze.one.sh 設定ファイルのプレフィックス "解析対象のURL"
$ROOT/bin/analyze.one.sh all
exit 0

解析対象のURLは""で囲って複数指定可能です。

$ROOT/bin/analyze.one.sh (webalizer1個分の処理)

#!/bin/sh

. 適当なパスのconfigファイル

umask 027

cd $ROOT/tmp
cat $ROOT/tmp/access_log | perl $ROOT/bin/aplogsp.pl $@ > $ROOT/tmp/$1.access_log
cd $ROOT/work/$1
/bin/date > last.time
exec 2> error_log.txt
exec > output_log.txt
/usr/local/bin/webalizer -c $ROOT/conf/$1.conf
exit 0

$ROOT/bin/aplogsp.pl (関連するURLだけ抜き出すスクリプト)

#!/usr/bin/perl

$ARGV[0] = "";

foreach $u(@ARGV){
$url = $u;
$url =~ s/\./\\./g;
if($url eq ""){ next;}
push(@url,$url);
}

if($#url < 0){
while($l=<STDIN>){
print $l;
}
}

while($l=<STDIN>){
@t = split(/"/,$l);
foreach $url(@url){
if($t[1] =~ /^[A-Za-z0-9]+ $url/){ print $l;last;}
}
}

んでもって、

$ROOT/conf/設定ファイルのプレフィックス.confというファイルが実際にwebalizerに喰わせる設定ファイルなので、/usr/local/etc/webalizer.conf-distを$ROOT/conf/設定ファイルのプレフィックス.confにコピってきて、設定する。

とりあえず、設定の必須ポイント

・LogFileを$ROOT/tmp/設定ファイルのプレフィックス.access_logに変更

・OutputDirをhttpでアクセスさせるローカルのパスに変更

・IncrementalNameを$ROOT/work/設定ファイルのプレフィックス/currentに変更

あとは趣味で変更。わしはTopReferrers 100000、AllReferrers yesとしている(笑)

あとはhttpでアクセス制限したり、位かな。

あー、binの中のスクリプトに実行権限付けるのを忘れずに(笑)

んで、だいぶと戻ってきてmultilogの設定をこんな感じに書き換えます。

/usr/service/httpd-log-access-analyze/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid webalizer /usr/local/bin/multilog s102400 n4 \
!'適当なパスの/bin/multilog.analyze.sh' \
/var/log/httpd/access/analyze

これで、ログがいっぱいになった時(≒100K毎)にwebalizer権限でmultilog.analyze.shが実行され、/var/log/httpd/access/analyzeにログが吐かれるようになります。

ここで、multilogの引数にtを付けると、確実にエラーになるので注意(笑)

ここまで設定した後、/serviceからln -s ../usr/service/httpd-log-access-analyze .として起動。

あとはapacheの設定。

ログを取りたい設定で、

/usr/local/etc/apache2/virtual/servers/の中のhttp.ほげほげ.confで

<VirtualHost *>
ServerAdmin webmaster@proj.jp
DocumentRoot /サーバ上のパス/htdocs
ServerName サーバ名
CustomLog /var/log/httpd/access/main.log conbinedfile
CustomLog /var/log/httpd/access/analyze.log analyzed
SuexecUserGroup cgi実行ユーザ cgi実行グループ
</VirtualHost>

として、CustomLog /var/log/httpd/access/analyze.log analyzedという行を追加します。analyzedとconbinedfileに関しては、昨日書いたhttpd.confの設定を参照ね。

あとは勝手にログがたまったらwebalizerを呼んで実行、解析、バックアップしてくれる……ハズです(笑)

まだ試してないけどね(明日試すよ!)

Last Update: 2007-11-06 23:50:34

カレンダー

2003|04|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|11|
2013|03|05|08|
2014|01|
2015|04|05|06|07|09|10|12|
2016|01|03|05|06|10|11|
2017|06|
2018|05|08|09|10|11|
2019|04|
Generated by tDiary version 4.1.2 + amazon(DB Patch 0.2.1) + counter(DB Patch 0.2) + IKPatch version beta 4.0.1.
Powered by Ruby version 2.1.5-p273 with ruby-fcgi