[nginx] awstatsをnginxで動かす その2


以前、このエントリでご紹介したawstatsをnginxで動かす方法ですが、muninをインストールしている監視サーバ(さくらVPS 2G)に後からepel経由でawstatsをインストールしようとすると、ソケットの取り合いになってしまうようでうまく動きませんでした。

いろいろ調べているうちに、awstats公式サイトから awstats-7.3.tar.gz をダウンロードしてインストールすると良いことがわかったので、手順をメモしておきます。

[前提条件]

OS CentOS release 6.5 (Final)
WEBサーバ nginx (CentALTからインストール)
インストールしたPHPのパッケージ php-cli php-common php-mbstring php-pdo php-xml php-mysqlnd php-pecl-apcu php-xmlrpc php-opcache php-fpm
インストールしたPerlのパッケージ 多数につき省略。基本的に、munin munin-nodeが依存しているものをyumでインストールした。

awstatsインストール前にmuninが動いていることが前提となりますが、適切にperlのモジュールをインストールしてあげればmuninがない環境でも大丈夫です。nginxとphp-fpmの連携ができていればOKです。muninのインストール手順はこちらを参照してください。

■ awstats ダウンロード

awstats公式サイトから本エントリ執筆時点での最新版 ( awstats-7.3.tar.gz ) をダウンロードし、解凍します。

$ wget http://prdownloads.sourceforge.net/awstats/awstats-7.3.tar.gz
$ tar xzf awstats-7.3.tar.gz

■ awstatsを /usr/share 以下に配置する

解凍してできた awstats-7.3 ディレクトリを /usr/share/ 以下にコピーします。

$ sudo cp -pr awstats-7.3 /usr/share/awstats/

■ fcgiファイルを配置する

解凍後のディレクトリ/tools/nginx/以下にnginx用のconfigとawstats-fcgi.php(fcgiファイル)があるので、awstats-fcgi.phpをcgi-binディレクトリにコピーします。

$ sudo cp -p /usr/share/awstats/tools/nginx/awstats-fcgi.php /usr/share/awstats/wwwroot/cgi-bin/

■ awstatsのconfigファイルを作成する

今回構築するawstatsのURLが http://www0000hoge.sakura.ne.jp/cgi-bin/awstats.pl?config=○○○○○○○○ (解析したいホストのFQDN)だとして、まずは自分自身のログを解析してみましょう。○○○○○○○○の部分に自分自身のホスト名 ( www0000hoge.sakura.ne.jp ) が入ります。まずはawstatsのconfigファイルをテンプレートからコピーします。

$ sudo mkdir -p /etc/awstats
$ sudo mkdir -p /var/lib/awstats
$ sudo cp -p /usr/share/awstats/wwwroot/cgi-bin/awstats.model.conf /etc/awstats/awstats.www0000hoge.sakura.ne.jp.conf
$ sudo vi /etc/awstats/awstats.www0000hoge.sakura.ne.jp.conf

変更箇所は以下の通りです。

LogFile="/var/log/httpd/access_log"
 ↓
LogFile="/var/log/nginx/access.log"
SiteDomain=""
 ↓
SiteDomain="awstats.www0000hoge.sakura.ne.jp"
HostAliases="localhost 127.0.0.1 REGEX[myserver.com$]"
 ↓
HostAliases="REGEX[^.*www0000hoge.sakura.ne.jp$]"
DirData="."
 ↓
DirData="/var/lib/awstats"
DirCgi="/cgi-bin"
 ↓
DirCgi="/awstats"
DirIcons="/icon"
 ↓
DirIcons="/awstatsicons"
EnableLockForUpdate=0
 ↓
EnableLockForUpdate=1
SkipHosts=""
 ↓
SkipHosts="127.0.0.1"
Expires=0
 ↓
Expires=3600

 

■ nginxのバーチャルホスト設定

www0000hoge.sakura.ne.jp (awstats用のバーチャルホスト)のnginx設定を行います。

$ sudo vi /etc/nginx/conf.d/awstats.conf
server {
    listen 80;
    server_name www0000hoge.sakura.ne.jp;
    root /var/www/html;
    index index.html;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/htpasswd;
    location ^~ /awstats/classes/ {
        alias /usr/share/awstats/wwwroot/classes/;
    }
    location ^~ /awstats/css/ {
        alias /usr/share/awstats/wwwroot/css/;
    }
    location ^~ /awstats/icon/ {
        alias /usr/share/awstats/wwwroot/icon/;
    }
    location ^~ /awstats-icon/ {
         alias /usr/share/awstats/wwwroot/icon/;
    }
    location ^~ /awstatsicons/ {
        alias /usr/share/awstats/wwwroot/icon/;
    }
    location ^~ /awstats/js/ {
         alias /usr/share/awstats/wwwroot/js/;
    }
    location ~ ^/cgi-bin/(awredir|awstats).pl {
        gzip off;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME /usr/share/awstats/wwwroot/cgi-bin/awstats-fcgi.php;
        fastcgi_param X_SCRIPT_FILENAME /usr/share/awstats/wwwroot$fastcgi_script_name;
        fastcgi_param X_SCRIPT_NAME $fastcgi_script_name;
    }
}

 

■ ベーシック認証のファイル作成

muninで使用しているベーシック認証ファイルをそのまま流用しますが、もしベーシック認証のファイルがなければ以下の手順で作成します。
例)
ID: USERNAME
パスワード: PASSWORD_IS_HERE

$ echo "USERNAME:$(openssl passwd -apr1 PASSWORD_IS_HERE)" > ~/htpasswd
$ sudo mv ~/htpasswd /etc/nginx/htpasswd
$ sudo chown root:nginx /etc/nginx/htpasswd
$ sudo chmod 640 /etc/nginx/htpasswd

 

■ nginx 再読込

nginxの設定ファイルの構文が正しいことを確認し、nginxを再読込します。

$ sudo service nginx configtest
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Reloading nginx:                                            [ OK ]

 

■ awstats更新スクリプト作成

awstatsの設定ファイルごとに更新をかけるシェルスクリプトを /root/bin/STATSUPDATE として作成します。

$ sudo [ ! -d /root/bin ] && sudo mkdir -p /root/bin
$ sudo touch /root/bin/STATSUPDATE
$ sudo chmod 700 /root/bin/STATSUPDATE
$ sudo vi /root/bin/STATSUPDATE
#!/bin/bash
LANG=C
for i in $(basename $(ls /etc/awstats/awstats.*) | sed -e 's/awstats.//g;s/.conf//g')
do
    perl /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config="$i" -update
done

 

■ awstats更新スクリプト cron登録

先ほどの手順で作成したシェルスクリプトをcronに登録します。異常終了時のみrootにメールを飛ばすようにし、5分に1回実行します。

$ sudo vi /etc/cron.d/statsupdate
MAILTO=root
*/5 * * * * root /root/bin/STATSUPDATE > /dev/null

以上でできあがりです。ね、簡単でしょう?