+1

Series Docker & ELK Stack cho Laravel #4: Khai phá Kibana – KQL, Data Views và Dashboard Real-time (Trạm cuối)

Đến thời điểm này, hệ thống của chúng ta đã có một "động cơ" hoàn hảo: Laravel sinh log JSON siêu tốc, Filebeat cần mẫn thu gom và Elasticsearch lưu trữ với tốc độ ánh sáng. Dữ liệu giao dịch của toàn tuyến Metro đang cuồn cuộn chảy về trung tâm.

Nhưng dữ liệu thô (Raw Data) chỉ là những con số vô hồn nếu chúng ta không thể nhìn thấy bức tranh tổng thể. Đã đến lúc chúng ta mở cánh cửa cuối cùng của ELK Stack: Kibana.

Hôm nay, chúng ta sẽ biến những dòng text nhàm chán thành một Trung tâm Chỉ huy (Command Center) thực thụ với các biểu đồ Real-time!

1. Nối nhịp cầu dữ liệu: Khởi tạo Data Views

Khi bạn truy cập Kibana (mặc định tại http://localhost:5601), Kibana lúc này vẫn "mù tịt" vì nó chưa biết phải lấy dữ liệu từ Index nào trong Elasticsearch. Bạn phải định nghĩa một Data View (các bản Kibana cũ gọi là Index Pattern).

  1. Ở menu bên trái, kéo xuống phần Management -> chọn Stack Management.
  2. Chọn Data Views -> Bấm Create data view.
  3. Tại ô Index pattern, hãy nhập đúng chuỗi mà chúng ta đã cấu hình cho Filebeat ở Bài 3: afc-logs-*. Ngay lập tức, Kibana sẽ báo tìm thấy các index khớp với tên này.
  4. Tại ô Timestamp field, chọn @timestamp (đây là cột thời gian do Filebeat tự động chèn vào mỗi dòng log).
  5. Bấm Save data view to Kibana.

Từ giây phút này, Kibana đã chính thức nắm được toàn bộ cấu trúc log hệ thống (bao gồm các cột station_id, card_uid, action mà chúng ta đã đẩy từ Laravel).

2. Tab Discover và sức mạnh của KQL (Kibana Query Language)

Mở tab Discover trên thanh menu chính. Đây là nơi bạn soi chiếu dữ liệu thô. Bạn sẽ thấy một biểu đồ cột hiển thị tần suất log theo thời gian thực và danh sách các dòng JSON bên dưới.

Nhưng quyền lực thực sự nằm ở thanh tìm kiếm (Search bar) phía trên cùng. Kibana cung cấp ngôn ngữ KQL để bạn truy vấn dữ liệu dễ như ngôn ngữ tự nhiên.

Giả sử hệ thống báo động có lỗi thiết bị tại nhà ga Bến Thành (Mã: S01), thay vì SSH vào server gõ lệnh grep, bạn chỉ cần gõ vào thanh KQL:

station_id: "S01" and status: "error"

Hoặc bạn muốn truy vết riêng một thẻ bị lỗi không thể Tap Out (quẹt ra):

card_uid: "E1F4A5002B" and action: "tap_out"

Chỉ mất 0.1 giây, Kibana sẽ lọc ra chính xác các dòng log liên quan giữa hàng triệu bản ghi. Bạn có thể lưu lại các câu query này để dùng cho những lần xử lý sự cố (troubleshooting) sau.

3. Vẽ biểu đồ trực quan bằng Kibana Lens

Con số thì khô khan, nhưng biểu đồ thì biết nói. Hãy chuyển sang tab Visualize Library và bấm Create visualization -> Chọn Lens (công cụ kéo thả cực kỳ dễ dùng của Kibana).

Ví dụ 1: So sánh lưu lượng hành khách giữa các ga (Bar Chart)

  • Kéo trường station_id thả vào trục Horizontal axis (Trục X).
  • Trục Vertical axis (Trục Y) mặc định sẽ là Records (Tổng số lượt).
  • Ngay lập tức, bạn có một biểu đồ cột so sánh ga nào đang đông khách nhất.

Ví dụ 2: Tỷ lệ loại giao dịch (Pie Chart)

  • Đổi loại biểu đồ thành Donut (Hình vành khuyên).
  • Kéo trường action thả vào phần Slice by.
  • Bạn sẽ có một biểu đồ chia tỷ lệ % rõ ràng giữa tap_in, tap_out, top_up (nạp tiền) hay refund (hoàn tiền).

Lưu các biểu đồ này lại với tên gọi rõ ràng như "Lưu lượng Ga" hay "Tỷ lệ Giao dịch".

4. Lắp ráp Command Center (Dashboard Real-time)

Biểu đồ đơn lẻ chưa đủ sức mạnh. Hãy vào tab Dashboard và bấm Create dashboard.

Tại đây, bạn bấm Add from library và lôi tất cả các biểu đồ bạn vừa vẽ ở phần 3 ra màn hình. Bạn có thể tự do kéo thả, thay đổi kích thước của từng khung hình giống hệt như đang xếp gạch Tetris để tạo ra một giao diện tối ưu nhất.

Tuyệt chiêu cho dân vận hành (DevOps/Monitor): Ở góc trên cùng bên phải của Dashboard, có một nút cài đặt thời gian (mặc định là Last 15 minutes). Hãy click vào đó, chọn tab Auto-refresh và cài đặt mức 5 seconds hoặc 10 seconds. Bấm Start.

Bây giờ, hãy treo màn hình Dashboard này lên một chiếc TV lớn trong phòng làm việc. Cứ mỗi 5 giây, toàn bộ biểu đồ sẽ tự động nhảy số, các cột sẽ nhấp nhô theo lưu lượng thẻ quẹt thực tế từ tất cả các nhà ga truyền về. Bạn đang nhìn thấy nhịp đập trực tiếp của cả một hệ thống hạ tầng lõi!

Lời kết Series ELK Stack

Chúng ta đã chính thức hoàn thiện kiến trúc giám sát (Observability) cho dự án Laravel.

  • Bằng việc cách ly Docker, bạn bảo vệ được tài nguyên server.
  • Bằng tư duy Structured Logging và Filebeat, bạn bảo vệ được hiệu năng của API (Zero-blocking).
  • Bằng sức mạnh của Elasticsearch và Kibana, bạn đã có trong tay chiếc kính lúp quyền lực nhất để nhìn thấu mọi ngóc ngách của dữ liệu.

Từ Log Viewer cho môi trường Dev nhỏ gọn, đến Debugbar soi chi tiết từng câu SQL, và giờ là ELK Stack cho dữ liệu khổng lồ. Bộ kỹ năng của bạn giờ đây đã hoàn toàn đáp ứng được những yêu cầu khắt khe nhất của một hệ thống Enterprise xử lý hàng ngàn giao dịch mỗi giây. Chúc hệ thống AFC luôn vững vàng và những biểu đồ trên Kibana mãi hiển thị màu xanh của sự ổn định!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí