Kenapa Harus Ada Log Rotate?
MongoDB tidak otomatis merotasi log secara default. Kalau tidak ada log rotate, maka log akan membesar dan tentu saja proses mongod akan lambat menulis log di file berukuran besar.
Dampaknya apa? Hardware usage yang tinggi, syukur-syukur kalau db ga error
Di server yang high end mungkin ga berasa (ga tahu juga sih), tapi di spek yang pas-pasan, pasti slack bakal penuh sama pesen dari hardware monitoring alert…
Setup Log Rotate
Untuk referensi log rotate saya ambil dari blog percona
- Tambahkan di /etc/mongod.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
logRotate: reopen #biasanya cuma nambahin ini
processManagement:
pidFilePath: /var/run/mongodb/mongod.pid #pastiin PID nya di sini buat nanti postrotate action
- Buat file /etc/logrotate.d/mongodb
/var/log/mongodb/mongod.log {
daily #run daily
size 100M #you can try different size, so it doesnt kill mongodb process too often
rotate 10
missingok
compress
delaycompress
notifempty
create 640 mongod mongod
sharedscripts
postrotate
#kill PID to "reload" PID
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2>/dev/null` >/dev/null 2>&1
endscript
}
- Done ya, si mongodb log rotate bakal bisa jalan tanpa kudu reload service cron. Kalau mau jalanin manual, bisa pake
sudo logrotate -f -v /etc/logrotate.d/mongodb
#if you just want to test, use -d
Masalah dan Anomali di MongoDB Log
Masalah pertama
Kalau server mongodb kamu sibuk dan log rotate hari ini sudah jalan, maka logrotate tidak akan merotasi log lagi karena file hari ini sudah ada.
Itu bakal bikin size log bengkak dan kembali lagi cerita saya di awal.
Solusi masalah pertama
- Buka kembali file /etc/logrotate.d/mongodb
/var/log/mongodb/*.log {
daily
size 100M #you can try different size, so it doesnt kill mongodb process too often
rotate 10
compress
delaycompress
create 640 mongod mongod
dateext
dateformat %Y%m%d-%s #tambahan dateformat + %s (epoch)
missingok
notifempty
sharedscripts
copytruncate
postrotate
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2>/dev/null` >/dev/null 2>&1
endscript
}
- Done, run manual lagi pake
sudo logrotate -f -v /etc/logrotate.d/mongodb
Masalah Kedua
MongoDB malah write ke /var/log/mongodb/mongod.log.1 (atau selain /var/log/mongodb/mongod.log)
Padahal kan jelas, di /etc/mongod.conf di define di path: /var/log/mongodb/mongod.log

Sampai 8GB, di Server Saya yang Ga High Spec, Bakal Keder
Ini ga tahu kenapa sih, daripada lama-lama nyari kenapa, mending kita benerin dulu
- Buat file baru /etc/logrotate.d/mongodb1
/var/log/mongodb/*.log.1 {
daily
size 100M #you can try different size, so it doesnt kill mongodb process too often
rotate 10
compress
delaycompress
create 640 mongod mongod
dateext
dateformat %Y%m%d-%s #tambahan dateformat + %s (epoch)
missingok
notifempty
sharedscripts
copytruncate
postrotate
/bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod.pid 2>/dev/null` >/dev/null 2>&1
endscript
}
-
Done, run manual lagi pake
sudo logrotate -f -v /etc/logrotate.d/mongodb1
. -
Setelah itu harusnya mongodb bakal nulis lagi ke /var/log/mongodb/mongod.log, dan kamu bisa hapus file /etc/logrotate.d/mongodb1
sudo rm /etc/logrotate.d/mongodb1
Sumber:
Blog percona - automating mongodb log rotation

Jika kamu merasa tulisan ini bermanfaat & membantu kamu, kamu bisa berdonasi lewat saweria
If you feel this website help you, you can donate at saweria