Log konveyerlari: ELK va Loki
1) Nima uchun va qachon: logografiya maqsadlari
Kuzatish va RCA: tezlashuv, post-mortem, SLO/SLA nazorati.
Xavfsizlik va audit: kirish izlari, anomaliyalar, tekshiruvlar.
Biznes metrikalari: konvertatsiya, to’lov floalari, PSP xatolari, foydalanuvchilarning xulq-atvori.
Komplayens: PIIni saqlash, yashirish, retenshn siyosati, Legal Hold.
Log turlari: ilova, infratuzilma (kubelet, kube-proxy, CNI, ingress), tarmoq, audit, to’lov, veb-tadbirlar, Nginx/Envoy, DB.
2) Yuqori darajadagi arxitektura
A varianti: ELK
Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг
B varianti: Loki
Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг
Gibrid
ELK to’liq matn/faset bo’yicha qidirish uchun, Loki arzon ko’lamli saqlash va grapga o’xshash tezkor so’rovlar uchun; Grafana metriklar/trassalar bilan korelatsiya.
3) Ma’lumotlar oqimi va ishlov berish darajasi
1. Toʻplash: bitbaytli tail fayllar, journald, syslog, stdout konteynerlar, HTTP.
2. Boyitish: timestamp normallashtirish, host/pod/namespace, env (prod/stage), release, commit SHA, trace/span id.
3. Parsing: JSON → flat fields; grok/regex; Nginx/Envoy formatlari; to’lov sxemalari (PSP xato kodlari).
4. Filtrlash/tahrirlash: PII (PAN, CVV, e-mail, manzillar), sirlar, tokenlarni kesib tashlash.
5. Routing: tenant/service/log-darajasi bo’yicha; hot/warm/cold; S3/obyekt omboriga.
6. Saqlash va retenshn: maʼlumotlar sinflari boʻyicha TTL siyosati.
7. Kirish/Tahlillar/Alertlar.
4) ELK: asosiy yechimlar
4. 1 Logstash/Beats
Beats/Fluent Bit’dan engil yig’uvchi uchun, Logstash’dan markaziy ETL (grok, dissect, mutate, geoip, translate) sifatida foydalaning.
Logstash pullari: ingest-ETL, security-ETL, payments-ETL - yuklarni izolyatsiya qilish uchun.
4. 2 Elasticsearch
Shardalash: har bir shard uchun 20-50 GB ~ yo’naltiring; «shard-portlashdan» qoching.
Indekslar strategiyasi:’logs- <tenant> - <service> -YYYY. MM. DD’yoki data-strimlar; rollover hajmi/vaqti boʻyicha.
- hot: SSD, 1-7 kun; warm: HDD, 7-30 kun; cold: hajmli; frozen: sekinroq kiriladigan minimal qiymat.
- Mappinglar: maydonlarni qattiqlashtiring, «fielddata» ni cheklang va dinamik maydonlarni yarating.
- Kesh va so’rovlar: keyword bo’yicha filtrlar, agregatlar - ehtiyotkorlik bilan; yuqori chastotali qidiruv uchun pin-to-hot.
4. 3 Kibana
Ko’p tenantlik uchun bo’shliqlar.
Saved searches, Lens/TSVB, threshold/metrik-alertlar.
indeks-patternlar bo’yicha RBAC (’logs-tenant-’).
5) Loki: asosiy yechimlar
5. 1 Yorliqlar modeli
Yorliqlar Loki indeksidir. ’cluster’,’namespace’,’app’,’level’,’env’,’tenant’kabi past darajadan foydalaning.
Yuqori kardinallikka ega bo’lgan dalalar (uid, request_id) - satrda; so’ralganda LogQL’=’,’| json’,’| regexp’orqali chiqarib oling.
5. 2 Komponentlar
Promtail: сбор stdout, files, journald; parserlar (JSON, regex, cri).
Distributor/Ingester/Querier/Query-frontend: rollar bo’yicha masshtablash; soʻrovlarni keshlash.
Object storage (S3/GCS/MinIO) chank-loglarni uzoq vaqt saqlash uchun.
5. 3 LogQL usullari
Tezkor grep: ’{app = «payments», level =» error»} | = «declined» ’
Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()`
Metriklar bilan korrelyatsiya: ’rate ({app = «nginx»} | = «200» [5m]) ’
6) ELK vs Loki taqqoslash (qisqacha)
Izlash/agregatsiyalar: murakkab to’liq matnli va fasetli so’rovlar uchun ELK kuchliroq; Loki - grep-like, tezkor va arzon.
Narxi: Loki ko’pincha katta hajmlarda arzonroq (obyekt ombori + kichik indeks).
Foydalanish murakkabligi: ELK indekslar/ILM, Javhiplar bo’yicha intizomni talab qiladi; Loki - yorliqlar bo’yicha fanlar.
Metriklar/trassalar bilan korrelyatsiya: Loki tabiiy ravishda Grafana/OTel stakasi bilan integratsiyalashadi; ELK ham biladi, lekin ko’pincha integratsiya orqali.
7) Xavfsizlik va komplayens
PII tahriri (shipper): PAN, e-mail, telefon, manzil, tokenlarni yashiring.
TLS in-transit, mTLS agentlar va shinalar o’rtasida.
RBAC: per-tenant indekslar/leybllar; neyspeyslar/bo’shliqlarni izolyatsiya qilish.
Secrets hygiene: sirsiz o’zgaruvchan muhit, alohida maxfiy menejerlar.
Legal Hold: segmentlarni/indekslarni muzlatish mexanizmi; bahsli davrlar uchun write-once.
Olib tashlash/retenshn: TTLning maʼlumot klasslari boʻyicha siyosati (prod/stateful/toʻlovlar/audit).
Loglarga kirish uchun audit-treyllar.
8) Ishonchlilik va o’tkazish qobiliyati
Buferlash va backpressure: agentlardagi lokal fayllar/disklar; eksponensial backoff retraisi.
Idempotency: takrorlashda dubllarni oldini olish uchun’ingest _ id ’/’ log _ id’maydonlari.
HA: Loki ES-ustalari/ingesterlari uchun kamida 3 nod; antiaffinity по AZ.
Kvotalar va tenant/service bo’yicha rate-limits; logirovkaning «bo’ronlari» dan himoya qilish.
Loglar darajasi sxemasi:’ERROR’cheklangan,’DEBUG’faqat vaqtincha dinamik bayroqlar orqali.
9) Unumdorlik va tyuning
ELK:- JVM heap 50% RAM (lekin ≤ ~ 30-32 GB), page cache muhimdir.
- Aqlli rollover (20-50 GB/shard),’refresh _ interval’↑ ingest-indekslar uchun.
- Logstashda «og’ir» groklardan qochish; iloji bo’lsa manbada JSON-loging.
- To’g’ri yorliq to’plami - tezlikning kalitidir.
- Katta piyola → saqlash arzonroq, lekin xotirasi qimmatroq ingester; muvozanatni saqlang.
- Qayta soʻrash uchun Query-frontend + kesh (mem/Redis).
10) Loglar uchun finOps (qiymati)
Maydonlarning/yorliqlarning kardinalligini kamaytirish.
DEBUG sampling va dinamik «log-svichi».
Rotatsiya: qisqa hot, uzun cold.
Deduplikatsiya va konsolidatsiyalangan xabarlar (batch).
Kam ishlatiladigan loglarni arzon saqlash sinflariga arxivlash.
Qiymatning dashbordi: hajmi/data-strimlari/leybllari/indekslari/tenantlari.
11) Metriklar va trassalar bilan korrelyatsiya (Observability 3-v-1)
Trace-ID/Span-ID har bir log (API shlyuzlari va servislarida middleware).
OpenTelemetry: yagona kontekst; eksportchilar - Tempo/Jaeger, metriklar - Prometheus/Mimir, loglar - Loki/ELK.
Tezkor stsenariylar: «metrika bo’yicha alert → tegishli loglarga sakrash → trassaga sakrash».
12) Multi-tenantlik va izolyatsiya
Namespace-based izolyatsiya (K8s labels), indeks-patternlar/leybllar’tenant’.
Alertlarni/dashbordlarni/retenshnani tenant bo’yicha bo’lish.
Iste’mol bo’yicha billing: ingest hajmi, storage, so’rovlar.
13) Konveyerning o’zi uchun monitoring va SLO
SLO ingest: «99. 9% log yetkazib berildi <X sek".
SLO qidirish: «p95 soʻrovlar <Y sek».
Texnik metriklar: queue depth, dropped logs, reprocess rate, error rate parserlar, nosozlik ingester/ES nod.
14) Joylashtirishning namunaviy sxemalari
Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki.
Self-hosted K8s: ES/Loki uchun StatefulSets, AZ uchun anti-affinity, PersistentVolumes, obyekt ombori.
Edge agentlari (hududlardagi ilovalar): lokal bufer + markaziy ingest uchun TLS kanali.
15) Konfiguratsiya namunalari
15. 1 Promtail (K8s, CRI JSON)
yaml scrape_configs:
- job_name: kubernetes-pods kubernetes_sd_configs:
- role: pod pipeline_stages:
- cri: {}
- json:
expressions:
level: level msg: message trace: trace_id
- labels:
level:
app:
namespace:
- match:
selector: '{namespace="prod"}'
stages:
- regex:
expression: '(?P<pan>\b[0-9]{12,19}\b)'
- replace:
expression: '(?P<pan>\b[0-9]{12,19}\b)'
replace: '[REDACTED_PAN]'
relabel_configs:
- action: replace source_labels: [__meta_kubernetes_pod_label_app]
target_label: app
- action: replace source_labels: [__meta_kubernetes_namespace]
target_label: namespace
- action: replace source_labels: [__meta_kubernetes_pod_node_name]
target_label: node
15. 2 Logstash (ingest va niqoblash)
ruby input {
beats { port => 5044 }
}
filter {
json { source => "message" skip_on_invalid_json => true }
mutate { add_field => { "env" => "%{[kubernetes][labels][env]}" } }
PII mutate {
gsub => [
"message", "\b[0-9]{12,19}\b", "[REDACTED_PAN]",
"message", "(?i)(authorization: Bearer)([A-Za-z0-9\.\-_]+)", "\1[REDACTED_TOKEN]"
]
}
}
output {
elasticsearch {
hosts => ["https://es-hot-1:9200","https://es-hot-2:9200"]
index => "logs-%{[fields][tenant]}-%{[app]}-%{+YYYY. MM. dd}"
ilm_enabled => true ssl => true cacert => "/etc/ssl/certs/ca. crt"
user => "${ES_USER}"
password => "${ES_PASS}"
}
}
16) Alerting va dashbordlar (shablonlar)
Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram.
Nginx/Envoy da 5xx portlashi; agentlarda ingest drop; qidirish latency oʻsishi.
- Servislar/tenantlar bo’yicha loglar hajmi.
- Xatolarning top-patterni (kod/istisno/endpoint).
- Omborxonaning retenshn/klasslari bo’yicha qiymati.
17) Sifat tekshiruvi (log-QA)
Logotip shartnomalari: JSON formati, majburiy maydonlar (’ts’,’level’,’service’,’env’,’trace _ id’,’msg’).
CI log linteri: Yuqori kardinallikka ega yangi maydonlarni kelishmasdan taqiqlash.
Kanareya xizmatlari: regressiyalarni erta aniqlash uchun etalon loglarini ishlab chiqarish.
18) Tez-tez xatolar va anti-patternlar
Yuqori kardinallikka ega Loki yorliqlari (’user _ id’,’request _ id’) → xotira portlashi.
Mempingsiz ES dinamik maydonlari → «indekslar portlashi».
DEBUG «abadiy» naslda. Bayroqlar va TTL bilan yoqing.
PII-tahrirning yo’qligi.
Hamma narsa uchun bitta umumiy «monolit» konveyer - domen bo’yicha eng yaxshi segmentlar.
19) Joriy etish rejasi (iteratsiyalar)
1. MVP: agentlar + bitta paypline (ilovalar), bazaviy dashbordlar, PII tahriri.
2. Kengaytirish: tarmoq/infra-loglar, SLO alertlari, trassalar bilan korelatsiya.
3. FinOps: retenshn-matritsasi, qiymat hisoboti, yorliqlar/indekslarni optimallashtirish.
4. Multi-tenant: makonlar, RBAC, iste’mol bo’yicha billing.
5. Ishonchlilik: HA, disaster-drills, Legal Hold.
20) Prodga ishga tushirish chek-varaqasi
- JSON formati va barcha xizmatlardagi majburiy maydonlar.
- Agent/ingest’da PIIni yashirish.
- Retenshn/ILM yoki bucket-lifecycle siyosati.
- RBAC/fazolar/tenantlar.
- SLO ingest/qidiruv va alertlar.
- Kanareykali loglar va yuk sinovidan o’tish.
- Dashbordlar va servis egalari bo’yicha hisobot.
- Runbooks: «agar ingest/sekin qidirish/qizil sharlar tushsa nima qilish kerak».
21) Mini-FAQ
Nima tanlash kerak - ELK yoki Loki?