30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【Webサーバー(Apache)】【Linux】ログが肥大化してえらいことになったのでローテーションを見直す

事の発端はとあるLinuxサーバーのフォルダが
容量ピンチ、とアラートがとんできたこと


調べたらログファイルがマックス近くまで
ディスク容量を圧迫していたことが判明
よくよく考えたらデータを発生させる
ような処理は基本的にはないWebサーバー
なんだから容量増えるのはログが
最有力じゃんという話


ログの場所と内容


容量がいっぱいになったのは

/var 

だいたいログは

/var/log 

にいることが多い


今回は

/var/log/httpd

のフォルダのログがやたら大きな
容量を誇っていた
ということで
Apacheのログが原因


accsess.logが肥大化していた
ということはアクセスが
多くなるほどこの事象が起きる
可能性が高くなるということか
となると、けっこうよくあるパターン
なのではなかろうか


見てみるとログは1週間1ファイルで
5週間分保管されており
1ファイルあたりの容量は2GB
フォルダの容量が12GBだから
そりゃマックス値近くまでいく計算


ログローテーションの設定


古いログを消すとか圧縮するとか
移動するとかスクリプトを組めば
できるんだろうけど、と思っていたら
ログローテーションの専用の
設定がちゃんとあるらしい

/etc/logrotate.d/httpd


基本的にlogrotate.d配下のファイル名が
サービス名と対応しているみたい

中身:

/var/log/httpd/*.log{
   missingok  //ログファイルが存在しない場合にエラーを出力しない
   notifempty   //ログファイルが空の場合ローテーションしない
   sharedscripts   //ログファイルを複数指定した場合、それぞれpostrotate、prerotate内のコマンドを実行
   delaycompress  //1世代目は圧縮されない設定、だがcompressと組み合わせないとうまく動かないらしい
   postrotate      //endscriptとの間に書いたコマンドをローテーション後に実行
             /bin/systemctl reload httpd.service  >  /dev/null  2>/dev/null || true
   endscript
}   


1週間ごとのローテーションを
指定しているわけではない
ので、上位設定の
/etc/logrotate.conf
を見ているんだと思うけど
細かいことは忘れてしまった


以下のように必要事項を追記

/var/log/httpd/*.log{

   daily   //毎日ローテーション
   rotate 31   //31日分
   compress   //圧縮する

   missingok  
   notifempty   
   sharedscripts   
   delaycompress  
   postrotate   
             /bin/systemctl reload httpd.service  >  /dev/null  2>/dev/null || true
   endscript
}   

週ごとではなく毎日ログファイルを
作成して圧縮することで
容量不足を解消
導入時はこんなにアクセスが
増えるとは想像していなかったのだろうなぁ