Skip to content

Bắt đầu với BQL

📝
Các mẫu chỉ mục được sử dụng trong các ví dụ này (như `events-*`, `auth-*`) là **ví dụ minh họa**. Hãy thay thế bằng tên chỉ mục thực tế của bạn khi chạy truy vấn trong môi trường của bạn.

BQL là gì?

BQL (BlackHole Query Language) là ngôn ngữ truy vấn dùng để tìm kiếm và phân tích dữ liệu nhật ký. Bạn gõ các lệnh kết nối bởi dấu pipe, và BQL truyền kết quả về trong quá trình xử lý. Hãy nghĩ nơi nó như một đường ống (pipeline) nơi mỗi bước chuyển hóa dữ liệu đang qua.

Cách pipeline hoạt động

Truy vấn BQL là một pipeline của các lệnh. Dữ liệu chạy từ trái sang phải, mỗi lệnh một lần:

from events-* | search status=error | stats count
| | | | |
v v v v v
data filter aggregate result

Mỗi lệnh nhận hàng từ bước trước và tạo hàng cho bước tiếp theo. Bạn có thể liên kết bao nhiêu lệnh tuỳ yêu cầu.

Truy vấn đầu tiên của bạn

Gõ trực tiếp vào trình chỉnh sửa truy vấn. Mỗi ví dụ xây dựng trên cái trước.

Ví dụ 1: Xem dữ liệu của bạn

from events-* | head 10

Lệnh này lấy 10 sự kiện đầu tiên từ chỉ mục events-*. Sử dụng lệnh này để kiểm tra trường nào có sẵn và dữ liệu trông như thế nào.

Ví dụ 2: Lọc theo trường

from events-* | search status=error

Lệnh search chỉ giữ lại các hàng mà status bằng error. Mọi thứ khác sẽ bị loại bỏ.

Ví dụ 3: Đếm số lượng lỗi

from events-* | search status=error | stats count

Bây giờ chúng ta đếm xem có bao nhiêu sự kiện lỗi. Lệnh stats count thu gom mọi hàng thành một hàng đúng với tổng số.

Ví dụ 4: Tìm các lỗi mới nhất

from events-* | search status=error | sort ts desc | head 5

Sắp xếp theo ts (thời điểm) giảm dần để đặt các sự kiện mới nhất đầu tiên. Sau đó head 5 chỉ lấy 5 phần tử đầu tiên.

Ví dụ 5: Đếm theo trường

from auth-* | search action=login_failure | stats count by user

Lệnh này đếm số lượng đăng nhập thất bại cho từng người dùng. Cụ thể by user nhóm số lượng theo từng tên người dùng duy nhất.

Các lệnh phổ biến

LệnhChức năngVí dụ
fromChọn nguồn dữ liệufrom events-*
searchLọc hàngsearch status=error
whereLọc hàng (giống search)where host=web-01
statsTổng hợp dữ liệustats count, stats avg(latency)
sortSắp xếp kết quảsort ts desc
head / limitLấy N hàng đầuhead 10
tailLấy N hàng cuốitail 10
dedupLoại bỏ trùng lặpdedup user
renameĐặt lại tên trườngrename old_name as new_name
evalTạo hoặc ghi đè trườngeval x = lower(name)
topGiá trị phổ biến nhấttop 5 host
rareGiá trị hiếm gặp nhấtrare 5 host

Mẹo

  • AND ngầm: Bạn có thể viết search status=error host=web-01 thay vì search status=error and host=web-01.
  • Pipe hoặc xuống dòng: Dùng | hoặc nhấp Enter để phân cách các lệnh.
  • Mẫu chỉ mục: Dùng ký hiệu dấu sao như events-* để tìm kiếm nhiều chỉ mục cùng lúc.
  • Hàm trong eval: Dùng lower(), upper(), len(), decode_url(), decode_hex(), base64_decode()match() để biến đổi giá trị trường.
  • Hướng sắp xếp: Dùng sort field desc để sắp xếp giảm dần, hoặc chính sort field để sắp xếp tăng dần.

Khắc phục sự cố

  • Không có kết quả: Kiểm tra mẫu chỉ mục của bạn có khıp với dữ liệu có sẵn. Thử from events-* | head 10 để xác nhận dữ liệu tồn tại.
  • Thiếu trường: Trường phải tồn tại trong dữ liệu. Chạy head 1 để xem trường nào có sẵn.
  • Không khıp loại: BQL so sánh chuỗi chính xác. status=200status="200" là khác nhau nếu trường được lưu dạng số nguyên.

Các bước tiếp theo


Chủ đề liên quan

Released under the MIT License.