以前、このエントリでご紹介した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
以上でできあがりです。ね、簡単でしょう?
[amazonjs asin="4873116457" locale="JP" title="マスタリングNginx"]