Episode ini mengajarkan tuning performa Bacula (concurrent jobs, spool size, device polling, benchmark) dan monitoring produksi lewat bconsole status, plugin Nagios/Zabbix, serta alert otomatis saat job gagal, lengkap dengan contoh skrip notifikasi sederhana.

Sistem backup yang "berjalan" adalah hal yang berbeda dengan sistem backup yang "terjaga". Yang berjalan menghasilkan job sukses; yang terjaga juga memberitahu kalian saat tidak. Di episode 20 kita menyatukan dua kemampuan: membuat backup berjalan lebih cepat dengan tuning, dan memastikan setiap kegagalan terlihat — bukan menunggu ditemukan.
Mulai dari tuning performa yang berbasis pengukuran, lalu monitoring dengan bconsole, plugin Nagios/Zabbix, dan alert kegagalan job.
Bacula bisa menjalankan beberapa job bersamaan. Parameter Maximum Concurrent Jobs ada di beberapa resource:
Director {
Name = bacula-dir
Maximum Concurrent Jobs = 20
}Device {
Name = FileStorage
Maximum Concurrent Jobs = 4
...
}Semakin banyak job bersamaan, semakin besar beban CPU, disk, dan catalog. Aturan praktis: ukur dulu, naikkan bertahap. Mulai dengan 2-4 job per device lalu naikkan sambil memantau.
Spooling membuat Storage Daemon menulis data ke spool file (disk cepat) sebelum memindahkannya ke media final. Ini meminimalkan jeda pada media sekuensial (tape) dan menghindari tape "shoe-shining" (bolak-balik maju mundur). Konfigurasinya di bacula-sd.conf:
Storage {
Name = bacula-sd
Spool Directory = /var/lib/bacula/spool
Maximum Spool Size = 5 GB
Maximum Job Spool Size = 1 GB
}Spool yang terlalu kecil tidak membantu; yang terlalu besar bisa penuh di saat tidak terduga. Ukuran spool = ukuran rata-rata satu job × toleransi.
Storage Daemon memeriksa media secara berkala (Device Polling Interval). Untuk tape yang sedang menunggu operator, polling menentukan seberapa cepat Bacula sadar tape terpasang:
Device {
Name = TapeDrive
Device Polling Interval = 15 min
...
}Interval yang terlalu sering membebani SD; terlalu jarang memperlambat deteksi media baru.
Warning
Performa Bacula paling sering dihambat oleh satu device yang dibatasi Maximum Concurrent Jobs = 1 sementara job menumpuk antre. Cek status dir — jika banyak job waiting untuk storage yang sama, itu bukan tuning catalog, melainkan kapasitas device.
Semua tuning harus berdasar data. Buat benchmark sederhana:
* run job="Backup Web" level=Full yes
* list jobs | grep "Backup Web"Catat kolom Bytes dan Job Elapsed Time. Bagi bytes dengan waktu untuk mendapatkan throughput per job. Bandingkan setelah setiap perubahan konfigurasi — inilah kompas tuning kalian.
Monitoring pertama selalu bconsole:
* status dir
* status sd
* status allBiasakan juga memeriksa job yang gagal:
* list jobs | grep -E "Error|Canceled" | tail -10Sebelum bergantung pada tool besar, buat skrip notifikasi non-interaktif — bconsole mendukung perintah sekali jalan:
#!/bin/bash
FAILED=$(bconsole -c /etc/bacula/bconsole.conf -c 'list jobs' \
| grep -cE "Error|Canceled")
if [ "$FAILED" -gt 0 ]; then
echo "Job Bacula bermasalah" | mail -s "[BACULA] Job gagal" oncall@example.com
fiJalankan via cron setiap 15 menit. Ini jaring pengaman minimum yang menyelamatkan banyak admin sebelum monitoring penuh terpasang.
Untuk integrasi penuh, pakai plugin yang memakai output bconsole:
bconsole -c 'list jobs' dan mengembalikan OK/CRITICAL berdasarkan status. Skrip check_bacula tersedia di repositori komunitas.system.run menjalankan perintah bconsole non-interaktif, atau memakai trapper yang menerima hasil job dari skrip di server Bacula./usr/lib/nagios/plugins/check_bacula -w 1 -c 3
# OK: job terakhir sukses 5 menit lalu
# CRITICAL: tidak ada job sukses dalam 3 hariBuatlah kriteria alert berbasis usia job sukses terakhir per client — bukan sekadar status job terakhir, karena sistem yang tidak menjalankan apa-apa juga "tidak gagal".
Sumber alert yang paling langsung adalah resource Messages di tiap daemon. Mail failure secara spesifik:
Messages {
Name = Standard
mail = oncall@example.com = JobErrors, FatalErrors
}Dengan JobErrors, FatalErrors, email hanya dikirim saat job benar-benar bermasalah — bukan spam per sukses. Untuk environment tim, tambahkan integrasi ke chat/ops tool (webhook) lewat script yang dipanggil mailcommand.
Note
Alert harus berisi konteks: nama job, client, dan usia kegagalan. Alert yang isinya hanya "Job Error" akan diabaikan tim on-call dalam seminggu. Pastikan skrip/mailcommand menyertakan JobId dan nama job.
Monitoring bukan satu tool — ia ritual harian:
list jobs | grep Error — lihat semalam.status sd untuk device yang macet.* list jobs | tail -30Inti yang harus dibawa pulang:
Di episode 21 selanjutnya kita akan menjelajahi roadmap dan komunitas Bacula — evolusi Enterprise (plugin, dedup), maintenance Community, konferensi Bacula, serta sumber daya bacula.org, mailing list bacula-users, dan GitHub bacula/bacula. Inilah cara kalian tetap mengikuti arah proyek yang sudah berjalan 25 tahun.