Pada artikel sebelumnya kita sudah membahas tentang laravel queue. Laravel queue ini kita manfaatkan untuk memecah proses bisnis sehingga waktu yang digunakan untuk melakukan suatu proses bisnis menjadi lebih efisien. Namun terdapat kendala pada saat menggunakan laravel queue ini. Salah satu kendala pada saat menggunakan laravel queue ini adalah queue worker yang menangani job ini yang tiba-tiba mati atau prosesnya terhenti oleh beberapa hal. Dan baru diketahui setelah ada report dari user atau ketika ada beberapa proses yang tidak jalan. Kita perlu secara berkala memonitor queue worker ini dan start kembali ketika prosesnya terhenti yang notabene cukup merepotkan apabila kita lakukan secara manual. Kabar baiknya terdapat program yang dapat menangani masalah ini, yaitu supervisor.

Supervisor adalah sistem klien/server yang memungkinkan penggunanya untuk memonitor dan mengontrol sejumlah proses pada sistem operasi mirip UNIX.

Supervisor memiliki beberapa tujuan yang sama dengan program-program seperti launchd, daemontools, dan runit. Tidak seperti beberapa program ini, program ini tidak dimaksudkan untuk dijalankan sebagai pengganti init sebagai "id proses 1". Sebaliknya, program ini dimaksudkan untuk digunakan untuk mengontrol proses yang terkait dengan proyek atau pelanggan, dan dimaksudkan untuk memulai seperti program lain pada saat boot.

Overview

Pada postingan kali ini kita akan coba gunakan supervisor untuk mengelola dan memonitor laravel queue. Ada beberapa hal yang akan akan kita coba, yaitu.

  1. Step 1 - Install Supervisor
  2. Step 2 - Create Queue Worker
  3. Step 3 - Cek status queue worker

Prasyarat

Pada saat tutorial ini ditulis, ada beberapa hal yang saya gunakan dan saya persiapkan terlebih dahulu, yaitu.

  1. Menggunakan OS Linux (di sini saya menggunakan Ubuntu)
  2. Web app laravel yang sudah menggunakan laravel queue

Step 1 — Install Supervisor

Pertama kita install dulu supervisor. Buka terminal lalu run command berikut ini.

sudo apt update && sudo apt install supervisor

Tunggu sampai proses instalasi selesai.

Ketika proses instalasi selesai, service supervisor sudah running secara otomatis. Kita bisa cek status service supervisor menggunakan command berikut ini.

sudo systemctl status supervisor

Selain melalui terminal, kita juga bisa melihat proses supervisor melalui web interface. Untuk mengaktifkan web interface, kita modifikasi terlebih dahulu file konfigurasi supervisor.

sudo nano /etc/supervisor/supervisord.conf

Selanjutnya kita tambahkan konfigurasi berikut ini di awal file.

[inet_http_server]
port=127.0.0.1:9001
username=admin
password=admin

Save dan close file, lalu restart supervisor service.

suod systemctl restart supervisor

Untuk mengakses web interface supervisor, buka http://127.0.0.1:9001/ di web browser.

Step 2 — Create Queue Worker

Setelah supervisor berhasil kita install di step sebelumnya, sekarang kita akan buat queue worker untuk aplikasi web yang kita develop menggunakan laravel.

Sebagai contoh, Lokasi laravel web app yang kita bangun ada di lokasi berikut ini.

/var/www/html/laravel-queue

Sekarang kita buat file konfigurasi supervisor untuk web app kita.

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Kita ketika konfigurasi berikut ini.

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravel-queue/artisan queue:work --sleep=3 --tries=3 >
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/html/laravel-queue/worker.log
stopwaitsecs=3600

Mari kita bahas setiap bagian dari konfigurasi ini:

  1. [program:laravel-worker]

    • Ini adalah bagian yang mendefinisikan program untuk diawasi oleh Supervisor. Nama program yang diawasi adalah laravel-worker.
  2. process_name=%(programname)s%(process_num)02d

    • Ini mendefinisikan format nama proses yang akan dihasilkan oleh Supervisor. %(program_name)s akan diganti dengan nama program (laravel-worker), dan %(process_num)02d akan diganti dengan nomor proses dua digit.
  3. command=php /var/www/html/laravel-queue/artisan queue:work --sleep=3 --tries=3 --max-time=3600

    • Ini adalah perintah yang akan dijalankan oleh Supervisor ketika memulai program. Parameter seperti --sleep, --tries, dan --max-time menentukan perilaku queue worker.
  4. autostart=true

    • Ini menunjukkan bahwa program (laravel-worker) akan secara otomatis dijalankan saat Supervisor mulai.
  5. autorestart=true

    • Ini menunjukkan bahwa Supervisor akan mencoba untuk secara otomatis memulai ulang program jika program berhenti atau berhenti bekerja.
  6. stopasgroup=true

    • Ini akan menghentikan grup child process sebagai unit, artinya ketika kita memberhentikan program, Supervisor akan mencoba menghentikan semua child process yang terkait.
  7. killasgroup=true

    • Ini akan kill semua child process ketika program dihentikan atau direstart.
  8. user=root

    • Ini menentukan pengguna yang akan menjalankan program.
  9. numprocs=8

    • Ini menentukan jumlah proses yang akan dibuat. Dalam hal ini, ada 8 proses queue worker.
  10. redirect_stderr=true

    • Ini mengarahkan keluaran error standar ke output standar sehingga dapat ditangkap oleh Supervisor.
  11. stdout_logfile=/var/www/html/laravel-queue/worker.log

    • Ini menentukan file di mana output standar dari program akan ditulis.
  12. stopwaitsecs=3600

    • Ini menentukan waktu maksimum dalam detik yang Supervisor akan menunggu sebelum menghentikan program. Dalam hal ini, Supervisor akan menunggu 3600 detik (1 jam) sebelum memberhentikan program.

Selanjutnya kita run command berikut ini, supaya supervisor membaca file konfigurasi yang baru saja kita buat.

sudo supervisorctl reread

Output

laravel-worker: available

Selanjutnya kita run command ini supaya supervisor menerapkan perubahan konfigurasi yang sudah dibaca.

sudo supervisorctl update

Output:

laravel-worker: added process group

Setelah itu kita start laravel worker menggunakan command berikut ini.

sudo supervisorctl start "laravel-worker:*"

Step 3 — Cek Status Queue Worker

Untuk mengetahui apakah laravel worker berjalan atau tidak, kita bisa pakai command berikut ini.

sudo supervisorctl status

Output:

laravel-worker:laravel-worker_00   RUNNING   pid 65354, uptime 0:04:31
laravel-worker:laravel-worker_01   RUNNING   pid 65355, uptime 0:04:31
laravel-worker:laravel-worker_02   RUNNING   pid 65356, uptime 0:04:31
laravel-worker:laravel-worker_03   RUNNING   pid 65357, uptime 0:04:31
laravel-worker:laravel-worker_04   RUNNING   pid 65358, uptime 0:04:31
laravel-worker:laravel-worker_05   RUNNING   pid 65359, uptime 0:04:31
laravel-worker:laravel-worker_06   RUNNING   pid 65360, uptime 0:04:31
laravel-worker:laravel-worker_07   RUNNING   pid 65361, uptime 0:04:31

Penutup

Status yang ditampilkan menunjukkan bahwa semua pekerja Laravel sedang berjalan dengan baik. Setiap baris menunjukkan informasi tentang masing-masing worker, termasuk nama worker, status (RUNNING), dan ID proses (PID) beserta waktu berjalan (uptime).

Jika semuanya berjalan seperti yang diharapkan dan tidak ada pesan kesalahan atau masalah, maka konfigurasi Supervisor untuk laravel worker kita berjalan dengan baik. Kita dapat memantau status ini secara berkala untuk memastikan keberlanjutan operasi laravel worker.

Gun Gun Priatna
Software Engineer, Content Writer and Founder qadrlabs.com
Komentar

blog comments powered by Disqus