こんにちは!ふと、バーチャルドメインを切ったzabbixのアクセスログがローテートされずに肥大化していることに気が付いて、対策しました。
システム監視に欠かせない「Zabbix」ですが、Zabbixの管理画面(フロントエンド)にアクセスした際のログは、Zabbix自身ではなくWebサーバー(ApacheやNginx)の機能として出力されています。
特に、1台のサーバーで複数のバーチャルドメイン(VirtualHost)を運用している環境では、ドメインごとに access.log を分けて出力しているケースが多いと思います。
今回は、OS標準の logrotate を使い、これら複数のアクセスログを個別に、かつ安全にローテーションさせる設定手順を解説します!
なぜWebサーバーのログローテートが必要なのか?
Zabbixサーバーの設定(zabbix_server.conf)にある LogFileSize は、あくまでZabbixのバックエンドプロセス(zabbix_server.log)のためのもので、こちらは現在zabbixをインストールすると、デフォルトではzabbix-server/agent共にOSのlogrotatedで設定されるようです。
ApacheやNginxが吐き出すアクセスログは、OS側の logrotate で制御するのが一般的です。これを怠ると、ログファイルが数十GBに肥大化し、ディスク容量を圧迫する原因になります。
STEP 1:logrotate設定ファイルの作成
logrotate の追加設定ディレクトリ(/etc/logrotate.d/)に、バーチャルドメイン専用の設定ファイルを新しく作成します。
設定ファイルの作成例
今回は例として、/etc/logrotate.d/zabbix-vhosts という名前でファイルを作成します。
Plaintext
/var/log/httpd/example.com_access.log /var/log/httpd/example.net_*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
/sbin/service httpd graceful > /dev/null 2>/dev/null || true
endscript
}
STEP 2:設定項目の重要なポイント
上記の設定ファイルで押さえておくべきポイントは以下の通りです。
-
対象ログファイルの指定: 冒頭部分に、ローテートさせたいドメインごとの
access.logのフルパスをスペース区切りで列挙します(ワイルドカード*を使って/var/log/httpd/*_access.logのように指定することも可能です)。 -
ローテート周期と世代: 上記の設定では日次(
daily)で実行し、過去14日分(rotate 14)のログを保持(compressで圧縮)する設定にしています。環境に合わせて調整してください。 -
ログの再読み込み(
postrotate):【超重要】 ログファイルを切り替えた(リネームした)後、Webサーバーに「新しいログファイルを開き直してね」と通知するための処理です。これを入れないと、Webサーバーが古いログファイルを掴みっぱなしになり、新しいアクセスログが記録されなくなってしまいます。
💡 Webサーバーが「Nginx」の場合 お使いの環境がApacheではなくNginxの場合は、
postrotateの中身を以下のように書き換えてください。Plaintext
postrotate kill -USR1 `cat /var/run/nginx.pid` endscript(※または
nginx -s reopenコマンドなど、環境に合わせたログ再開コマンドを指定します)
STEP 3:logrotateの動作確認(テスト実行)
設定が完了したら、構文エラーがないか、意図通りに動くかをテストします。 以下のコマンドを実行して、動作確認(デバッグ)を行いましょう。
Bash
sudo logrotate -df /etc/logrotate.d/zabbix-vhosts
-
-d(debug): テストモード。実際にはログを変更せず、シミュレーション結果画面を表示します。 -
-f(force): ログの切り替え条件(日付など)を満たしていなくても、強制的に実行します。
実行ログにエラーが出ず、Webサーバーのプロセスへの通知(graceful や reopen)が正しくシミュレートされていることを確認できれば設定完了です!
-dを取って実行すれば、実際にローテートが走ります。
まとめ
複数のバーチャルドメインを運用している場合でも、logrotate を使えば一つの設定ファイルでスマートにアクセスログを管理できます。
特に postrotate によるWebサーバーのリロード処理は、ログの記録漏れを防ぐための必須設定なので必ず記述しておきましょう。ディスク容量を健全に保ち、快適なZabbix運用を続けてください!
