· sistem  · 9 min read

Instalasi n8n Saya Rusak Dua Belas Hari, dan Tidak Ada yang Bunyi

Tagihan VPS n8n saya di bawah Rp 90,000. Lima lapisan perawatan yang menyusul tidak ada di tagihan itu.

Tagihan VPS n8n saya di bawah Rp 90,000. Lima lapisan perawatan yang menyusul tidak ada di tagihan itu.

Instalasi n8n di VPS kantor saya rusak di tengah proses install, dan selama dua belas hari tidak ada yang tahu. Lead dari website tetap sampai ke sales seperti biasa. Yang akhirnya sadar saya sendiri, saat n8n mulai membalas 503 ke setiap request.

Penyebabnya install yang terpotong di tengah jalan. Install itu terlihat menggantung, lalu saya hentikan, padahal waktu itu install n8n di server tersebut memang makan sekitar 22 menit dan lama tidak mengeluarkan output. Perbaikannya install ulang bersih.

Tagihan VPS n8n Edavos tujuh bulan terakhir ada di antara Rp 86,196 dan Rp 89,176 per bulan (perbandingannya dengan Apps Script di sini). Tagihan itu tidak memuat satu pun dari lima lapisan di bawah. Empat di antaranya saya pasang sesudah kegagalan yang tidak memicu alarm apa pun, dan yang kelima karena perbaikan untuk salah satunya mematikan alarm yang sudah ada.

Apa yang perlu dipantau di n8n self-hosted?

Ada lima hal yang perlu dipantau: apakah database bisa dipulihkan, apakah n8n sehat dan bukan cuma hidup, apakah server bisa dijangkau dari luar, apakah ada workflow yang gagal, dan apakah kegagalan yang sudah ditangkap jalur error tetap dilaporkan. Di n8n self-hosted Edavos, kelimanya saya pasang sendiri, dan Error Trigger bawaan n8n baru menutup yang keempat setelah dipasang sebagai error workflow di tiap workflow.

LapisanPertanyaan yang dijawabCara kerjanya di EdavosButa terhadap
Backup harianKalau database rusak, bisakah pulih ke kemarin?Dump PostgreSQL tiap 02:00 WIB, disimpan 7 hari, plus salinan bulanan ke luar serverKerusakan yang baru ketahuan setelah seminggu, kalau salinan bulanan tidak jalan
Watchdog di dalam VPSApakah n8n sehat, atau prosesnya cuma hidup?Cek /healthz/readiness tiap 5 menit, restart setelah 2 kali gagal berturutVPS mati total, jaringan putus, cron rusak
Monitor dari luarApakah n8n bisa dijangkau dari internet?Better Stack cek readiness tiap 3 menit, konfirmasi 15 menitWorkflow yang gagal saat server sehat
Error AlertApakah ada workflow yang gagal?Error Trigger mengirim ke space Google Chat khusus error n8nKegagalan yang sudah ditangkap jalur error di dalam workflow
Alert di jalur errorApakah kegagalan yang ditangani tetap dilaporkan?Node alert sendiri di ujung jalur errorWorkflow yang tidak dipasangi node itu

Proses yang hidup belum tentu sehat

Saat n8n membalas 503 ke setiap request, prosesnya tidak mati. systemd sudah disetel Restart=on-failure, tapi pengaturan itu cuma bereaksi kalau prosesnya keluar. Proses n8n tetap berjalan di atas instalasi yang rusak, jadi systemd melihatnya sehat.

n8n punya dua endpoint kesehatan, dan bedanya menentukan. Menurut dokumentasi monitoring n8n, /healthz membalas 200 selama instance bisa dijangkau tanpa melihat database, sedangkan /healthz/readiness baru membalas 200 kalau database tersambung dan sudah dimigrasi.

Karena itu semua monitor n8n di Edavos memakai readiness. Di kasus awal artikel ini, prosesnya hidup sementara readiness membalas 503.

Watchdog di dalam VPS mengecek readiness tiap 5 menit lewat cron. Ini bagian skripnya yang memutuskan restart atau tidak:

FAIL_THRESHOLD=2          # 2x gagal berturut (=10 menit) baru restart

FAILS=$((PREV_FAILS + 1))
log "GAGAL ke-$FAILS: readiness HTTP $CODE"

if [ "$FAILS" -lt "$FAIL_THRESHOLD" ]; then
  # Sekali gagal bisa cuma glitch/restart wajar. Tunggu siklus berikutnya.
  printf "%s\n%s\n" "$FAILS" "$PREV_STATE" > "$STATE"
  exit 0
fi

BIN_OK=$( [ -L /usr/bin/n8n ] && echo ya || echo TIDAK )
PKG_OK=$( [ -f /usr/lib/node_modules/n8n/package.json ] && echo ya || echo TIDAK )

if [ "$BIN_OK" = "TIDAK" ] || [ "$PKG_OK" = "TIDAK" ]; then
  # (notifikasi RUSAK ke Telegram, dipotong)
  log "RUSAK: instalasi tidak utuh, restart dilewati"
  printf "%s\ndown\n" "$FAILS" > "$STATE"
  exit 1
fi

log "RESTART: mencoba systemctl restart n8n"
sudo -n systemctl restart n8n 2>>"$LOG"
sleep 90

Dua keputusan di skrip itu menahan watchdog dari bertindak berlebihan. Gagal sekali tidak memicu apa pun, karena restart wajar dan glitch singkat juga membalas selain 200. Kalau symlink /usr/bin/n8n atau package.json hilang, watchdog tidak me-restart, karena restart tidak menyembuhkan instalasi yang rusak, dan langsung meminta install ulang.

Notifikasi hanya dikirim saat status berganti, dari sehat ke bermasalah atau sebaliknya. Tanpa aturan itu, n8n yang down mengirim pesan yang sama tiap 5 menit.

Dua monitor yang sengaja tidak bunyi bersamaan

Watchdog jalan di dalam VPS, jadi kalau VPS-nya mati atau jaringannya putus, watchdog ikut buta. Celah itu ditutup Better Stack, yang mengecek readiness dari luar tiap 3 menit lewat domain publik. Dua monitor yang memantau hal yang sama akan bunyi bersamaan untuk satu masalah, kecuali urutannya diatur.

Urutannya ditentukan masa konfirmasi Better Stack, yang saya pasang 15 menit. Di menit 10 watchdog sudah melihat dua kali gagal dan me-restart n8n, dan n8n siap lagi sekitar dua setengah menit kemudian. Di menit 15 masa konfirmasi habis, readiness sudah 200, dan Better Stack tidak membuka incident.

Watchdog di dalam VPSBetter Stack dari luar
Kapan bertindakMenit 10, setelah 2 cek gagalSetelah gagal terus selama 15 menit
Bisa memperbaikiYa, restart otomatisTidak, hanya melapor
Kalau VPS mati totalButaTetap lapor
Kalau jaringan atau DNS putusButaTetap lapor
Kalau cron rusakButaTetap lapor

Hasilnya Better Stack hanya bunyi kalau watchdog gagal memperbaiki. Kalau masa konfirmasi diturunkan, alarm bunyi persis saat watchdog sedang bekerja.

Response time sengaja tidak dipantau. Respons n8n melambat saat backup jam 02:00 atau saat workflow berat jalan, dan alarm dari situ palsu.

Pria menatap dua ponsel di meja kerja, satu layar menyala dan satu gelap, jam dinding tanpa angka di belakangnya

Server sehat, workflow gagal

Watchdog dan Better Stack sama-sama hijau saat sebuah workflow gagal di tengah jalan. Kasusnya pernah terjadi di alur lead Edavos: satu kolom dihapus dari sheet pencatat, node pencatat menolak append, dan 7 lead tidak sampai ke sales sampai tim menemukannya sendiri.

Lapisan keempat adalah satu workflow Error Alert. Error Trigger menerima kegagalan dan meneruskannya ke Code node yang memformat dan menyaring, lalu hasilnya dikirim lewat HTTP POST ke webhook space Google Chat khusus error n8n. Space itu sengaja dipisah dari alarm infrastruktur lain, karena orang yang menanggapinya berbeda dan alarm n8n yang jarang tidak boleh tenggelam.

Error Alert dipasang sebagai error workflow di ketiga workflow aktif. Error Alert sendiri harus berstatus published, karena n8n 2.x menolak error workflow yang belum published.

Filter yang menentukan alarm dibaca atau diabaikan

Di hari normal, dua workflow file organizer menghasilkan sekitar 2 error timeout per hari di trigger polling Google Drive. Semuanya pulih sendiri, karena kursor trigger tidak maju saat gagal dan file yang sama terambil di siklus berikutnya. Code node di Error Alert membuang timeout dan koneksi putus dari trigger itu, sedangkan error lain dari node yang sama, misalnya auth, tetap diteruskan.

Jalan pintasnya menyalakan Retry on Fail di trigger itu, dan itu tidak menolong. Di source n8n versi yang saya pakai, pengaturan itu tidak dibaca untuk trigger polling.

Untuk node biasa pengaturannya bekerja, jadi node Download File di workflow yang sama diberi 3 percobaan berjeda 5 detik. Di node ini kegagalan lebih mahal. Trigger sudah menganggap file-nya terambil, jadi file yang gagal diunduh tidak akan diambil lagi.

Jalur error yang menelan alarm

Lapisan kelima lahir dari perbaikan alur lead. Node pencatat lead diberi jalur error supaya lead tetap terkirim ke sales walau pencatatan gagal. Sejak itu, di instance saya Error Alert tidak terpicu untuk kegagalan pencatatan, karena kegagalannya sudah ditangkap jalur error.

Jadi jalur error itu mengirim alert sendiri ke space yang sama, dengan 3 percobaan kalau pengirimannya gagal.

Kenapa error n8n tidak saya kirim ke AI untuk diperbaiki otomatis

Error n8n di Edavos tidak saya serahkan ke agent AI karena hampir semuanya tidak butuh perbaikan. Dari 70 eksekusi gagal dalam 7 hari, batas retensi log eksekusi n8n Edavos, 65 adalah gangguan jaringan sesaat dan 5 berasal dari satu insiden yang butuh keputusan manusia.

Jenis kegagalanJumlahButuh tindakan
Timeout atau koneksi putus di trigger Google Drive62Tidak, pulih di siklus berikutnya
Unduhan file gagal karena koneksi2Ya, file yang tertahan saya ambil ulang manual. Node itu sekarang diberi Retry on Fail
DNS gagal di node pencatat lead1Tidak
Node pencatat lead gagal setelah kolom sheet berubah5Ya, keputusan soal kolom dan data yang tertahan

Dari 65 gangguan jaringan itu, hanya 2 yang meninggalkan pekerjaan, dan pekerjaannya mengambil ulang file. Angka 62 di baris pertama juga lebih besar dari hitungan hari normal karena jendela 7 hari itu memuat satu gangguan jaringan VPS yang menggagalkan sekitar 25 eksekusi dalam kurang dari setengah jam.

Agent yang memperbaiki error otomatis akan menghabiskan hampir seluruh kerjanya di kasus yang tidak perlu disentuh. Di 5 kasus sisanya, dia harus memutuskan sesuatu yang seharusnya diputuskan pemilik datanya.

Hitungan ini berubah kalau log Anda didominasi error logika yang berulang dengan perbaikan sempit, misalnya node yang gagal di field yang sama berkali-kali. Tarik eksekusi gagal 7 hari terakhir dan kelompokkan per jenis sebelum membangun apa pun.

Backup yang tidak pernah mendarat

Backup harian ditulis cron di VPS jam 02:00 WIB, berupa dump PostgreSQL terkompresi sekitar 6.8 MB yang disimpan 7 hari. Skripnya batal kalau sisa disk di bawah 1 GB. File ditulis ke .tmp dulu lalu di-rename, jadi tidak pernah ada file backup separuh jadi.

Retensi 7 hari berarti kerusakan yang baru ketahuan setelah seminggu tidak bisa dipulihkan dari VPS. Celah itu ditutup salinan bulanan ke iCloud di Mac saya. Folder salinan itu ternyata tidak menerima satu file pun selama sekitar enam minggu sejak dibuat, dan itu baru ketahuan saat routine bulanan membukanya.

Sekarang langkah pertama tiap routine bulanan adalah melihat file terbaru di folder iCloud itu. Kalau file bulan lalu tidak ada, routine tahu salinannya gagal sebelum mengerjakan hal lain.

Apa yang dicek di perawatan bulanan n8n?

Ada enam langkah tiap tanggal 4: cek kesehatan n8n dan disk, update OS, update n8n untuk versi minor dan patch, reboot kalau OS memintanya, menyalin backup terbaru ke luar server, dan memeriksa log watchdog. Routine-nya jalan di Mac saya karena butuh kunci SSH dan folder backup yang cuma ada di sana, dan apa pun yang butuh keputusan dilaporkan, tidak dieksekusi.

Langkah paling berisiko adalah update n8n, dan aturannya ditulis dari satu update minor yang gagal. n8n terinstal sukses, lalu menolak start karena versi barunya butuh Node.js mayor yang lebih baru dari yang terpasang, dan layanan down sekitar 50 menit. Folder staging sisa npm install --dry-run juga membuat install berikutnya gagal, termasuk install untuk rollback.

Tiga aturan update yang sekarang wajib:

AturanAlasannya
Cek syarat Node di field engines paket n8n versi tujuan sebelum updateNomor versi minor tidak menjamin kompatibel dengan Node yang terpasang
Jangan pakai npm install --dry-run sebagai tes ringanPerintah itu tetap menulis folder staging, dan sisanya membuat install berikutnya gagal
Jalankan install lewat systemd-runInstall lepas dari sesi SSH, jadi menghentikan sesi atau sesi yang putus tidak lagi memotong install di tengah jalan. Install yang terpotong itu penyebab kerusakan di awal artikel ini

Satu uji sebelum menambah workflow berikutnya

Hentikan service n8n Anda selama 15 menit, lalu catat apakah ada notifikasi yang masuk dan dari lapisan mana. Kalau tidak ada yang masuk, pasang watchdog readiness dan monitor dari luar lebih dulu, karena dua lapisan itu yang menangkap kegagalan seperti di awal artikel ini.

- Daud (@daudwihardi)

Daud Wihardi

Catatan Terkait

Lihat semua catatan »
Dulu Saya Pilih n8n karena Visual, Sekarang Apps Script karena AI

Dulu Saya Pilih n8n karena Visual, Sekarang Apps Script karena AI

Lima kriteria memilih Apps Script atau n8n, dari 19 script dan 3 workflow n8n yang jalan di kantor saya.

Otomatisasi Lead dengan n8n: 80 Leads Sebulan Tanpa Ada yang Jaga Inbox

Otomatisasi Lead dengan n8n: 80 Leads Sebulan Tanpa Ada yang Jaga Inbox

Delapan node n8n mengganti dua orang yang bergantian membuka inbox, dengan ongkos di bawah Rp 90,000 sebulan.

34 Pekerjaan Berulang yang Jalan Sendiri, dalam Tiga Lapisan

34 Pekerjaan Berulang yang Jalan Sendiri, dalam Tiga Lapisan

Inventaris otomasi di kantor saya, dibagi tiga lapisan, dan kenapa lapisan paling membosankan dibangun duluan.

Tujuh dari 12 Claude Skill yang Saya Hapus Ternyata Cuma Data

Tujuh dari 12 Claude Skill yang Saya Hapus Ternyata Cuma Data

Cara memisahkan instruksi dari data di folder kerja Anda, dan berapa yang saya bayar karena melewatkannya selama dua bulan.

Forecast Cashflow dari Accurate: Satu Setengah Jam Seminggu Jadi Sepuluh Menit

Forecast Cashflow dari Accurate: Satu Setengah Jam Seminggu Jadi Sepuluh Menit

Forecast cashflow satu setengah jam per minggu jadi sepuluh menit, sementara tab dan email tetap menunggu keputusan orang.

Wiki Karpathy Baru Separuh Loop

Wiki Karpathy Baru Separuh Loop

Wiki membuat pekerjaan saya bisa ditanyakan ke Claude. Yang membuatnya belajar adalah keputusan yang punya kondisi batal.