Logging, Monitoring và CI/CD là gì? Vai trò trong phát triển Backend
1. Tổng quan
Khi xây dựng một ứng dụng Backend, viết code và chạy được chương trình mới chỉ là bước đầu. Khi ứng dụng được đưa vào sử dụng, lập trình viên còn cần biết ứng dụng đang hoạt động như thế nào, nguyên nhân của những lỗi phát sinh và cách cập nhật phiên bản mới một cách an toàn.
Để giải quyết những vấn đề này, có ba khái niệm thường gặp:
- Logging: Ghi lại những sự kiện xảy ra trong ứng dụng.
- Monitoring: Theo dõi tình trạng và hiệu năng của hệ thống.
- CI/CD: Tự động hóa quá trình kiểm tra, xây dựng và triển khai phần mềm.
Ba khái niệm này có vai trò khác nhau nhưng bổ trợ cho nhau trong quá trình phát triển và vận hành Backend.
2. Logging là gì?

Logging là quá trình ghi lại những sự kiện xảy ra trong quá trình ứng dụng hoạt động. Những thông tin được ghi lại gọi là log.
Ví dụ, một ứng dụng quản lý sản phẩm có thể ghi log khi nhận request, truy vấn database thành công hoặc gặp lỗi khi kết nối đến PostgreSQL.
Nếu không có log, khi người dùng báo rằng API không hoạt động, lập trình viên có thể phải tìm nguyên nhân mà không có đủ thông tin về những gì đã xảy ra.
Các mức log thường gặp
Log thường được phân loại theo mức độ quan trọng:
- DEBUG: Thông tin chi tiết phục vụ quá trình phát triển và tìm lỗi.
- INFO: Ghi nhận những sự kiện thông thường, chẳng hạn ứng dụng khởi động thành công.
- WARN: Cảnh báo một tình huống bất thường nhưng chưa nhất thiết làm ứng dụng thất bại.
- ERROR: Ghi nhận lỗi khiến một thao tác không thể hoàn thành như mong đợi.
Ví dụ:
INFO Application started
INFO GET /products completed
WARN Database response is slow
ERROR Failed to query products
Đây là các dòng log minh họa. Trong ứng dụng thực tế, log thường chứa thêm thời gian, mức độ log, thông tin request và chi tiết lỗi phù hợp.
Logging trong Go
Go cung cấp package log để ghi thông báo đơn giản. Với những ứng dụng cần log có cấu trúc, có thể sử dụng log/slog trong thư viện chuẩn.
Ví dụ:
package main
import (
"errors"
"log/slog"
"os"
)
func main() {
logger := slog.New(
slog.NewJSONHandler(os.Stdout, nil),
)
logger.Info("Application started")
err := errors.New("database connection failed")
logger.Error("Failed to connect to database",
"error", err,
)
}
Chương trình tạo logger có định dạng JSON và ghi thông báo ra standard output.
Log có cấu trúc giúp những hệ thống thu thập log dễ dàng phân tích các trường như mức độ log, thông báo và nguyên nhân lỗi.
Logging được sử dụng để làm gì?
Logging giúp lập trình viên:
- Tìm hiểu nguyên nhân lỗi.
- Theo dõi quá trình xử lý request.
- Kiểm tra những sự kiện đã xảy ra.
- Hỗ trợ điều tra sự cố và bảo trì ứng dụng.
Tuy nhiên, log chỉ hữu ích khi được thiết kế hợp lý. Không nên ghi mật khẩu, access token hoặc dữ liệu cá nhân nhạy cảm vào log. Với hệ thống có nhiều dịch vụ, log có thể được chuyển đến một hệ thống tập trung để thuận tiện tìm kiếm và phân tích.
3. Monitoring là gì?

Monitoring là quá trình theo dõi tình trạng hoạt động và hiệu năng của ứng dụng, máy chủ và những dịch vụ liên quan.
Trong khi Logging ghi lại những sự kiện cụ thể, Monitoring thường tập trung vào các chỉ số được thu thập theo thời gian.
Ví dụ, một Go API có thể vẫn hoạt động nhưng phản hồi ngày càng chậm khi số lượng người dùng tăng lên. Monitoring giúp phát hiện sự thay đổi này để lập trình viên kiểm tra trước khi vấn đề trở nên nghiêm trọng hơn.
Các chỉ số thường được theo dõi
Một số metrics quan trọng trong Backend gồm:
- CPU usage: Mức sử dụng CPU của hệ thống.
- Memory usage: Lượng bộ nhớ đang được sử dụng.
- Request rate: Số lượng request được xử lý trong một khoảng thời gian.
- Latency: Thời gian xử lý request.
- Error rate: Tỷ lệ request gặp lỗi.
- Database metrics: Các chỉ số như số kết nối đang sử dụng và thời gian truy vấn.
Ví dụ, nếu thời gian phản hồi tăng đột ngột, lập trình viên có thể kiểm tra truy vấn database, mức sử dụng tài nguyên hoặc các dịch vụ mà API phụ thuộc.
Monitoring hoạt động như thế nào?
Một hệ thống monitoring thường thực hiện các bước sau:
- Thu thập metrics từ ứng dụng hoặc máy chủ.
- Lưu trữ dữ liệu để theo dõi theo thời gian.
- Hiển thị dữ liệu dưới dạng biểu đồ hoặc dashboard.
- Gửi cảnh báo khi một chỉ số vượt ngưỡng đã cấu hình.
Một số công cụ thường gặp:
- Prometheus: Thu thập và lưu trữ metrics dạng chuỗi thời gian.
- Grafana: Hiển thị dữ liệu trên dashboard và hỗ trợ thiết lập cảnh báo.
- OpenTelemetry: Cung cấp các công cụ và chuẩn để thu thập telemetry, bao gồm metrics, traces và logs.
Cần phân biệt Monitoring với Logging: Monitoring có thể phát hiện tỷ lệ lỗi tăng, còn log có thể cung cấp chi tiết về những lỗi cụ thể đã xảy ra.
4. CI/CD là gì?

CI/CD là nhóm phương pháp và công cụ giúp tự động hóa những bước trong quá trình tích hợp, kiểm tra, xây dựng và triển khai phần mềm.
Khi phát triển ứng dụng, lập trình viên thường xuyên sửa code, thêm chức năng và khắc phục lỗi. Nếu mỗi lần cập nhật đều phải tự thực hiện mọi bước bằng tay, quy trình dễ mất thời gian và có thể bỏ sót lỗi.
CI/CD giúp chuẩn hóa và tự động hóa những công việc này.
CI — Continuous Integration
Continuous Integration, hay tích hợp liên tục, là việc thường xuyên tích hợp thay đổi mã nguồn vào nhánh chung và tự động kiểm tra các thay đổi đó.
Ví dụ, khi lập trình viên push code lên GitHub, một workflow có thể tự động:
- Lấy mã nguồn.
- Chuẩn bị môi trường và tải dependency.
- Build ứng dụng.
- Chạy các bài kiểm thử.
- Báo kết quả thành công hoặc thất bại.
Nếu chương trình không build được hoặc test thất bại, nhóm phát triển có thể phát hiện vấn đề sớm.
CD — Continuous Delivery và Continuous Deployment
CD thường được dùng để chỉ hai cách tiếp cận:
- Continuous Delivery: Tự động chuẩn bị phần mềm để triển khai, nhưng bước đưa lên production có thể cần người phê duyệt.
- Continuous Deployment: Tự động đưa những thay đổi vượt qua các bước kiểm tra vào production mà không cần phê duyệt thủ công ở mỗi lần triển khai.
Cả hai đều hướng đến việc rút ngắn và chuẩn hóa quá trình đưa phiên bản mới đến người dùng.
Ví dụ về CI/CD với Go
Giả sử dự án Go có các bài kiểm thử được viết bằng package testing. Bạn có thể sử dụng GitHub Actions để tự động chạy test khi code được push lên GitHub.
Tạo tệp .github/workflows/go-test.yml:
name: Go Tests
on:
push:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
- name: Run tests
run: go test ./...
Trong ví dụ này:
onxác định khi nào workflow được chạy.runs-onxác định môi trường thực thi.actions/checkoutlấy mã nguồn về môi trường chạy workflow.actions/setup-gothiết lập phiên bản Go theogo.mod.go test ./...chạy các bài kiểm thử trong module.
Đây là ví dụ CI cơ bản. Nó chưa tự build Docker image hoặc triển khai ứng dụng lên server. Những bước đó có thể được bổ sung sau khi quy trình build và test đã hoạt động ổn định.
Một số công cụ CI/CD phổ biến là GitHub Actions, GitLab CI/CD và Jenkins.
5. Logging, Monitoring và CI/CD phối hợp với nhau như thế nào?
Ba khái niệm này thường xuất hiện trong cùng một quy trình phát triển phần mềm.
Giả sử bạn cập nhật một chức năng trong Go API và triển khai phiên bản mới.
Bước 1: CI/CD kiểm tra và triển khai
Khi code được push lên repository, pipeline chạy build và test. Nếu quy trình triển khai được cấu hình phù hợp, phiên bản mới có thể được đưa lên môi trường chạy.
Bước 2: Monitoring theo dõi hệ thống
Sau khi triển khai, Monitoring tiếp tục theo dõi thời gian phản hồi, tỷ lệ lỗi và mức sử dụng tài nguyên.
Nếu tỷ lệ lỗi tăng bất thường, hệ thống có thể gửi cảnh báo.
Bước 3: Logging hỗ trợ tìm nguyên nhân
Lập trình viên kiểm tra log để tìm những request thất bại, lỗi database hoặc vấn đề phát sinh trong phiên bản mới.
Sau khi xác định và sửa lỗi, lập trình viên tiếp tục cập nhật code và để CI/CD kiểm tra lại.
Có thể hình dung mối liên hệ như sau:
Code thay đổi
|
v
CI/CD: Build và test
|
v
Triển khai ứng dụng
|
v
Monitoring: Theo dõi metrics
|
v
Phát hiện vấn đề
|
v
Logging: Tìm hiểu sự kiện và lỗi
|
v
Sửa code và kiểm tra lại
Đây là một vòng lặp minh họa. Trong thực tế, Logging và Monitoring hoạt động liên tục khi ứng dụng chạy, không chỉ sau mỗi lần triển khai.
6. Phân biệt ba khái niệm
| Tiêu chí | Logging | Monitoring | CI/CD |
|---|---|---|---|
| Mục đích | Ghi lại sự kiện và lỗi | Theo dõi trạng thái, hiệu năng | Tự động hóa kiểm tra và phát hành phần mềm |
| Dữ liệu hoặc công việc chính | Log | Metrics, cảnh báo | Build, test, deploy |
| Thời điểm sử dụng | Khi ứng dụng hoạt động | Khi ứng dụng hoạt động | Khi có thay đổi và cần phát hành |
| Câu hỏi chính | Chuyện gì đã xảy ra? | Hệ thống đang hoạt động ra sao? | Làm thế nào để kiểm tra và đưa phiên bản mới vào sử dụng? |
| Ví dụ công cụ | log/slog, Loki |
Prometheus, Grafana | GitHub Actions, GitLab CI/CD |
Ba khái niệm không thay thế nhau. Logging không tự động bảo đảm hệ thống được giám sát, Monitoring không tự tìm ra mọi nguyên nhân lỗi, còn CI/CD không bảo đảm ứng dụng không có lỗi khi đã triển khai.
7. Developer Backend nên bắt đầu từ đâu?
- Logging: Sử dụng
log/slogđể ghi log khi API nhận request, xử lý thành công hoặc gặp lỗi. - Monitoring: Theo dõi các chỉ số cơ bản như latency và error rate; sau đó tìm hiểu cách xuất metrics để Prometheus thu thập.
- CI: Viết workflow GitHub Actions để tự động chạy
go test ./...khi push code hoặc tạo pull request. - CD: Khi đã có ứng dụng và môi trường triển khai phù hợp, bổ sung bước build Docker image và triển khai có kiểm soát.
Không cần triển khai toàn bộ công cụ ngay từ đầu. Quan trọng hơn là hiểu mỗi thành phần giải quyết vấn đề gì và thực hành từng bước trên một ứng dụng nhỏ.
Kết luận
Logging, Monitoring và CI/CD là những thành phần quan trọng trong quá trình phát triển và vận hành Backend.
Logging giúp ghi lại các sự kiện để hỗ trợ tìm lỗi. Monitoring giúp theo dõi tình trạng và hiệu năng của hệ thống. CI/CD giúp tự động hóa việc kiểm tra, xây dựng và triển khai những thay đổi mã nguồn.
Khi kết hợp đúng cách, ba thành phần này giúp lập trình viên không chỉ xây dựng ứng dụng mà còn theo dõi, phát hiện sự cố và cập nhật phần mềm một cách có hệ thống.
Mục tiêu không chỉ là viết được code chạy đúng, mà còn là có khả năng kiểm tra, vận hành và duy trì ứng dụng khi nó được sử dụng trong thực tế.
Nguồn tham khảo
-
CI/CD là gì? Vai trò và nguyên tắc triển khai CI/CD để phát triển phần mềm
- Hướng dẫn Logging và Monitoring container như thế nào hiệu quả?








Khoá học lập trình game con rắn cho trẻ em




