Kebetulan mendapatkan kesempatan fixing aplikasi Rails milik client
yang down.
Web servernya menggunakan apache dan passenger. Saya cek lognya ternyata kehabisan space SSD.
kemudian saya coba mencarinya file-file dengan ukuran besar(diatas 100MB) dengan perintah:
sudo find / -type f -size +100M -exec ls -lh {} \;
ternyata error.log milik apache2 berukuran 7 Giga lebih. Hindari menghapus dengan perintah rm
karena file tersebut akan di lock
oleh apache2, saya menggunakan command:
:> /var/log/apache2/error.log
Agar tidak terjadi isu yang sama di masa depan saya menggunakan logrotate
. caranya:
buat file /etc/logrotate.d/apache2
, tambahkan baris berikut:
/var/log/apache2/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/nulllog if file greater than
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
untuk membatasi log aplikasi buat file /etc/logrotate.d/rails-app
.
# Rotate file jika lebih dari 100 MB
/home/deploy/*/shared/log/*.log {
size==100M
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Alternatif lain untuk membatasi file pada folder log aplikasi edit file config/environments/production.rb
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 100.megabytes )
#config.logger = ActiveSupport::Logger.new(Rails.root.join('log', "#{Rails.env}.log")