commit ae93fea0756a080ec1ad15e051a67abee1e8a55f Author: Khanh Date: Wed Jan 10 11:25:19 2024 +0700 docs: Logging & Monitoring version 1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..85e7c1d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea/ diff --git a/Writerside/hi.tree b/Writerside/hi.tree new file mode 100644 index 0000000..2feaabe --- /dev/null +++ b/Writerside/hi.tree @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/Writerside/topics/Logging.md b/Writerside/topics/Logging.md new file mode 100644 index 0000000..c9ae1bc --- /dev/null +++ b/Writerside/topics/Logging.md @@ -0,0 +1,70 @@ +# Logging + +## Backend +Đối với backend, Logging nên được setup sử dụng các thư viện như winston dễ dàng xem lại log khi cần +## Frontend +Đối với frontend, nếu có thể, nên đưa log về một dịch vụ store log (ví dụ: Parsable). Các dịch vụ này sẽ giúp dễ dàng trace log người dùng đã thực hiện để dễ dàng phát hiện khi có lỗi +## Khi nào nên log? + +### 1. Xử lý request và response của client: +Trường hợp này nên log qua middleware và log các request đi vào và response trả về để dễ theo dõi khi có lỗi xảy ra +### 2. Request và response từ dịch vụ thứ 3 (ví dụ: Paypal): +Các dịch vụ ở bên thứ 3 thường khó kiểm soát. Log request và response ở các trường hợp này sẽ giúp nhanh chóng phát hiện nếu có vấn đề xảy ra +Ví dụ: +```Javascript +const payWithPaypal = (payData) => { + log.debug('Sending payData to paypal service: ', payData); + const response = paypalService.pay(payData); + log.debug('Response from paypal service: ', response); + return response.success; +} +``` +### 3. Xử lý logic tuần tự +Khi xử lý tuần tự, các bước thực hiện cũng nên được log ra để dễ dàng theo dõi khi có lỗi xảy ra +Ví dụ: +```Javascript +const createUser = (user) => { + log.debug('Validating user'); + validateUser(user); + log.debug('Saving user avatar'); + saveAvatar(user.avatar); + log.debug('Saving user to db'); + saveUser(user); +} +``` +### 4. Xử lý if-else +Các trường hợp chia nhánh lớn để xử lý cũng nên được log để dễ dàng xử lý nếu lỗi xảy ra do luồng chạy đi sai nhánh +Ví dụ: +```Javascript +const getSettings = () => { + const cachedSettings = cache.getSettings(); + if(cachedSettings) { + log.debug("Settings is found in cache"); + return cachedSettings; + } + log.debug("Settings not found in cache, fetching from db..."); + return db.getSettings(); +} +``` + +### 5. Khi có lỗi xảy ra +Khi có lỗi xảy ra, nên log cụ thể nhất có thể lỗi đã xảy ra + +### 6. Log khi có các vấn đề bất thường về phần cứng +Nên log khi CPU hay RAM đang được sử dụng quá nhiều, database mất quá lâu để connect,... + +## Nên log thế nào? +- Log đúng level. Các level thường thấy: + - **TRACE**: Các log này chỉ nên được dùng ở development để track bug, không nên được commit + - **DEBUG**: Các log ở level này là các log thường có khả năng được dùng để debug + - **INFO**: Các log ở level này là các thông tin liên quan tới user hay hệ thống (ví dụ: các worker bắt đầu chạy theo lịch trình) + - **NOTICE**: Các log ở level này là các thông tin đáng chú ý nhưng không phải lỗi + - **WARN**: Các log ở level này là c ác sự kiện có thể trở thành lỗi. Ví dụ: DB đang mất quá lâu để thực hiện một query, một số config được bỏ qua... + - **ERROR**: Các lỗi đã xảy ra (API của bên thứ 3 không gọi được, Redis không kết nối được...) + - **FATAL**: Các lỗi làm chương trình phải dừng ngay lập tức +- Log cụ thể nhất có thể và kèm theo các thông tin liên quan tới context\ +Ví dụ: +```Javascript +User 54543 successfully registered e-mail user@domain.com +Transaction 2346432 failed: cc number checksum incorrect +``` \ No newline at end of file diff --git a/Writerside/topics/Monitoring.md b/Writerside/topics/Monitoring.md new file mode 100644 index 0000000..fbfa563 --- /dev/null +++ b/Writerside/topics/Monitoring.md @@ -0,0 +1,11 @@ +# Monitoring + +Monitor đã được setup tại các link sau: +- [Monitor API Play4Promote](https://api.play4promote.com/status) +- [Monitor Socket Play4Promote](https://socket.play4promote.com/status) +- [Monitor API Play4Promo](https://api.play4promo.com/status) +- [Monitor Socket Play4Promo](https://socket.play4promo.com/status) + +Các link monitor trên cần bổ sung thêm các endpoint GET có sử dụng để dễ dàng healthcheck từng endpoint. + +Ngoài ra, Google Monitor cũng đã được setup cho dự án. \ No newline at end of file diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg new file mode 100644 index 0000000..f34e590 --- /dev/null +++ b/Writerside/writerside.cfg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file