【力技】Plesk ObsidianでNGINXアクセスログを保存する方法【備忘録】
こんにちは。
皆様の総務部電算室・クレバードの佐藤です。
さて、先日より自社を含めVPSサーバーのOS EOLに伴う入替作業を行っているのですが、NGINXサーバーの設定に関してはクリアー出来ました。
しかし、Plesk管理のサーバーゆえ、欠点としてアクセスログが残らないのです。
エラーログはグローバルのログローテーション規則にのっとって保存されているのですが、NGINXアクセスログは入替のみです。
弊社の設定では毎日ログを更新するので、logrotateのタイミングでファイルが入れ替わってしまい、折角のログの意味をなさないのです。どう設定してもいずれはバッサリ消えてしまいます。
なので、どこかで作り直しているcronなりlogrotateが有るはずだと探してみましたが見つけることが出来ず、さらにPleskの用意したログディレクトリにオリジナルで吐き出したログすらも消してしまうという恐ろしい仕様でした。
苦肉の策として、Pleskが用意するログディレクトリとは別のディレクトリにログを吐き出すようにNGINXを設定しました。その吐き出し先のログは消されることもなく、Pleskの呪縛から解き放たれていますので、普通に /etc/logrotate.d/nginx に指定することでローテーションとバックアップが可能になりました。
設定時のOSとPleskのバージョンは以下の通りです。
- Rocky Linux 8.9 (Green Obsidian)
- Plesk Obsidian バージョン 18.0.59 アップデート #2
まずはSSHで/var/www/vhosts/domain1.tld/custom_logs/(ドメイン名)のディレクトリを作成し、パーミッション、オーナーなども /var/www/vhosts/domain1.tld/logs と同じように設定します。
そして、Pleskホーム ⇒ ドメイン ⇒ 該当ドメイン ⇒ ホスティングとDNS ⇒ Apacheとnginxに移動し、
ページ最下部にnginx追加ディレクティブがあるので、そこに先ほどのディレクトリにログを吐く呪文を追記します。ファイル名は任意で構いませんが、スマートにしておきましょう。ドメイン名の部分は適宜ご自分の環境で読み替えてください。
access_log /var/www/vhosts/domain1.tld/custom_logs/cretbird.co.jp/nginx_access_ssl_log;
適用するとnginxに再起動がかかり、ログが出来ているはずです。
あとは、 /etc/logrotate.d/nginx に追記することでローテーションと長期保存を掛けるようにします。
# こちらはもともとの構文
/var/log/nginx/*.log {
daily
copytruncate
missingok
notifempty
compress
delaycompress
rotate 90
}
# 追加したログ用に追記
/var/www/vhosts/domain1.tld/custom_logs/cretbird.co.jp/nginx_access_ssl_log{
daily
rotate 90
compress
missingok
copytruncate
}
こうして仕込んでおけば、数日後には
PLESKでNGINXのアクセスログが保管出来ました。