Peta dunia

 

EN: Read in English

Dunia O4: Diari & Satu Pesanan

Asas Loki dan LogQL

Anda akan belajar: pilih diari ikut labelnya dan tapis barisnya dengan LogQL.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Prometheus 3 pada 1 Nov 2026

Masalahnya

Lima servis simpan lima diari, di lima mesin. Satu bayaran tamat masa entah di mana. Nak mula dari mana?

Pilih satu jawapan.

Tengok

bash
logcli labels
app
service_name
logcli labels app
kedai-api
kedai-pay
logcli labels senaraikan label app dan service_name. logcli labels app senaraikan kedai-api dan kedai-pay.

Loki: Stor log Grafana. Ia indeks label setiap diari sahaja, bukan setiap perkataan, jadi ia kekal kecil dan murah. simpan setiap diari di satu rak. Ia indeks label sahaja, contohnya app. Bukan setiap perkataan.

Cuba

Minta baris kedai-api yang ada “timeout”. Ketik kepingan mengikut urutan.

Ketik kepingan ikut turutan yang betul.

…

Teka

Baris mana yang {app="kedai-api"} | json | level="error" pulangkan?

0 daripada 1 dijumpai

LogQL: Bahasa query Loki. Pilih diari ikut label dalam kurungan, kemudian tapis baris: {app="kedai-api"} |= "timeout". dibaca macam paip. | json tukar medan jadi label. Kemudian anda boleh tapis padanya.

Semak

bash
logcli query --quiet '{app="kedai-api"} |= "timeout"'
2026-11-01T17:45:22Z {} {"level":"error","msg":"payment timeout","order_id":"A1041","duration_ms":3000,"trace_id":"3c9a51e0b7d24f6e9a18c2d4e6f80b15"}
logcli query --quiet '{app="kedai-api"} | json | level="error"'
2026-11-01T17:45:22Z {} {"level":"error","msg":"payment timeout","order_id":"A1041","duration_ms":3000,"trace_id":"3c9a51e0b7d24f6e9a18c2d4e6f80b15"}
Loki sebenar pulangkan baris yang sama untuk kedua-dua query: payment timeout untuk pesanan A1041 pada 17:45:22.

Loki 3.7 sebenar setuju: satu baris, dua cara bertanya. Perhatikan trace_idnya. Anda akan perlukannya nanti.

Semak

parse error : queries require at least one regexp or equality matcher that does not have an empty-compatible value. For instance, app=~".*" does not meet this requirement, but app=~".+" will

Anda minta {app=~".*"}: “semua diari”. Loki tolak. Pembetulan mana yang berfungsi?

Pilih satu jawapan.

Anda berjaya!

Kini anda boleh pilih diari ikut label dan tapis barisnya dengan LogQL.

Nak tahu lebih (pilihan)

LogQL boleh mengira juga: sum by (app) (count_over_time({app=~"kedai-.*"} | json | level=~"error|warn" [10m])) kira baris bermasalah setiap app. Kekalkan label sedikit dan tetap, contohnya app. Jangan letak order_id dalam label: setiap nilai buat log stream: Satu diari dalam Loki: semua baris dengan set label yang sama. Terlalu banyak nilai label buat terlalu banyak diari. baharu.

Misi sebenar

  1. docker network create logs-try
  2. docker run -d --name loki-try --network logs-try -p 3100:3100 grafana/loki:3.7.9
  3. curl -s -H "Content-Type: application/json" -X POST http://localhost:3100/loki/api/v1/push --data-raw "{\"streams\":[{\"stream\":{\"app\":\"try\"},\"values\":[[\"$(date +%s)000000000\",\"hello loki\"]]}]}"
  4. docker run --rm --network logs-try grafana/logcli:3.7.9 --addr=http://loki-try:3100 query --quiet '{app="try"}'
  5. docker rm -f loki-try && docker network rm logs-try

0 daripada 5 langkah siap · Tanda anda disimpan.