Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2)

605
27-11-2023
Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2)

Mở đầu

Trong phần trước ta đã nói về cách triển khai Grafana, Loki và Grafana Agent

Phần này ta sẽ tiếp tục nói về:

  1. Truy vấn và xem dữ liệu log Kubernetes bằng Grafana 
  2. Sử dụng truy vấn số liệu để tạo số liệu từ log 
  3.  Thiết lập cảnh báo từ log

Quản lý log trong Grafana

Trong phần này sẽ hướng dẫn sử dụng Grafana để truy vấn logs, tạo ra các metrics từ log và tạo các cảnh báo từ metrics đó.

How to query logs in Grafana

Loki sử dụng LogQL một ngôn ngữ truy vấn lấy cảm hứng từ PromQL, để lọc các luồn logs từ Kubernetes labels. Đồng thời log querry cho phép thực hiện 2 loại query, log query và metrics query.

Bắt đầu với log query, ta sẽ truy cập Grafana Explore bằng cách bấm vào biểu tượng la bàn ở bên trái. Ta sẽ dùng Query Builder để dựng các truy vấn nếu như chưa quen với cú pháp LogQL để dựng các truy vấn. Tuy nhiên trong bài viết sẽ sử dụng LogQL nên sẽ truy cập vào tab Code như sau:

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 1.

Ta sẽ sử dụng {label="label selector"} trong bài viết này, ta sẽ thử lấy output từ stderr sử dụng đoạn code LogQL sau trong Label browser:

`{stream="stderr"} |= ```

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 2.

Ở bảng phía trên ta có thể thấy khối lượng log được. Còn ở phía dưới là danh sách log tương đương khi dùng câu lệnh kubectl logs.

Cách thực hiện truy vấn metrics bằng Grafana

Trong LogQL có thể pipe các regex vào log. Ví dụ như có thể lấy log chưa giá trị level=error từ luồng stderr như sau:

{stream="stderr"} |= `level=error`

Khả năng có thể pipe nhiều truy vấn và regex như vậy có thể tạo ra câu truy vấn phức tạp. Tuy Vậy vẫn chỉ là log query, để có được metrics query thì ta cần sử dụng các hàm phù hợp như sau:

Ví dụ:

count_over_time({stream="stderr"} |= `level=error` [5m])

Mục đích của hàm count_over_time là để đếm lượng log truy vấn được trong 1 khoảng thời gian, như trên là mỗi 5p

Sau khi đưa vào chạy lệnh truy vấn. Kết quả có thể thấy như sau:

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 3.

Ta có thể đưa lên dashboard bằng nút Add to dashboard : 

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 4.

Ví dụ đưa lên dashboard:

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 5.

Như vậy ta đã có thể xem log và metrics 1 cách dễ dàng, nhưng làm sao để biết được khi có vấn đề xảy ra. Ta sẽ cần đặt một cảnh báo:

Cách cài đặt cánh báo từ grafana log

Cảnh báo log là một trong những tính năng hữu dụng của Grafana. Để cài đặt cảnh báo, ta bấm vào hình cái chuông ở bên trái để truy cập vào mục Alerting.

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 6.

Bấm Create alert rule sẽ đưa đến Explore, ta sẽ sử dụng lệnh truy vấn LogQL như cũ để tạo cảnh báo. Một biểu đồ hiện lên nhưng lần này có 1 vạch đỏ, vạch này sẽ hiển thị mức cảnh báo

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 7.

Ta sẽ đặt cảnh báo lên mức 50. Ta có thể tất cả các cảnh báo đều vượt qua ngưỡng.

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 8.

Sau khi xong có thể save lại

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 9.

Khi quá ngưỡng sẽ có cảnh báo

Thu thập và truy vấn logs Kubernetes với Grafana Loki, Grafana và Grafana Agent (phần 2) - Ảnh 10.

Kubernetes có một thiếu sót là hệ thống là nó không cung cấp giải pháp lưu trữ cho logs.

Bài viết này đã hướng dẫn cách triển khai giải pháp ghi logs cho Kubernetes với Grafana Loki . Đồng thời cũng hướng dẫn cách sử dụng Grafana để trực quan hóa logs mà còn hướng dẫn tạo các truy vấn để lấy thông tin logs hiệu quả hơn và thiết lập cảnh báo dựa trên metrics/ logs.

>> Có thể bạn quan tâm: Cách triển khai Nginx Ingress với Cert-Manager trên Bizfly Kubernetes Engine

SHARE