docs: Logging & Monitoring version 1
commit
ae93fea075
|
@ -0,0 +1 @@
|
||||||
|
/.idea/
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE instance-profile
|
||||||
|
SYSTEM "https://resources.jetbrains.com/writerside/1.0/product-profile.dtd">
|
||||||
|
|
||||||
|
<instance-profile id="hi" name="Help Instance"
|
||||||
|
start-page="Logging.md">
|
||||||
|
|
||||||
|
<toc-element topic="Logging.md"/>
|
||||||
|
<toc-element topic="Monitoring.md"/>
|
||||||
|
</instance-profile>
|
|
@ -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
|
||||||
|
```
|
|
@ -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.
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE ihp SYSTEM "https://resources.jetbrains.com/writerside/1.0/ihp.dtd">
|
||||||
|
|
||||||
|
<ihp version="2.0">
|
||||||
|
<topics dir="topics" web-path="topics"/>
|
||||||
|
<images dir="images" web-path="images"/>
|
||||||
|
<instance src="hi.tree"/>
|
||||||
|
</ihp>
|
Loading…
Reference in New Issue