![]() |
LINUX |
visitorsのインストール
*Apacheのaccess_logの解析をします
*visitorsは C言語 で書かれており、軽快に動作します
*visitors-0.7をソースからインストールし、設定します
*sfreeサイトさんの日本語パッチを使っています
*cssを外部で設定できるように修正しています
*httpdが先に起動している必要があります
**以降はコメントです
*ファイルの取得、削除は省略します
*エディタ、ファイラーの操作は省略します
*説明文 (英文) を読みましょう
*Enterキーを省略します
*ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
*設定ファイルで "#" で始まる行はコメントとして解釈されます
関連サイト| :visitors-0.7.tar.gz | (http://www.hping.org/visitors/) |
| :visitors_0.7-JP2.tar.gz | (http://www.sfree.sc/) |
参照ファイル:パッケージの追加
:最初の設定 (Xen)
:httpd/phpのインストール
インストール環境| :OS | CentOS 5.5 |
| :selinux | disabled or permissive |
| :インストール先 | /usr/local/bin/ |
| :作業 | /usr/src |
| :言語 | LANG=en_US.UTF-8 |
| :ユーザー | rootで実行 |
*メンテナンスの場合は一般ユーザから行います
visitors-0.7
ファイルの展開・インストール*sfreeサイトの日本語化visitorsを使わせていただきます
# cd /usr/src # tar zxvf visitors_0.7-JP2.tar.gz # chown -R root:root visitors_0.7 # cd visitors_0.7
*パッチを当てます (下記参照)
*パッチファイルは一つ上のディレクトリに置きます
# patch -p1 < ../visitors-SUBCSSJP.patch # make # cp visitors /usr/local/bin # cp visitors.1 /usr/local/man/man1
*必要ならば下記ドキュメントhtmlをコピーします
doc.html powered-by-visitors.png visitors.css visitors.png
# cd /usr/src
# tar jcf visitors_0.7-JP2-100522.tar.bz2 visitors_0.7/
*必要なディレクトリを作成します
# mkdir -p /home/www/myhome/visitors # chmod 711 /home/www/myhome/visitors # chown apache:apache /home/www/myhome/visitors
*外部スタイルシートを読み込みます (ファイル名 v-cool.css)
*動的IPの場合、ホスト名は変わるので、サブドメインまでを表示します
access_logのIPアドレスをドメイン名にする*apacheの設定で、"HostnameLookups off"になっており、ログはIPアドレスで記録されます
*visitorsの実行前に、perlスクリプトでドメイン名に変換します (全て変換できるわけではない)
:/usr/local/bin/ip2host (root root 700)
#!/usr/bin/perl # # Convert IP to hostname (domain name) #
while ($ln = <STDIN>){
if ($ln =~ /^(\d+\.\d+\.\d+\.\d+)/) {
$ip = $1; $rest = $';
if ($host = gethostbyaddr(pack("C4", split(/\./, $ip)), 2)) {
$ln = $host . $rest;
}
}
print $ln;
}
exit;
*実行例
# ip2host < /var/log/httpd/access_log > access_log_host
レポートhtml作成スクリプト:/usr/local/bin/day-repo.sh (root root 700)
*access_log.1 がないとエラーになるので、空のファイルを作成しておいてください
*date の出力は言語が en_US.UTF-8 の場合です、他の場合は date の出力を確認して下さい
*ユーザ・オーナー・パーミッションを変更しています
*chown、chmod は危険なコマンドなので実行権に注意
#!/bin/bash
LOGDIR='/var/log/httpd' REPODIR='/home/www/myhome/visitors' IP2HOST='/usr/local/bin/ip2host' VISITORS='/usr/local/bin/visitors'
WeekDay=$(date +%a)
TopDay=$(date +%d)
YesDate=$(date --date '1 days ago' | awk '{print $3}')
YesMonth=$(date --date '1 days ago' | awk '{print $2}')
YesYear=$(date --date '1 days ago' | awk '{print $6}')
PreYear=$(date --date '1 months ago' | awk '{print $6}')
PreMonth=$(date --date '1 months ago' | awk '{print $2}')
FNameDate=$(date --date '1 months ago' | awk '{print $2 $6}')
if [ "$WeekDay" = Mon ] ; then
if [ -f $REPODIR/fqdn_access_log.5 ] ; then
rm -f $REPODIR/fqdn_access_log.5
fi
if [ -f $REPODIR/fqdn_access_log.4 ] ; then
mv $REPODIR/fqdn_access_log.4 $REPODIR/fqdn_access_log.5
fi
if [ -f $REPODIR/fqdn_access_log.3 ] ; then
mv $REPODIR/fqdn_access_log.3 $REPODIR/fqdn_access_log.4
fi
if [ -f $REPODIR/fqdn_access_log.2 ] ; then
mv $REPODIR/fqdn_access_log.2 $REPODIR/fqdn_access_log.3
fi
if [ -f $REPODIR/fqdn_access_log.1 ] ; then
mv $REPODIR/fqdn_access_log.1 $REPODIR/fqdn_access_log.2
fi
if [ -f $REPODIR/fqdn_access_log ] ; then
mv $REPODIR/fqdn_access_log $REPODIR/fqdn_access_log.1
fi
grep $YesDate/$YesMonth/$YesYear $LOGDIR/access_log.1 > $REPODIR/log_sun_grep
cat $REPODIR/log_sun_grep > $REPODIR/access_log_sun
cat $LOGDIR/access_log >> $REPODIR/access_log_sun
$IP2HOST < $REPODIR/access_log_sun > $REPODIR/fqdn_access_log
rm -f $REPODIR/log_sun_grep
rm -f $REPODIR/access_log_sun
fi
if [ "$WeekDay" != Mon ] ; then
grep $YesDate/$YesMonth/$YesYear $LOGDIR/access_log > $REPODIR/log_plus_grep
$IP2HOST < $REPODIR/log_plus_grep > $REPODIR/fqdn_plus_log
cat $REPODIR/fqdn_plus_log >> $REPODIR/fqdn_access_log
rm -f $REPODIR/log_plus_grep
rm -f $REPODIR/fqdn_plus_log
fi
$VISITORS -A -H -m 100 $REPODIR/fqdn_access_log | nkf -w -m0 > $REPODIR/repo-days.html chown apache:apache $REPODIR/repo-days.html chmod g-w,o-rw $REPODIR/repo-days.html
if [ "$TopDay" = 01 ] ; then
cat $REPODIR/fqdn_access_log* > $REPODIR/access_log_month
grep $PreMonth/$PreYear $REPODIR/access_log_month > $REPODIR/log_month_grep
$VISITORS -A -H -m 100 $REPODIR/log_month_grep | nkf -w -m0 > $REPODIR/$FNameDate.html
chown apache:apache $REPODIR/$FNameDate.html
chmod g-w,o-rw $REPODIR/$FNameDate.html
rm -f $REPODIR/access_log_month
rm -f $REPODIR/log_month_grep
fi
exit
*dateコマンドの出力から曜日、日、月、年を切り出し選択の要素として使います
*日曜日の4時にapacheがログのローテートをするのでタイムラグが生じます
*月曜日に、日曜日のログの分を取り出して、IPアドレスをドメイン名に変更します
*月曜日以外は、前日のログの分を取り出して、IPアドレスをドメイン名に変更します
*月曜日に作成した"fqdn_access_log"に順次追加して visitorsで出力します
*"fqdn_access_log"は、月曜日にローテート(5周間分)し、新たに作成します
*毎月1日に"fqdn_access_log"(*.1から*.5も含む)から、前月分を取り出します
*visotorsで解析し、(month/year) の名前を付けて出力します
*ホスト名変換 (ip2host) に時間がかかるので、変換を少なくしています
cronでの定期的実行*/etc/cron.d に設定ファイルを置きます (ユーザ・グループ・パーミッションに注意)
*MAILTO="" はメールを送信しない設定です (デフォルトは実行者にメールを送信)
*毎日0時1分にroot権限で v-repo.sh を実行します
*行末に改行を入れること
:/etc/cron.d/visitos-repo (root root 644)
MAILTO="" 1 0 * * * root /usr/local/bin/v-repo.sh
アクセス制限:httpd-personal.confに下記内容を追加します
*ローカルからの接続のみ許可します
<IfModule alias_module>
Alias /visitors "/home/www/myhome/visitors"
</IfModule>
<Directory "/home/www/myhome/visitors">
Options SymLinksifOwnerMatch IncludesNoExec
AllowOverride None
Order deny,allow
Deny from all
Allow from 192.168.0
</Directory>
外部スタイルシート*パッチを当てた場合は、html出力先のディレクトリに作成してください
*名前を変えたい場合はパッチを修正してください
*例 visitorsオリジナルのスタイルです
:v-cool.css
BODY, TD, B, LI, U, DIV, SPAN {
background-color: #ffffff;
color: #000000;
font-family: Verdana, Arial, Helvetica, Sans-Serif;
font-size: 10px;
}
A {
color: #0066ff;
text-decoration: none;
}
A:visited {
color: #000099;
text-decoration: none;
}
A:active {
color: #26a0be;
text-decoration: none;
}
A:hover {
color: #ffffff;
text-decoration: none;
background-color: #26a0be;
}
.barfill {
background-color: #96ef94;
border-left: 1px;
border-right: 1px;
border-top: 1px;
border-bottom: 1px;
border-color: #4c934a;
border-style: solid;
font-size: 10px;
height: 3px;
line-height: 4px;
}
.barempty {
font-size: 10px;
line-height: 4px;
}
.barleft {
background-color: #ff9696;
border-left: 1px;
border-right: 1px;
border-top: 1px;
border-bottom: 1px;
border-color: #4c934a;
border-style: solid;
font-size: 10px;
height: 3px;
line-height: 4px;
}
.barright {
background-color: #f8f8f8;
border-left: 0px;
border-right: 1px;
border-top: 1px;
border-bottom: 1px;
border-color: #4c934a;
border-style: solid;
font-size: 10px;
height: 3px;
line-height: 4px;
}
.title {
background-color: #007f9e;
font-size: 12px;
font-weight: bold;
padding: 3px;
color: #ffffff;
}
.reportlink {
background-color: #ffffff;
font-size: 12px;
font-weight: bold;
color: #000000;
padding-left: 3px;
}
.subtitle {
background-color: #007f9e;
font-size: 12px;
font-weight: normal;
padding: 3px;
color: #ffffff;
}
.info {
background-color: #badfee;
font-size: 12px;
padding-left: 3px;
padding-right: 3px;
}
.keyentry {
font-size: 10px;
padding-left: 2px;
border-bottom: 1px dashed #bcbcbc;
}
.keyentrywe {
background-color: #f0f090;
font-size: 10px;
padding-left: 2px;
border-bottom: 1px dashed #bcbcbc;
}
.valueentry {
font-size: 10px;
padding-left: 2px;
color: #905d14;
border-bottom: 1px dashed #f6c074;
}
.credits {
font-size: 12px;
font-weight: bold;
}
.maintable {
border-style: solid;
border-color: #0b4b5b;
border-width: 1px;
}
![]() |
Copyright(c) 528p.com All Rights Reserved. |

