CentOS 7 Awstatsインストール

アクセスログ解析(Awstats)

Awstats は視覚的に綺麗で、見やすいログ解析ツールだ。
日別・時間別・アクセス先など様々な統計情報を把握することが出来る。
Yumでインストールする場合、EPELリポジトリを追加しておく。

■awstatsをインストール

[root@server1 ~]# yum install awstats
読み込んだプラグイン:fastestmirror, langpacks, priorities
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * centosplus: ftp.riken.jp
 * epel: mirror.nus.edu.sg
 * extras: ftp.riken.jp
 * updates: mirrors.163.com
53 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ awstats.noarch 0:7.3-2.el7 を インストール
--> 依存性の処理をしています: perl-Geo-IP のパッケージ: awstats-7.3-2.el7.noarch
--> トランザクションの確y認を実行しています。
---> パッケージ perl-Geo-IP.x86_64 0:1.43-3.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package                   アーキテクチャー     バージョン                 リポジトリー        容量
====================================================================================================
インストール中:
 awstats                   noarch               7.3-2.el7                  epel               2.3 M
依存性関連でのインストールをします:
 perl-Geo-IP               x86_64               1.43-3.el7                 epel                87 k

トランザクションの要約
====================================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 2.4 M
インストール容量: 6.8 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): awstats-7.3-2.el7.noarch.rpm                                          | 2.3 MB  00:00:01
(2/2): perl-Geo-IP-1.43-3.el7.x86_64.rpm                                     |  87 kB  00:00:01
----------------------------------------------------------------------------------------------------
合計                                                                1.3 MB/s | 2.4 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : perl-Geo-IP-1.43-3.el7.x86_64                                       1/2
  インストール中          : awstats-7.3-2.el7.noarch                                            2/2
  検証中                  : perl-Geo-IP-1.43-3.el7.x86_64                                       1/2
  検証中                  : awstats-7.3-2.el7.noarch                                            2/2

インストール:
  awstats.noarch 0:7.3-2.el7

依存性関連をインストールしました:
  perl-Geo-IP.x86_64 0:1.43-3.el7

完了しました!

※今までは別々にインストールする必要があったperl-Geo-IPも一緒にインストールされる

■Awstatsの設定ファイルの編集

不要な設定ファイルを削除しておく
[root@server1 ~]# rm -f /etc/awstats/awstats.localhost.localdomain.conf
[root@server1 ~]# rm -f /etc/awstats/awstats.server1.yokensaka.com.conf

設定ファイルのコピー
[root@server1 ~]# cp /etc/awstats/awstats.model.conf /etc/awstats/awstats.yokensaka.com.conf

設定ファイルの編集
[root@server2 ~]# vi /etc/awstats/awstats.yokensaka.com.conf

独自ドメイン名に変更
SiteDomain="localhost.localdomain"
↓
SiteDomain="yokensaka.com"

アクセス元から内部(例:192.168.1.X)を除外する
HostAliases="localhost 127.0.0.1"
↓
HostAliases="localhost 127.0.0.1 REGEX[^192\.168\.1\.]"

アクセス元の名前解決を行う(アクセス元をIPアドレスではなくホスト名で表示する)
DNSLookup=2
↓
DNSLookup=1

コメント解除(該当する部分にマウスを当てるとヘルプが表示される)
#LoadPlugin="tooltips"
↓
LoadPlugin="tooltips"

コメント解除(アクセス元国情報を詳細に取得)
#LoadPlugin="geoipfree"
↓
LoadPlugin="geoipfree"

■AWStatsデータベース作成
AWStatsデータベース初期作成スクリプト作成

[root@server1 ~]# vi awstatsinit.sh
#!/bin/sh
logfile=`grep ^LogFile /etc/awstats/awstats.$1.conf|sed -e 's/LogFile="\([^ ]*\)"/\1/p' -e d`
for log in `ls $logfile*|sort -r`
do
`rpm -ql awstats|grep "awstats\.pl"` \
-config=$1 -update -logfile=$log
done

AWStatsデータベース初期作成スクリプト実行

[root@server1 ~]# sh awstatsinit.sh yokensaka.com
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.3 (build 20140126)
From data in log file "/var/log/httpd/access_log-20140928"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record has fallen on another record.
So searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 491882
 Found 474 dropped records,
 Found 0 comments,
 Found 0 blank records,
 Found 2824 corrupted records,
 Found 488584 old records,
 Found 0 new qualified records.
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.3 (build 20140126)
From data in log file "/var/log/httpd/access_log-20140921"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record has fallen on another record.
So searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 497671
 Found 706 dropped records,
 Found 0 comments,
 Found 0 blank records,
 Found 2766 corrupted records,
 Found 494199 old records,
 Found 0 new qualified records.
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.3 (build 20140126)
From data in log file "/var/log/httpd/access_log"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 112559
 Found 94 dropped records,
 Found 0 comments,
 Found 0 blank records,
 Found 546 corrupted records,
 Found 111373 old records,
 Found 546 new qualified records.

AWStatsデータベース初期作成スクリプト削除
[root@server1 ~]# rm -f awstatsinit.sh

■Apacheログローテーション設定ファイル編集
Apacheログファイル切替え時、AWStatsのデータベースに取り込んでから切替えを行うようにする

[root@server1 ~]# vi /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    ----追加(ここから)----
    prerotate
        `rpm -ql awstats|grep "awstats_updateall\.pl"` now -confdir="/etc/awstats" \
        -awstatsprog="`rpm -ql awstats|grep "awstats\.pl"`" >/dev/null
    endscript
    ----追加(ここまで)----
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

■Apache設定
Apache用AWStats設定ファイル編集

[root@server1 ~]# vi /etc/httpd/conf.d/awstats.conf
<Directory "/usr/share/awstats/wwwroot">
    Options None
    AllowOverride None
    <IfModule mod_authz_core.c>    
        # Apache 2.4
        Require local
        Require ip 192.168.1.0/24 → 内部ネットワークを追加
    </IfModule>
    <IfModule !mod_authz_core.c> 
        # Apache 2.2
        Order allow,deny
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>

設定反映(httpdを再起動)

[root@server1 ~]# systemctl reload httpd

これで、/etc/cron.hourly/awstats が一時間毎に実行される。セットアップして1時間たってから、 http://サーバーアドレス/awstats/awstats.pl にアクセスすれば、解析結果が見れるようになる。
Error: Couldn’t open config file・・・というエラーが出る場合は

http://サーバーアドレス/awstats/awstats.pl?config=ドメイン名

アクセスログ解析(Awstats)

Awstats は視覚的に綺麗で、見やすいログ解析ツールだ。
日別・時間別・アクセス先など様々な統計情報を把握することが出来る。
Awstatsをインストールする前にRepoforgeリポジトリを追加しておく。
■Awstatsのインストール
以下のコマンドでAwstatsをインストールする。

[root@server1 ~]# yum -y install awstats

awstatsを使うには、perlも必要。perl -vと入力して、
以下のような情報が返ってくれば、perlはインストールされている。

[root@server1 ~]# perl -v
This is perl, v5.10.1 (*) built for i386-linux-thread-multi
Copyright 1987-2009, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

■ Awstatsの設定ファイルの編集

まず不要な設定ファイルを削除しておく
[root@server1 ~]# rm -f /etc/awstats/awstats.localhost.localdomain.conf
[root@server1 ~]# rm -f /etc/awstats/awstats.`hostname`.conf
設定ファイルのコピー
[root@server1 ~]# cp /etc/awstats/awstats.model.conf /etc/awstats/awstats.yokensaka.com.conf
awstats.confを編集
[root@server1 ~]# vi /etc/awstats/awstats.yokensaka.com.conf
SiteDomain="localhost.localdomain"
 ↓
SiteDomain="yokensaka.com" ← 独自ドメイン名に変更
HostAliases="localhost 127.0.0.1"
 ↓
HostAliases="localhost 127.0.0.1 REGEX[^192\.168\.1\.]"   ← 内部からはスキップするように変更
DNSLookup=2
 ↓
DNSLookup=1 ← 1に変更(DNSの逆引きにする設定に変更)
#LoadPlugin="tooltips"
 ↓
LoadPlugin="tooltips" ← #を削除(該当する部分にマウスを当てるとヘルプが表示される。)
#LoadPlugin="geoipfree"
↓
LoadPlugin="geoipfree" ← #を削除(アクセス元の国情報を詳細に取得するように設定変更)
プラグイン「perl-Geo-IPfree」のダウンロード
[root@server1 ~]# wget http://pkgs.repoforge.org/perl-Geo-IPfree/perl-Geo-IPfree-0.8-1.el6.rf.noarch.rpm
perl-Geo-IPfreeのインストール
[root@server1 ~]# yum -y localinstall --nogpgcheck perl-Geo-IPfree-*.rpm
ダウンロードしたファイルを削除
[root@server1 ~]# rm -f perl-Geo-IPfree-*.rpm

■ awstats.plアクセス制限

[root@server1 ~]# vi /etc/httpd/conf.d/awstats.conf
<Directory /var/www/awstats/>
DirectoryIndex awstats.pl
Options ExecCGI
order deny,allow
deny from all
allow from all ← 追加
#allow from 127.0.0.1 ← コメントアウト
allow from xxx.xxx.xxx.xxx ← 特定の外部IP(xxx.xxx.xxx.xxx)からのアクセスを許可
</Directory>
Apache設定反映
[root@server1 ~]# /etc/rc.d/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

会社等からアクセスする場合、自分の会社の接続環境(IPアドレス)を調べ、/etc/hosts.allowへ登録する必要がある。そんな時は診断くんで確認できる。
■ ApacheログファイルからAWStatsのデータファイル作成

AWStatsデータベース初期作成スクリプト作成
[root@server1 ~]# vi awstatsinit.sh
#!/bin/sh
logfile=`grep ^LogFile /etc/awstats/awstats.$1.conf|sed -e 's/LogFile="\([^ ]*\)"/\1/p' -e d`
for log in `ls $logfile*|sort -r`
do
`rpm -ql awstats|grep "awstats\.pl"` \
-config=$1 -update -logfile=$log
done
AWStatsデータベース初期作成スクリプト実行
[root@server1 ~]# sh awstatsinit.sh yokensaka.com
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.1 (build 1.983)
From data in log file "/var/log/httpd/access_log-20140706"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record has fallen on another record.
So searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 241447
Found 16 dropped records,
Found 0 comments,
Found 0 blank records,
Found 6 corrupted records,
Found 241425 old records,
Found 0 new qualified records.
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.1 (build 1.983)
From data in log file "/var/log/httpd/access_log-20140629"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 233838
Found 18 dropped records,
Found 0 comments,
Found 0 blank records,
Found 0 corrupted records,
Found 233820 old records,
Found 0 new qualified records.
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.1 (build 1.983)
From data in log file "/var/log/httpd/access_log-20140622"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record has fallen on another record.
So searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 261127
Found 8 dropped records,
Found 0 comments,
Found 0 blank records,
Found 2 corrupted records,
Found 261117 old records,
Found 0 new qualified records.
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.1 (build 1.983)
From data in log file "/var/log/httpd/access_log-20140615"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record has fallen on another record.
So searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 268241
Found 26 dropped records,
Found 0 comments,
Found 0 blank records,
Found 6 corrupted records,
Found 268209 old records,
Found 0 new qualified records.
Create/Update database for config "/etc/awstats/awstats.yokensaka.com.conf" by AWStats version 7.1 (build 1.983)
From data in log file "/var/log/httpd/access_log"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 48942
Found 2 dropped records,
Found 0 comments,
Found 0 blank records,
Found 2 corrupted records,
Found 48900 old records,
Found 38 new qualified records.
AWStatsデータベース初期作成スクリプト削除
[root@server1 ~]# rm -f awstatsinit.sh

■ httpdの設定ファイルの編集

httpdの設定ファイルの編集
[root@server1 ~]# vi /etc/httpd/conf/httpd.conf
長すぎるURI(414 Error)はログに記録しない
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
         ↓
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
ログの記録内容変更
# logged therein and *not* in this file.
#
#CustomLog logs/access_log common
この下に以下を追加
SetEnvIf Request_URI "default\.ida" no_log
SetEnvIf Request_URI "cmd\.exe" no_log
SetEnvIf Request_URI "root\.exe" no_log
SetEnvIf Request_URI "Admin\.dll" no_log
SetEnvIf Request_URI "NULL\.IDA" no_log
SetEnvIf Remote_Addr 192.168.1 no_log
SetEnvIf Remote_Addr 127.0.0.1 no_log
CustomLog logs/access_log combined env=!no_log
以上で設定は完了、一度httpdを再起動させる。
[root@server1 ~]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

これで、/etc/cron.hourly/awstats が一時間毎に実行される。セットアップして1時間たってから、 http://サーバーアドレス/awstats/awstats.pl にアクセスすれば、解析結果が見れるようになる。
Error: Couldn’t open config file・・・というエラーが出る場合は
http://サーバーアドレス/awstats/awstats.pl?config=ドメイン名