投稿日:2003年10月28日 作成鷹の巣

No.13118 FreeBSD で logrotate がやっと動作するようになりました



FreeBSD で logrotate がやっと動作するようになりました

No.13118 投稿時間:2003年10月28日(Tue) 17:42 投稿者名:Ryokucchi URL:http://ryokucchi.no-ip.com/

前にも投稿させて頂きましたが、当方 FreeBSD と Apache でサーバ
を運営しています。

8月より始まったワームによる大量アクセスのため、当サーバの
トップページへのアクセスが一日に千件近くになり、ログファイル
が巨大化しているので、今使っている rotatelogs を logrotate
に変更しました。(今回はアクセスログとエラーログを設定しまし
た。一日一回のローテートで、8個目から自動削除の設定です。)

※ トップページへの本当のアクセスは一日に20~30前後です。
他にお貸ししている画像掲示板へのアクセスログの量が馬鹿にでき
ません。特に画像一枚一枚ログる設定にしていましたので、いつの
間にかログファイルが 700MB を超えていたこともありました。(^^;)

Linux ですと logrotate が始めからインストールされているよう
ですが、FreeBSD はないので、Apache についている rotatelogs を
使っていました。しかし、これはローテートするだけで自動削除が
できません。暇を見ては自分で削除していました。

それで /stand/sysinstall より、Packages を選択して、FTPで
logrotate-3.5.2 を選択、インストールしてみました。

初めの内は上手く動作しなかったのですが、試行錯誤している間に
上手く動作するようになりました。あまり詳しい解説サイトが見つ
からなかったので、ここにわたしの場合の設定を公開しておきます。

FreeBSD 4.7-Release、Apache は、httpd-2.0.47 です。
要らない設定部分もあるような気もしています。よろしかったら
ご指摘下さい。

■/etc 内の newsyslog.conf
------------------------

前半部分省略(下の2行が書き加えた部分です。)

/var/log/monthly.log 640 12 * $M1D0 Z
/var/log/console.log 600 5 100 * Z
/var/log/access_log 644 5 * @T00 - /usr/local/apache2/logs/httpd.pid
/var/log/error_log 644 5 * @T00 - /usr/local/apache2/logs/httpd.pid
------------------------
/pid_file へのフルパスを書き込まなかったので、新しいログファイルは
出来るものの、そのファイルへの書き込みがなされない状態が続いていました。


■/usr/local/etc 内の logrotate.conf
-------------------------
# see "man logrotate" for details
# rotate log files weekly
daily

# keep 4 weeks worth of backlogs
rotate 5

# send errors to root
errors root

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
nocompress

# RPM packages drop log rotation information into this directory
include /usr/local/etc/logrotate.d

/var/log/access_log /var/log/error_log {
daily
rotate 1
}

# system-specific logs may be configured here
------------------------
このファイルの設定は生きているのかちょっと疑問を持っています。


■/usr/local/apache2/conf 内の httpd.conf
------------------------
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog /var/log/error_log

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

#
# 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 \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# You need to enable mod_logio.c to use %I and %O
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request

CustomLog /var/log/access_log common env=!image-request
------------------------
画像一枚一枚のログは録らない設定にしてあります。

■/usr/local/etc/logrotate.d 内の httpd
---------------------
/var/log/access_log /var/log/error_log {
missingok
postrotate
/bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
-------------------------
これがないと新しく作られたログファイルへの書き込みが始まらない
ようです。
newsyslog.conf の [/pid_file] 欄に書き込まれた
/usr/local/apache2/logs/httpd.pid と連動して動作するようです。


一連の大量アクセスをログらない設定

No.13176 投稿時間:2003年11月01日(Sat) 09:17 投稿者名:Ryokucchi URL:http://ryokucchi.no-ip.com/

8月より始まった不正大量アクセス。
調べてみると、User-Agent が皆 (compatible; MSIE 5.5; Windows 98)
それでこのアクセスのみログに記録しない設定を思考錯誤して
いましたが、下記の設定で上手く行きました。

画像などもログしない設定も下記のようにスマートにまとめ
られました。
レスはないようですが、参考になる方もおられるのではと思い、
投稿させて頂きます。

■Apache の httpd.conf 500行目辺りです。

SetEnvIf User-Agent "(compatible; MSIE 5.5; Windows 98)" nolog
SetEnvIf Request_URI \.(gif)|(jpg)|(png)|(ico)|(css)|(js)$ nolog

CustomLog /var/log/access_log common env=!nolog

※ 大量不正アクセスの方は、 .htaccess で jp と bbtec.net 以外は
接続できないようにしてありますので、エラーログの方に全て記録
されています。


大変、参考にさせて頂いております。

No.13209 投稿時間:2003年11月02日(Sun) 02:00 投稿者名:鷹の巣@松阪 URL:http://sakaguch.com/

> レスはないようですが、参考になる方もおられるのではと思い、
> 投稿させて頂きます。

大変、参考にさせて頂いております。
ご投稿して下さって、ありがとうございました。


レスありがとうございます

No.13210 投稿時間:2003年11月02日(Sun) 06:58 投稿者名:Ryokucchi URL:http://ryokucchi.no-ip.com/

> 大変、参考にさせて頂いております。
> ご投稿して下さって、ありがとうございました。

レスありがとうございます。
これからもよろしくお願い致します。m(_ _)m m(^^)m


|目次|掲示板|過去ログ目次|▲頁先頭|