Viết truy vấn PromQL từ câu hỏi ngôn ngữ tự nhiên, rồi kiểm chứng đúng cách
AI có thể phác thảo PromQL nhanh, nhưng query chỉ đáng tin khi được kiểm tra với metric, nhãn, kiểu dữ liệu và kết quả thực tế. Playbook này giúp SRE biến câu hỏi vận hành thành truy vấn có thể review trước khi dùng.
Một dashboard đang đỏ. Người trực on-call hỏi: “Lưu lượng request vừa rồi có tăng không?”
Bạn cần một truy vấn PromQL nhanh, nhưng nhanh không đồng nghĩa với đúng. AI có thể viết bản nháp trong vài giây; việc của SRE là kiểm tra metric, nhãn, kiểu dữ liệu và tập series mà truy vấn thực sự trả về.
Quy trình nên là:
> Câu hỏi rõ ràng → AI đề xuất PromQL → kiểm tra trong Prometheus → mới dùng cho dashboard, alert hoặc runbook
PromQL: biết loại truy vấn trước khi viết
PromQL là ngôn ngữ truy vấn của Prometheus để chọn và tổng hợp time series.
Prometheus hỗ trợ hai cách truy vấn chính:
Instant query: đánh giá biểu thức tại một thời điểm.
Range query: đánh giá cùng biểu thức ở nhiều mốc thời gian cách đều nhau, từ thời điểm bắt đầu đến kết thúc.
Trong giao diện Prometheus:
Tab Table dùng cho instant query.
Tab Graph dùng cho range query.
PromQL có bốn kiểu kết quả:
Instant vector: một tập time series, mỗi series có một sample tại cùng thời điểm.
Range vector: một tập time series, mỗi series chứa nhiều điểm dữ liệu theo thời gian.
Scalar: một giá trị số thực.
String: một chuỗi; hiện không được sử dụng.
Range query chỉ hỗ trợ biểu thức có kết quả gốc là scalar hoặc instant vector. Vì vậy, trước khi đưa query vào biểu đồ, hãy kiểm tra biểu thức đó phù hợp với loại truy vấn bạn định chạy.
Đừng bắt AI đoán metric và label
Câu hỏi như “API có chậm không?” chưa đủ để tạo ra một truy vấn đáng tin.
Trước khi yêu cầu AI viết PromQL, hãy chuẩn bị các thông tin có thể kiểm tra:
Đối tượng cần xem: service, workload, ingress, node hay thành phần nào?
Metric đã xác nhận: tên metric đang có trong Prometheus.
Nhãn cần lọc: ví dụ môi trường, namespace, service, instance hoặc các nhãn nội bộ của hệ thống.
Mốc thời gian: cần giá trị tại hiện tại hay cần xem xu hướng?
Dạng đầu ra: bảng series, biểu đồ, hay một giá trị số.
Loại metric: counter, gauge, native histogram hoặc classic histogram.
Theo quy ước, float counter thường có hậu tố total. Tài liệu cũng lưu ý rằng áp dụng rate cho gauge dạng float có thể cho kết quả không có ý nghĩa, nhưng Prometheus vẫn xử lý truy vấn. Với gauge histogram, truy vấn có thể được gắn cảnh báo khi phép toán không phù hợp.
Điểm cần nhớ: tên metric chỉ là tín hiệu ban đầu. Đừng để AI tự suy ra kiểu metric hoặc tự thêm label selector không có trong dữ liệu bạn cung cấp.
Prompt mẫu cho AI
Dùng một prompt có cấu trúc để buộc AI nêu rõ giả định:
text
Bạn là trợ lý PromQL cho SRE.
Mục tiêu vận hành:
<ví dụ: kiểm tra xu hướng request của một service>
Metric đã xác nhận tồn tại:
<metricname>
Loại metric đã biết:
<counter | gauge | native histogram | classic histogram | chưa xác định>
Nhãn được phép dùng và ý nghĩa:
<labelname>: <ý nghĩa>
<labelname>: <ý nghĩa>
Phạm vi cần lọc:
<environment / namespace / workload / service>
Cần xem:
<instant query | range query>
Khoảng thời gian:
<duration>
Hãy trả về:
Một PromQL đề xuất
Giải thích từng selector, hàm và duration
Các giả định đang dùng
Những metric, nhãn hoặc kiểu dữ liệu cần xác minh trong Prometheus
Không tự bịa metric hoặc nhãn ngoài đầu vào
Prompt này không thay thế việc kiểm tra dữ liệu, nhưng giúp bản nháp PromQL dễ review hơn: người dùng biết AI đang dựa vào điều gì và còn thiếu điều gì.
Ví dụ: diễn đạt cửa sổ thời gian trong PromQL
PromQL hỗ trợ biểu thức thời lượng trong range vector selector và trong offset.
Ví dụ trong tài liệu:
promql
rate(httprequeststotal[5m 2])
Biểu thức 5m 2 tương đương cửa sổ mười phút.
PromQL cũng cho phép dùng biểu thức thời lượng với offset:
promql
httprequeststotal offset (1h / 2)
Khi dùng biểu thức thời lượng với offset, biểu thức phải được đặt trong ngoặc. Nếu không có ngoặc, chỉ giá trị thời lượng đầu tiên được dùng cho phép tính offset.
Playbook kiểm chứng query AI đề xuất
1. Chạy ở Table trước
Dán query vào tab Table để xem kết quả tại thời điểm truy vấn.
Mục tiêu ở bước này không chỉ là tránh lỗi cú pháp. Hãy kiểm tra:
Metric có đúng metric bạn đã xác nhận không?
Các series trả về có nằm trong phạm vi vận hành đang điều tra không?
Các nhãn hiển thị có khớp với service, môi trường hoặc workload mong đợi không?
Query có đang trả về tập series quá rộng so với câu hỏi ban đầu không?
Nếu kết quả không đúng phạm vi, hãy sửa đầu vào hoặc selector rồi chạy lại. Đừng chuyển thẳng sang dashboard chỉ vì query đã trả về dữ liệu.
2. Chuyển sang Graph khi cần nhìn xu hướng
Khi cần quan sát biến động theo thời gian, dùng tab Graph.
Range query về bản chất là chạy cùng một biểu thức tại nhiều mốc thời gian cách đều nhau. Vì vậy, hãy xác định rõ bạn đang muốn nhìn:
Một giá trị tại thời điểm hiện tại.
Hay sự thay đổi của giá trị đó trong một khoảng thời gian.
3. Ghi lại giả định đã được xác minh
Sau khi query phù hợp, lưu cùng với ngữ cảnh vận hành:
Metric đã dùng.
Nhãn đã lọc.
Khoảng thời gian.
Loại truy vấn: instant hay range.
Những giả định đã được kiểm tra.
Việc này giúp query dễ review hơn khi được đưa vào dashboard, alert hoặc tài liệu xử lý sự cố.
Cẩn thận với histogram
Prometheus hỗ trợ hai dạng sample chính:
Float sample: một giá trị số thực đơn giản.
Native histogram sample: chứa một histogram đầy đủ, bao gồm count, sum và buckets.
Tài liệu phân biệt native histogram với classic histogram:
Native histogram là histogram sample trong cách dùng thuật ngữ của PromQL.
Classic histogram là một tập time series float, thường có các hậu tố bucket, count và sum.
Khi thực hiện phép toán nhị phân, aggregation hoặc một số hàm áp dụng cho range vector trên native histogram, Prometheus có thể cần hòa giải bucket layout giữa các histogram.
Nếu các bucket layout không tương thích, phần tử kết quả tương ứng có thể bị loại khỏi output và được gắn cảnh báo ở mức warn.
Vì vậy, khi AI đề xuất query liên quan đến histogram, đừng chỉ nhìn biểu đồ. Hãy đọc cả cảnh báo và kiểm tra liệu tập kết quả có thiếu series cần thiết hay không.
Checklist trước khi dùng query
Trước khi đưa một PromQL do AI phác thảo vào dashboard hoặc quy trình vận hành, kiểm tra nhanh:
[ ] Metric đã được xác nhận tồn tại.
[ ] Loại metric đã được xác định hoặc ghi rõ là chưa chắc chắn.
[ ] Label selector phản ánh đúng phạm vi cần quan sát.
[ ] Query đã được chạy ở Table.
[ ] Khi cần xu hướng, query đã được kiểm tra ở Graph.
[ ] Kiểu kết quả phù hợp với instant query hoặc range query.
[ ] Với histogram, đã xem cảnh báo và tập series kết quả.
[ ] Các giả định của AI đã được ghi lại hoặc loại bỏ.
AI có thể giúp giảm thời gian nhớ cú pháp PromQL. Nhưng query chỉ trở thành tín hiệu vận hành đáng tin khi được kiểm chứng bằng metric, nhãn và kết quả trong Prometheus.