parudou
parudou
parudou
更新日:2018/10/29

2018年版:Logwatch(ログウォッチ)をNginxに対応させる方法。エラーログ独自対応。

Nginxを入れたら忘れてはならないのが、Logwatchの対応。
設定しないとNginxのログは無視されます。

そして、2018年10月22日時点では、検索してもどのサイトも間違っている。
エラーログはフォーマットが違うのでApacheの設定コピーでは対応できません。
誰か気づいて…。ということで、正しいやり方を書く。

環境

とりあえず、アクセスログから順番に。
エラーログは最後。

アクセスログ用設定ファイルの作成

まずは必要なファイルを作成します。
Apacheの設定ファイル3つをコピー。

#Nginx用のアクセスログ設定ファイル作成
cp /usr/share/logwatch/scripts/services/http /etc/logwatch/scripts/services/nginx
cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/nginx.conf
cp /usr/share/logwatch/default.conf/logfiles/http.conf /etc/logwatch/conf/logfiles/nginx.conf

この3つのファイルをNginx用に修正していきます。

1、/etc/logwatch/scripts/services/nginx

290行目あたり。

~
500 => 'Internal Server Error',

#この2つを追加
444 => 'close',
499 => 'Client_Closed_Request',

501 => 'Not Implemented',
~

「444」「499」はNginxではよくあるコードなので、登録しておきます。

2、/etc/logwatch/conf/services/nginx.conf

次の2行を変更します。

#変更前
Title = "httpd"
LogFile = http

#変更後
Title = "nginx"
LogFile = nginx

「Title」はログウォッチのログの題名です。
ようするに、なんでもいい。

「LogFile」はログ定義ファイル名を指します。
下記3の「/etc/logwatch/conf/logfiles/nginx.conf」を指定するという意味。

3、/etc/logwatch/conf/logfiles/nginx.conf

まず、「#LogFile」「#Archive」で始まる行を全てコメントアウトします。
削除しても良い。

#LogFile = httpd/*access_log
#LogFile = apache/*access.log.1
#LogFile = apache/*access.log
#LogFile = apache2/*access.log.1
#LogFile = apache2/*access.log
#LogFile = apache2/*access_log
#LogFile = apache-ssl/*access.log.1
#LogFile = apache-ssl/*access.log

#Archive = archiv/httpd/*access_log.*
#Archive = httpd/*access_log.*
#Archive = apache/*access.log.*.gz
#Archive = apache2/*access.log.*.gz
#Archive = apache2/*access_log.*.gz
#Archive = apache-ssl/*access.log.*.gz
#Archive = archiv/httpd/*access_log-*
#Archive = httpd/*access_log-*
#Archive = apache/*access.log-*.gz
#Archive = apache2/*access.log-*.gz
#Archive = apache2/*access_log-*.gz
#Archive = apache-ssl/*access.log-*.gz

次に、Nginxのログを指定します。
追加するのはどの場所でもいいです。

LogFile = nginx/*access.log*
Archive = nginx/*access.log.*.gz

ここでは「/var/log」がrootディレクトリになっているため、
Nginxのアクセスログ保存場所である「nginx/」を指定しています。
もしログの保存場所を変更していれば、絶対パスで指定してください。

動作確認

次のコマンドで出力されます。

logwatch --output stdout --service nginx

ログウォッチが動けばバッチリです。
では、次にエラーログを設定します。

エラーログ用の設定ファイル作成

NginxのエラーログはApacheとはフォーマットが違うので、
アクセスログのようにコピー&修正では不可能です。
完全に独自のログとして設定する必要があります。

ステータスコード別に集計することは難しいので、
ここではただエラーログの中身を全て出力するようにします。

1、スクリプトファイル作成

次のファイルを作成します。

vi /etc/logwatch/scripts/services/nginx-error

下記コードを入力します。

#!/bin/perl

use Logwatch ':dates';
$sdate = TimeFilter('%Y/%m/%d');

while (defined($line = )) {
if ($line =~ /^$sdate/) {
print $line;
}
}

perlの場所はサーバーによって変わるので変更ください。
上記はさくらVPSの場合です。

2、スクリプトの定義ファイル作成

次のファイルを作成します。

vi /etc/logwatch/conf/services/nginx-error.conf

下記コードを入力します。

Title = "nginx-error"
LogFile = nginx-error

この2行だけでOK。

3、エラーログの定義ファイル作成

次のファイルを作成します。

vi /etc/logwatch/conf/logfiles/nginx-error.conf

下記コードを入力します。

LogFile = nginx/*error.log*
Archive = nginx/*error.log-*.gz

この2行だけでOK。

エラーログ作動確認

次のコマンドで出力されます。

logwatch --output stdout --service nginx-error

エラーログがそのままずらっと出てきます。
自分の場合は数サイトあっても数える程度ですが、人により数百行ある可能性があります。
その場合はスクリプトを上手く書くか、エラーログ自体を減らそう。

以上です

これにてLogwatch(ログウォッチ)でのNginx完全対応。
エラーログの出力方法をもう少しプログラミングして見栄え良くしてもいいですが、
自分の場合はエラーが少なく無駄なので必要性を感じません。

location = /xmlrpc.php {
deny all;
}

このように「deny all;」としているとエラーログに出力されますので、
「return 403;」などにすると良いです。
したらば、そう多くはエラーは出ないはず。出てたら逆に何とかしないと危険。

是非、お試しください。

是非ご感想・ご指摘等をください。

プロフィール

管理人:parudou
単なるWEBサイト作成マニアです。
底辺法人アフィリエイター。
Twitterはこちら

日記はパルどうSEOブログ

Copyright (c) parudou All Rights Reserved.