(2023年対応済)2019年版:Logwatch(ログウォッチ)をNginxに対応させる方法。エラーログ独自対応。
2023年現在はNginxに対応済
LogwatchはNginxに対応したので対処不要です。
Apacheと共通の「httpd」のグループにNginxも加わりました。
そのため何もせずNginxに最初から対応しています。
ただし、ログフォーマットがかなりシンプルになっているので、
ホスト名など詳細を見たい場合は修正する必要があります。
もう1点の注意点として、アクセスログファイルの指定が下記になっていること。
- ・LogFile = nginx/*access.log
- ・LogFile = nginx/*access.log.1
- ・Archive = nginx/*access.log.*.gz
バーチャルホストごとにログの名前を変えていると思いますが、
これにあてはまる名前にするか、この設定を変更・追加ください。
--
以下、2019年の非対応の時の記事です。
--
Nginxを入れたら忘れてはならないのが、Logwatchの対応。
設定しないとNginxのログは無視されます。
そして、2018年10月22日時点では、検索してもどのサイトも間違っていた。
エラーログはフォーマットが違うのでApacheの設定コピーでは対応できません。
誰か気づいて…。ということで、正しいやり方を書く。
環境
- ・CentOS Linux release 7.5.1804 (Core)
- ・nginx/1.15.5
- ・Logwatch 7.4.0
- ・さくらVPS
とりあえず、アクセスログから順番に。
エラーログは最後。
アクセスログ用設定ファイルの作成
まずは必要なファイルを作成します。
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 = <STDIN>)) {
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;」などにすると良いです。
したらば、そう多くはエラーは出ないはず。出てたら逆に何とかしないと危険。
是非、お試しください。