0

Series PM2 Log Mastery #1: "Hồi sinh" ứng dụng và Giao diện xem Log thời gian thực

Nhiều anh em thường dùng php artisan serve hoặc node app.js rồi nhìn log chạy trên màn hình Terminal. Cách đó chỉ ổn khi bạn đang ngồi máy tính. Khi deploy lên server thật, hoặc khi ứng dụng của bạn là một tập hợp các tiến trình chạy ngầm (Queue Worker, Web API, Socket), bạn cần một "người quản gia" chuyên nghiệp. PM2 (Process Manager 2) chính là người quản gia đó.

1. Tại sao phải dùng PM2 thay vì chạy lệnh bình thường?

Khi bạn chạy lệnh php artisan queue:work trực tiếp, nếu server bị mất điện hoặc code bị lỗi Fatal Error, tiến trình đó sẽ chết và... không bao giờ tự dậy.

PM2 giải quyết 2 vấn đề lớn nhất:

  1. Tính bất tử: Nếu ứng dụng của bạn chết (crash), PM2 phát hiện ra trong tích tắc và hồi sinh nó ngay lập tức.
  2. Quản lý tập trung: Bạn có thể quản lý 10-20 tiến trình cùng lúc bằng một giao diện duy nhất.

2. Khởi tạo "Người quản gia"

Trước hết, bạn cần cài đặt PM2 toàn cục (nếu chưa có):

npm install pm2 -g

Giả sử bạn có một ứng dụng Laravel đang chạy Worker hoặc một ứng dụng Node.js, thay vì chạy thủ công, hãy đưa nó vào sự quản lý của PM2:

# PM2 quản lý tiến trình Laravel Queue
pm2 start "php artisan queue:work --queue=hitachi_sync" --name "laravel-worker-hitachi"

# PM2 quản lý tiến trình API hoặc Node.js
pm2 start app.js --name "api-service"

Lúc này, ứng dụng của bạn đã nằm trong "vùng an toàn". Dù bạn có tắt Terminal đi, ứng dụng vẫn chạy ngầm 24/7.

3. Xem Log: "Nội soi" ứng dụng thời gian thực

Đây là phần thú vị nhất. Khi ứng dụng đang chạy ngầm, làm sao để xem nó đang in ra cái gì? PM2 cung cấp bộ công cụ xem log cực kỳ mạnh mẽ.

Lệnh xem log cơ bản:

pm2 logs

Lệnh này sẽ hiển thị log của tất cả các tiến trình mà PM2 đang quản lý. Nó sẽ cuộn liên tục khi có log mới xuất hiện.

Lệnh xem log của riêng một tiến trình: Nếu bạn có hàng chục tiến trình, xem tất cả sẽ rất rối. Hãy chỉ định tên tiến trình:

pm2 logs laravel-worker-hitachi

Lệnh xem "nhiều dòng hơn": Mặc định PM2 chỉ hiện 15 dòng cuối. Nếu bạn muốn xem lịch sử log (ví dụ 100 dòng gần nhất):

pm2 logs --lines 100

4. Giao diện Giám sát (Dashboard) "thần thánh"

Nếu bạn không muốn nhìn log dạng chữ cuộn, PM2 cung cấp một giao diện bảng điều khiển (Dashboard) cực kỳ trực quan ngay trên terminal:

pm2 monit

Tại sao màn hình này quan trọng?

  • Nó cho biết chính xác mỗi tiến trình đang ngốn bao nhiêu RAM và CPU.
  • Nếu thấy một tiến trình Worker ngốn 800MB RAM, bạn biết ngay nó bị Memory Leak và cần phải restart.
  • Bạn có thể dùng phím mũi tên để chọn tiến trình và xem log của riêng nó ngay tại màn hình này.

Tổng kết Bài 1

Bạn đã biết cách đưa "đứa con tinh thần" vào sự bảo hộ của PM2 và kỹ thuật cơ bản để "nhìn" thấy những gì đang xảy ra bên trong ứng dụng.

Tuy nhiên, log trong file là một kho báu, nếu không biết cách định dạng (format), xoay vòng (rotate) và cảnh báo khi có lỗi xảy ra, thì file log sẽ sớm làm đầy ổ cứng của bạn.

Ở bài tiếp theo, bạn muốn chúng ta đi sâu vào cách "Quản lý vòng đời file log" (Log Rotation) để tránh tràn ổ cứng, hay học cách "Tích hợp PM2 Log với các dịch vụ bên ngoài" (như đẩy log thẳng vào Telegram để khi ứng dụng lỗi là điện thoại bạn rung lên ngay lập tức)?


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí