Bosh sahifa Wiki LogQL

LogQL

LogQL — Grafana Loki uchun log oqimlarini tanlash, filtrlash, parse qilish va ulardan metric hisoblashga mo‘ljallangan so‘rov tilidir. Uning sintaksisi PromQLga o‘xshash, biroq boshlang‘ich obyekt time series sample emas, label bilan guruhlangan log stream hisoblanadi. So‘rov odatda avval stream selector, keyin pipeline bosqichlaridan tuziladi.

Stream selector

Selector jingalak qavs ichida label matcherlarni beradi: {service="api", environment="prod"}. =, !=, =~ va !~ operatorlari aniq yoki regex moslikni ifodalaydi. Kamida bitta tor matcher query uchun candidate streamlarni kamaytiradi. Faqat bo‘sh qiymatga ham mos keladigan keng regex backendni ko‘p chunk o‘qishga majbur qiladi.

Label selector indeks orqali ishlaydi. Request ID yoki user IDni labelga aylantirish qidiruvni tezlashtirishi mumkin, ammo juda yuqori cardinality yaratadi. Bunday qiymatlar log satrida yoki structured fieldda saqlanib, pipeline bosqichida filterlanadi.

Matn filtrlari

|= satr ichida aniq matn borligini, != yo‘qligini tekshiradi. |~ va !~ regexdan foydalanadi. Arzon aniq filter parsingdan oldin qo‘yilsa keyingi bosqichga kamroq yozuv o‘tadi.

{service="api"} |= "error" | json | status >= 500

Bu so‘rov avval error matnli oqimlarni tanlaydi, keyin JSONni parse qilib status maydonini tekshiradi. Log formati doim JSON bo‘lsa dastlabki matn filtri shart emas; query mazmuniga qarab tanlanadi.

Parser va label pipeline

json, logfmt, regexp va pattern bosqichlari log satridan field chiqaradi. Chiqarilgan qiymatlar query vaqtida label sifatida ishlatiladi, ammo ular ingest indeksidagi stream label bilan bir xil emas. label_format nom yoki qiymatni qayta tuzadi, line_format ko‘rsatiladigan satrni o‘zgartiradi.

Parser xatosi __error__ tizim labelida ko‘rinishi mumkin. Uni jim e’tiborsiz qoldirish format regressiyasini yashiradi. Metric query parser xatolarini filterlashi yoki alohida kuzatishi kerak, chunki noto‘g‘ri raqamni unwrap qilish hisobni buzadi.

Metric so‘rovlar

Range aggregation ma’lum oynadagi log yozuvlaridan qiymat chiqaradi. count_over_time, rate va bytes_over_time log oqimi hajmini hisoblaydi. unwrap parsed raqamni samplega aylantirib, avg_over_time yoki quantile_over_time kabi amallarga beradi.

sum by (service) (rate({environment="prod"} |= "timeout" [5m]))

Bu natija service bo‘yicha timeout loglari tezligini beradi. Log satri soni event soniga teng bo‘lmasa metric noto‘g‘ri talqin qilinishi mumkin; multiline yoki duplicate delivery hisobga olinadi.

Samaradorlik va xavfsizlik

Vaqt oralig‘i, selector va filter tartibi query xarajatini belgilaydi. Keng bir oylik regex qidiruvi ko‘p chunkni skan qiladi. Recording rule yoki metric logdan tez-tez hisoblanadigan stabil signalni oldindan saqlashi mumkin.

Logda maxfiy ma’lumot bo‘lsa LogQL query huquqi ham data access huquqidir. Tenant isolation, datasource permission va audit qo‘llanadi. Dashboard variable regexga qo‘shilganda escaping qilinadi; foydalanuvchi kiritmasi nazoratsiz query operatoriga aylanmaydi.

Unwrapped qiymatlar

unwrap fieldni raqamga aylantirganda duration va bytes birliklari parser orqali normalizatsiya qilinishi mumkin. Noto‘g‘ri formatdagi yozuv __error__ hosil qiladi. Aggregationdan oldin xatoni filterlash natija denominatorini ham o‘zgartiradi; qancha yozuv chiqarib tashlangani alohida ko‘riladi. Quantile log samplelari notekis kelganda event taqsimotini bildiradi, vaqtning uzluksiz o‘lchovini emas.

Query natijasini alertga aylantirganda no data, query error va haqiqiy nol alohida holatdir. Log ingestion kechiksa alert oynasi tugagan hodisani kech ko‘rishi mumkin.

Bog‘liq tushunchalar

Grafana Loki, Log stream, Stream selector, Pipeline, PromQL, Structured logging, Range aggregation