Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【Apache/Nginx】Zabbixサーバー(Web側)のアクセスログをバーチャルドメインごとにローテートする方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

こんにちは!ふと、バーチャルドメインを切ったzabbixのアクセスログがローテートされずに肥大化していることに気が付いて、対策しました。

システム監視に欠かせない「Zabbix」ですが、Zabbixの管理画面(フロントエンド)にアクセスした際のログは、Zabbix自身ではなくWebサーバー(ApacheやNginx)の機能として出力されています。

特に、1台のサーバーで複数のバーチャルドメイン(VirtualHost)を運用している環境では、ドメインごとに access.log を分けて出力しているケースが多いと思います。

今回は、OS標準の logrotate を使い、これら複数のアクセスログを個別に、かつ安全にローテーションさせる設定手順を解説します!

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

なぜ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

logファイルの指定にはワイルドカード「*」も使用可。
delaycompress →ローテートの1世代目は圧縮されない
/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サーバーのプロセスへの通知(gracefulreopen)が正しくシミュレートされていることを確認できれば設定完了です!

-dを取って実行すれば、実際にローテートが走ります。

まとめ

複数のバーチャルドメインを運用している場合でも、logrotate を使えば一つの設定ファイルでスマートにアクセスログを管理できます。

特に postrotate によるWebサーバーのリロード処理は、ログの記録漏れを防ぐための必須設定なので必ず記述しておきましょう。ディスク容量を健全に保ち、快適なZabbix運用を続けてください!

タイトルとURLをコピーしました