Logo
Featured Image

Triển khai Loki & Grafana trên AWS EKS: Centralized Logging

Author
Tobi 10/04/2026 3 views

Nếu bạn đang chạy Kubernetes (K8s) và vẫn đang debug bằng cách lóc cóc gõ lệnh kubectl logs <tên-pod-dài-ngoằng> mỗi khi hệ thống sập, thì bài viết này là dành cho bạn.

Ở bài trước chúng ta đã cài thêm Prometheus & Grafana trên AWS EKS để giám sát AWS EKS rồi. Hôm nay, chúng ta sẽ nâng cấp hệ thống giám sát (Observability) bằng cách triển khai Loki & Promtail để thu gom toàn bộ log của cụm AWS EKS về một màn hình duy nhất trên Grafana. Không còn cảnh mù mờ mò mẫm trong Terminal nữa!


1. Centralized Logging là gì? Tại sao chọn Loki?

Trong K8s, các Pod (ứng dụng) có thể bị xóa hoặc khởi động lại bất cứ lúc nào (ví dụ khi Autoscaling). Nếu Pod chết, log của nó cũng bay màu theo. Centralized Logging là giải pháp dùng một "máy hút" đi gom log từ tất cả các Node, sau đó ném vào một "kho chứa" tập trung.

Chúng ta chọn Loki (được phát triển bởi chính Grafana) vì:

  • Rất nhẹ, không "ngốn" RAM khủng khiếp như ElasticSearch.

  • Tích hợp hoàn hảo 100% với giao diện Grafana có sẵn.

  • Sử dụng Promtail làm tác nhân (agent) đi hút log cực kỳ hiệu quả.


2. Cài đặt bộ đôi Loki & Promtail bằng Helm

Giả định bạn đã có sẵn cụm EKS và đã cài đặt Grafana (nằm trong namespace monitoring). Việc đưa Loki vào cụm cực kỳ đơn giản với Helm.

Mở Terminal và thực thi các lệnh sau:

# Thêm kho lưu trữ của Grafana
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

# Cài đặt nguyên combo Loki + Promtail vào chung nhà với Grafana
helm install loki grafana/loki-stack --namespace monitoring

Kiểm tra xem hệ thống đã khởi động chưa:

kubectl get pods -n monitoring -w

Khi bạn thấy Pod loki-0 và các Pod loki-promtail-... chuyển sang trạng thái Running, chúng ta bắt đầu bước kết nối.


3. Cấu hình Data Source trên Grafana (Và cú lừa Health Check)

Đây là bước móc nối dây điện để Grafana biết kho Loki nằm ở đâu.

  1. Mở giao diện Grafana, vào mục Connections (biểu tượng phích cắm) ➔ Chọn Data sources.

  2. Bấm Add data source ➔ Chọn Loki.

  3. Ở mục URL, nhập chính xác địa chỉ nội bộ này: http://loki:3100 (Tuyệt đối không có dấu gạch chéo / ở cuối).

  4. Cuộn xuống dưới và bấm Save & test.

⚠️ Pro-Tip (Kinh nghiệm xương máu): Lỗi "Unable to connect" ảo

Đôi khi, Grafana sẽ báo lỗi đỏ lòm: Unable to connect with Loki. Please check the server logs... Nếu bạn check log của Grafana và thấy dòng chữ: error from loki: parse error... syntax error: unexpected IDENTIFIER

👉 Đừng hoảng! Đây không phải lỗi mạng. Đây là do nút Test của phiên bản Grafana mới ngầm gửi một câu lệnh kiểm tra (Health Check) mà Loki chưa hiểu được cú pháp. Thực tế, chúng đã kết nối thành công! Bạn cứ việc bỏ qua lỗi này và tiến hành truy vấn Log.


4. Truy xuất và Phân tích Log như một Hacker (với LogQL)

Hãy quên cái lỗi đỏ kia đi. Để xem log của ứng dụng (ví dụ: web Spring Boot), bạn làm như sau:

  1. Nhìn sang menu bên trái, bấm vào biểu tượng La bàn (Explore).

  2. Ở góc trên cùng, chọn Data Source là Loki.

Bấm nút Label browser, chọn nhãn app (hoặc container) và tìm tên ứng dụng của bạn (VD: orishop).

Bấm Show logs. Toàn bộ dòng thời gian của ứng dụng sẽ tuôn chảy trên màn hình.

(Lưu ý: Nếu ô Logs volume báo lỗi syntax error, hãy gập nó lại. Chúng ta chỉ cần quan tâm đến phần text log ở bên dưới).

Tuyệt kỹ lọc Log với LogQL

Thay vì cuộn chuột mỏi tay để tìm lỗi, hãy sử dụng thanh công cụ Query ở trên cùng:

  • Chỉ hiển thị dòng có lỗi (ERROR/Exception): Thêm đoạn này vào sau từ khóa tìm kiếm: {app="orishop"} |= "Exception"

  • Loại bỏ các log "rác" (Ví dụ: log DB sinh ra quá nhiều): Sử dụng toán tử != để loại trừ: {app="orishop"} != "Hibernate"


Kết luận

Việc tích hợp Loki vào cụm EKS giúp bức tranh Observability của bạn trở nên hoàn thiện. Từ nay, mỗi khi biểu đồ Prometheus báo CPU tăng cao, bạn chỉ cần mở tab Explore của Loki và lọc ngay ra dòng code nào đang gây nghẽn tại đúng thời điểm đó. Debug trên Kubernetes chưa bao giờ nhàn đến thế

 

 

Bình luận (0)

+ =
Zalo