Mengelola Log Node.js + PM2-logrotate: Panduan Lengkap untuk Server Produksi

Mengelola Log Node.js + PM2-logrotate: Panduan Lengkap untuk Server Produksi

Update 10/12/25 · Read 5 min

Dalam pengembangan aplikasi Node.js, manajemen log adalah salah satu aspek yang sangat penting untuk menjaga server tetap stabil, memudahkan debugging, dan memastikan aplikasi berjalan dengan lancar.

Jika tidak dikelola dengan baik, log bisa menumpuk, memakan ruang disk, dan bahkan menyebabkan server menjadi lambat atau crash. Artikel ini akan membahas bagaimana mengelola log Node.js secara efektif menggunakan PM2 dan modul pm2-logrotate, lengkap dengan konfigurasi ringan untuk server kecil.


1. Pengenalan PM2

PM2 adalah process manager untuk aplikasi Node.js yang populer digunakan di server produksi. PM2 menawarkan banyak fitur, termasuk:

  • Menjalankan aplikasi Node.js sebagai daemon (latar belakang)
  • Auto-restart jika aplikasi crash
  • Monitoring penggunaan CPU dan memori
  • Logging otomatis stdout dan stderr
  • Integrasi dengan log rotation melalui modul tambahan

Salah satu keuntungan utama PM2 adalah kemampuannya untuk mengelola proses Node.js secara otomatis, termasuk pembuatan log file untuk setiap aplikasi.


2. Masalah Log yang Tidak Terkelola

Secara default, PM2 menyimpan semua log aplikasi Node.js di folder:

~/.pm2/logs/

Contohnya, jika kita menjalankan aplikasi mt-server, maka PM2 akan membuat file log seperti:

mt-server-out-0.log
mt-server-error-0.log
mt-server-out-1.log
mt-server-error-1.log
...

Setiap kali aplikasi di-restart atau PM2 restart proses, file log baru akan dibuat. Tanpa mekanisme pembersihan, file log ini akan terus menumpuk, dan lama-kelamaan bisa memakan beberapa GB ruang disk, sehingga berisiko mengganggu performa server.

Masalah umum yang terjadi jika log tidak dikelola:

  1. Disk penuh → server bisa tidak stabil
  2. Sulit menemukan log terbaru → debugging menjadi lambat
  3. File log besar → proses bacaan log menjadi lambat
  4. Crash server → beberapa aplikasi Node.js sensitif terhadap disk penuh

3. Pendekatan Manual untuk Menghapus Log

Sebelum adanya pm2-logrotate, banyak pengembang menggunakan cara manual:

  1. Menghapus log secara berkala: rm -f ~/.pm2/logs/mt-server-*.log
  2. Menggunakan cron job untuk otomatis: 0 1 * * * find ~/.pm2/logs/ -name "*.log" -type f -mtime +7 -exec rm {} \;
  3. Memindahkan log lama ke folder archive: mkdir -p ~/.pm2/logs/archive mv ~/.pm2/logs/mt-server-*.log ~/.pm2/logs/archive/

Pendekatan ini cukup sederhana, tetapi memiliki kelemahan:

  • Membutuhkan script atau cron job tambahan
  • Tidak otomatis untuk setiap aplikasi baru
  • Bisa salah hapus jika folder log tidak dikontrol
  • Tidak ada kontrol ukuran file log → file log tetap bisa sangat besar sebelum dihapus

4. Solusi Otomatis: pm2-logrotate

Untuk mengatasi masalah ini, PM2 menyediakan modul tambahan bernama pm2-logrotate. Modul ini memungkinkan kita:

  • Memutar (rotate) log secara otomatis
  • Menghapus log lama berdasarkan jumlah file (retain)
  • Mengatur ukuran file log maksimum (max_size)
  • Mengatur interval pemeriksaan log (workerInterval)
  • Mengatur rotasi harian otomatis (rotateInterval)
  • Mengelola log modul PM2 juga (rotateModule)

Dengan pm2-logrotate, pengelolaan log menjadi otomatis, efisien, dan aman untuk server produksi.

READ :  PHP vs Node.js (Performa, Kecepatan, Trafik, dan Penggunaan RAM)

5. Instalasi pm2-logrotate

Untuk menginstal modul pm2-logrotate:

pm2 install pm2-logrotate

Setelah modul terpasang, PM2 akan secara otomatis memulai worker untuk mengelola log setiap beberapa detik sesuai konfigurasi default.

Untuk mengecek modul yang terpasang:

pm2 module:list

Kamu akan melihat sesuatu seperti:

┌────┬──────────────────────────────┬───────────────┬──────────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module                       │ version       │ pid      │ status   │ ↺    │ cpu      │ mem      │ user     │
├────┼──────────────────────────────┼───────────────┼──────────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 21 │ pm2-logrotate                │ 3.0.0         │ 1628462  │ online   │ 0    │ 0%       │ 28.6mb   │ root     │
└────┴──────────────────────────────┴───────────────┴──────────┴──────────┴──────┴──────────┴──────────┴──────────┘

Status online berarti modul siap digunakan.


6. Konfigurasi Ringan untuk Server Kecil

Bagi server kecil dengan memori terbatas, kita bisa mengatur pm2-logrotate agar ringan:

  • Worker interval 7 menit → PM2 memeriksa log setiap 420 detik
  • Ukuran log maksimal 2MB → file log diputar jika melebihi 2MB
  • Jumlah file log disimpan 3 file terakhir → otomatis hapus sisanya
  • Tanpa kompresi → lebih ringan, meski memakan sedikit space
  • Rotasi harian jam 00:00 → file log baru dibuat setiap hari
  • Format timestamp → memudahkan identifikasi log

Perintah Konfigurasi:

pm2 set pm2-logrotate:max_size 2M
pm2 set pm2-logrotate:retain 3
pm2 set pm2-logrotate:compress false
pm2 set pm2-logrotate:workerInterval 420
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
pm2 set pm2-logrotate:rotateModule true

Dengan konfigurasi ini:

  • Log tidak akan menumpuk
  • File lama otomatis dihapus sesuai retain
  • Worker interval cukup ringan untuk server kecil
  • Tidak perlu cron job tambahan

7. Menghapus Log Lama Sekarang

Agar server mulai dari kondisi bersih, kita bisa flush log lama:

pm2 flush
  • Menghapus semua log lama saat ini
  • File log baru akan otomatis dibuat saat aplikasi masih berjalan

8. Mengecek Log

Setelah konfigurasi:

ls -lh ~/.pm2/logs/

Kamu akan melihat file log dengan timestamp sesuai format yang sudah diatur:

mt-server-out-2025-12-10_00-00-00.log
mt-server-error-2025-12-10_00-00-00.log

Hanya 3 file terakhir yang tersimpan, sesuai retain.


9. Tips Opsional

  1. Kompres log lama (untuk server dengan space terbatas):
pm2 set pm2-logrotate:compress true
  1. Menghapus log berdasarkan umur (misal >7 hari) tetap bisa menggunakan cron job:
0 1 * * * find ~/.pm2/logs/ -name "*.log" -type f -mtime +7 -exec rm {} \;
  1. Memantau penggunaan disk:
du -sh ~/.pm2/logs/
  • Pastikan space tetap aman
  1. Menyesuaikan worker interval:
  • Server kecil → 420 detik (7 menit)
  • Server besar → 60 detik atau lebih cepat

10. Ringkasan Keuntungan pm2-logrotate

  • Otomatis → log diputar dan dihapus sesuai konfigurasi
  • Ringan → dapat diatur untuk server kecil
  • Kontrol ukuran log → mencegah log besar mengganggu server
  • Kontrol jumlah file log → mencegah menumpuk
  • Rotasi harian → log baru setiap hari
  • Tidak perlu cron job → opsional untuk penghapusan umur log

Dengan pm2-logrotate, pengelolaan log menjadi sederhana, otomatis, dan aman.


11. Praktik Terbaik

  1. Selalu flush log setelah konfigurasipm2 flush
  2. Sesuaikan max_size dengan kebutuhan aplikasi
    • Aplikasi dengan banyak traffic → ukuran lebih besar
    • Server kecil → ukuran kecil (2–5MB)
  3. Gunakan retain kecil untuk server dengan disk terbatas
    • 3–5 file log terakhir sudah cukup untuk debugging
  4. Gunakan timestamp jelas (dateFormat) agar mudah tracking
  5. Pertimbangkan compress jika server memiliki banyak aplikasi
  6. Pantau penggunaan disk secara berkaladu -sh ~/.pm2/logs/
  7. Rotasi juga modul PM2 (rotateModule true)
    • Agar log modul PM2 tidak menumpuk
READ :  Node.js Dari Install -> Menjadi Developer Javascript

12. Kesimpulan

Mengelola log Node.js dengan PM2 tanpa strategi rotasi bisa menjadi masalah serius pada server produksi, terutama jika log menumpuk dan memakan disk. Dengan menggunakan pm2-logrotate, kita bisa:

  • Memutar log secara otomatis
  • Menghapus log lama sesuai jumlah file (retain)
  • Mengontrol ukuran log (max_size)
  • Menjaga server tetap ringan dan aman

Konfigurasi ringan untuk server kecil, seperti:

  • File log maksimal 2MB
  • Hanya menyimpan 3 file log terakhir
  • Worker interval 7 menit
  • Tanpa kompresi

… sudah cukup untuk menjaga log tetap terkontrol tanpa tambahan cron job.

Dengan kombinasi ini, server Node.js kamu akan lebih stabil, log tetap teratur, dan developer bisa fokus pada aplikasi tanpa khawatir log menumpuk.