Bài 28. Logging trong Kubernetes - Log của Pod đi đâu?
Bạn vừa deploy thành công ứng dụng lên Kubernetes.
Mọi thứ đều hoạt động ổn...
Cho đến một ngày, người dùng báo:
"Ứng dụng bị lỗi 500."
Việc đầu tiên bạn làm là gì?
Chắc chắn là xem log.
Nhưng trong Kubernetes, mọi chuyện không đơn giản như khi chạy Docker.
Khi Pod chết, log cũng có thể biến mất
Hãy tưởng tượng bạn có một Pod đang chạy.
Client
│
▼
+---------+
| Pod |
+---------+
│
▼
stdout / stderr
Ứng dụng ghi log ra stdout và stderr.
Bạn có thể xem ngay bằng:
kubectl logs my-pod
Rất đơn giản.
Nhưng nếu Pod bị xóa hoặc được tạo lại?
Pod A
│
├── app.log
│
❌ Pod bị xóa
↓
Pod B
│
└── log mới
Log của Pod cũ gần như cũng biến mất theo.
Điều này khiến việc điều tra lỗi trở nên rất khó.
1. Kubernetes không có nơi lưu log tập trung
Đây là điều nhiều người mới bất ngờ.
Kubernetes không tự lưu trữ log lâu dài.
Nó chỉ giúp bạn đọc log của Pod đang chạy.
Nếu muốn:
- tìm log của tuần trước,
- tìm log của hàng trăm Pod,
- hoặc tìm log của nhiều Node,
bạn cần một hệ thống Centralized Logging.
2. Centralized Logging hoạt động như thế nào?
Ý tưởng rất đơn giản.
Thay vì để log nằm rải rác trên từng Pod, ta gom tất cả về một nơi.
+--------+
| Pod A |
+--------+
│
+--------+
| Pod B |
+--------+
│
+--------+
| Pod C |
+--------+
│
▼
Log Collector
│
▼
Log Storage
│
▼
Dashboard
Nhờ vậy, bạn chỉ cần mở một giao diện là có thể tìm kiếm log của toàn bộ hệ thống.
3. Những công cụ phổ biến
Trong thực tế, một hệ thống logging thường gồm:
- Fluent Bit hoặc Fluentd để thu thập log.
- Loki hoặc Elasticsearch để lưu trữ.
- Grafana hoặc Kibana để tìm kiếm và hiển thị.
Bạn không cần nhớ hết ngay bây giờ.
Chỉ cần biết rằng chúng phối hợp với nhau theo mô hình:
Thu thập → Lưu trữ → Hiển thị
Điều quan trọng nhất cần nhớ
Đối với người mới học Kubernetes, hãy ghi nhớ ba điều:
- Ứng dụng nên ghi log ra stdout/stderr, thay vì tự ghi vào file trong container.
- Dùng
kubectl logsđể xem log của Pod khi debug. - Trong môi trường production, hãy sử dụng Centralized Logging để lưu trữ và tìm kiếm log lâu dài.
Tổng kết
Kubernetes giúp bạn chạy ứng dụng, nhưng không phải là nơi lưu giữ log.
Nếu Pod bị xóa, log cũng có thể biến mất theo.
Vì vậy, trong các hệ thống thực tế, log luôn được gửi về một hệ thống tập trung để dễ dàng theo dõi, tìm kiếm và phân tích.
Ở bài tiếp theo, chúng ta sẽ tìm hiểu Monitoring – làm thế nào để biết CPU, RAM, số lượng request hay trạng thái của toàn bộ Cluster theo thời gian thực, ngay cả khi chưa có ai báo lỗi.
All rights reserved