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

  1. 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
  1. 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
}
  1. 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

  1. 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
}
  1. 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

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

  1. 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
}
  1. Done, run manual lagi pake sudo logrotate -f -v /etc/logrotate.d/mongodb1.

  2. 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