Log konveyerləri: ELK və Loki
1) Nə üçün və nə zaman: loging məqsədləri
Müşahidə və RCA: debag sürətləndirilməsi, post-mortem, SLO/SLA nəzarət.
Təhlükəsizlik və audit: giriş izləri, anomaliyalar, araşdırmalar.
Biznes metriklər: dönüşüm, ödəniş flow, PSP səhvləri, istifadəçi davranışı.
Komplayens: saxlama, PII maskalama, Retenshn siyasəti, Legal Hold.
Log növləri: ərizə, infrastruktur (kubelet, kube-proxy, CNI, ingress), şəbəkə, audit, ödəniş, veb hadisələr, Nginx/Envoy, DB.
2) Yüksək səviyyəli arxitekturalar
Seçimi A: ELK
Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг
Seçimi B: Loki
Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг
Hibrid
ELK tam mətn/faset axtarış, Loki ucuz miqyaslı saxlama və sürətli grep oxşar sorğular üçün; Grafana metrik/trek ilə korelasiya.
3) Məlumat axını və emal səviyyələri
1. Toplama: Bit tail faylları, journald, syslog, stdout konteynerləri, HTTP.
2. Zənginləşdirmə: normallaşdırma timestamp, host/pod/namespace, env (prod/stage), release, commit SHA, trace/span id.
3. Parsinq: JSON → flat fields; grok/regex; Nginx/Envoy formatları; ödəniş sxemləri (PSP səhv kodları).
4. Filtrasiya/redaktə: PII (PAN, CVV, e-mail, ünvanlar), sirləri, tokenləri kəsin.
5. Routing: tenant/service/log səviyyəsinə görə; hot/warm/cold; S3/obyekt saxlama.
6. Saxlama və retenshn: məlumat sinifləri üzrə TTL siyasəti.
7. Access/Analytics/Alerts.
4) ELK: əsas həllər
4. 1 Logstash/Beats
Beats/Fluent Bit-dən yüngül toplayıcı üçün istifadə edin, Logstash - mərkəzi ETL (grok, dissect, mutate, geoip, translate) kimi.
Logstash hovuzları: ingest-ETL, security-ETL, payments-ETL - yüklərin izolyasiyası üçün.
4. 2 Elasticsearch
Şardlaşdırma: Şard başına 20-50 GB ~ istiqamətləndirin; «Şard partlayışından» qaçın.
İndeks strategiyası: 'logs- <tenant> - <service> -YYYY. MM. DD 'və ya məlumat axını; rollover ölçüsü/vaxt.
- hot: SSD, 1-7 gün; warm: HDD, 7-30 gün; cold: həcmli; frozen: daha yavaş giriş ilə minimum dəyəri.
- Mappinqlər: sahələri ciddi şəkildə tipizə edin, 'fielddata' və dinamik sahələrin yaradılmasını məhdudlaşdırın.
- Cache və sorğular: keyword sahələrində filtrlər, aqreqatlar - səliqəli; yüksək tezlikli axtarış üçün pin-to-hot.
4. 3 Kibana
Çox tenantlıq üçün boşluqlar.
Saved searches, Lens/TSVB, threshold/metrik-alert.
RBAC indeks-nümunələri ('logs-tenant-').
5) Loki: əsas həllər
5. 1 Etiket modeli
Etiketlər Loki 'nin «indeksidir». Aşağı kardinallığı istifadə edin: 'cluster', 'namespace', 'app', 'level', 'env', 'tenant'.
Yüksək kardinallığı olan sahələr (uid, request_id) - sətirdə; LogQL '| =', '| json', '| regexp' vasitəsilə sorğu zamanı çıxarın.
5. 2 Komponentlər
Promtail: сбор stdout, files, journald; parserlər (JSON, regex, cri).
Distributor/Ingester/Querier/Query-frontend: rolları ölçmək; caching sorğular.
Object storage (S3/GCS/MinIO) uzun müddət chank-log saxlamaq üçün.
5. 3 LogQL üsulları
Sürətli grep: '{app = «payments», level =» error»} | = «declined»'
Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()`
Metrlərlə korrelyasiya: 'rate ({app = «nginx»} | = «200» [5m])'
6) ELK vs Loki müqayisə (qısaca)
Axtarış/aqreqasiya: ELK mürəkkəb tam mətn və faset sorğular üçün daha güclü; Loki - grep-like, sürətli və ucuz.
Qiymət: Loki çox vaxt böyük həcmdə daha ucuzdur (obyekt saxlama + daha kiçik indeks).
Əməliyyat mürəkkəbliyi: ELK/ILM, Cavu-hip indeksləri üzrə nizam-intizam tələb edir; Loki - etiket fənləri.
Metrik/treklərlə korrelyasiya: Loki təbii olaraq Grafana/OTel yığınına inteqrasiya edir; ELK da bacarır, lakin daha çox inteqrasiya yolu ilə.
7) Təhlükəsizlik və uyğunluq
Kənarda PII redaktəsi (shipper): PAN, e-mail, telefon, ünvanlar, tokenləri maskalayın.
TLS in-tranzit, agentlər və şinlər arasında mTLS.
RBAC: per-tenant indekslər/etiketlər; qeyri-space/məkan izolyasiya.
Secrets hygiene: gizli olmayan mühit dəyişənləri, ayrı-ayrı gizli menecerlər.
Legal Hold: seqmentlərin/indekslərin dondurulması mexanizmi; mübahisəli dövrlər üçün write-once.
Data sinifləri üzrə TTL siyasəti (prod/stateful/ödənişlər/audit).
Giriş audit-treyleri.
8) Etibarlılıq və ötürmə qabiliyyəti
Tamponlama və backpressure: agentlərdə yerli fayllar/disklər; eksponensial backoff ilə retrai.
Idempotency: 'ingest _ id '/' log _ id' sahələri təkrarlandıqda dublların qarşısını almaq üçün.
HA: ES-master/Loki inhesters üçün minimum 3 nod; antiaffinity по AZ.
Kvotalar və rate-limits tenant/service; «fırtına» log qorunması.
Giriş səviyyəsi sxemi: 'ERROR' məhdud, 'DEBUG' yalnız dinamik bayraqlar vasitəsilə müvəqqəti olaraq.
9) Performans və sazlama
ELK:- JVM heap 50% RAM (lakin ≤ ~ 30-32 GB), page cache vacibdir.
- Ağıllı rollover (20-50 GB/şard), 'refresh _ interval' ↑ ingest-indekslər üçün.
- Logstash «ağır» grok qarşısını almaq; mümkünsə mənbədə JSON-loqinq.
- Düzgün etiket seti sürətin açarıdır.
- Böyük fincan → daha ucuz saxlama, lakin daha bahalı yaddaş ingester; balans.
- Query-frontend + cache (mem/Redis) təkrar sorğular üçün.
10) Log üçün FinOps (dəyəri)
Sahələrin/etiketlərin kardinallığının azaldılması.
DEBUG sampling və dinamik «log-sviçalar».
Rotasiya: qısa isti, uzun cold bir obyekt.
Deduplikasiya və konsolidasiya mesajları (batch).
Nadir hallarda istifadə olunan logları ucuz saxlama siniflərinə arxivləşdirin.
Dashboard dəyəri: həcmi/data-stream/etiket/indekslər/tenant.
11) Metrlərlə və marşrutlarla korrelyasiya (Observability 3-in-1)
Trace-ID/Span-ID hər log (API şlüzlərində və xidmətlərində orta ölçülü).
OpenTelemetry: vahid kontekst; Tempo/Jaeger ixracatçıları, Prometheus/Mimir metriklər, Loki/ELK log.
Sürətli ssenarilər: «metrika ilə alert → müvafiq log atlama → trek atlama».
12) Çox tenant və izolyasiya
Namespace-based izolyasiya (K8s labels), fərdi indeks-nümunələr/etiket 'tenant'.
Tenant üzrə alertlərin/daşbordların/retenşnaların bölünməsi.
İstehlak Billing: ingest həcmi, storage, sorğular.
13) konveyer özü üçün monitorinq və SLO
SLO ingest: «99. 9% log çatdırıldı <X san".
SLO axtarış: «p95 sorğu <Y san».
Texniki metriklər: queue depth, dropped logs, reprocess rate, error rate parsers, nasazlıq ingester/ES nod.
14) Tipik yerləşdirmə sxemləri
Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki.
Self-hosted K8s: StatefulSets üçün ES/Loki, anti-affinity AZ, PersistentVolumes, obyekt saxlama.
Edge agentləri (regionlarda applications): yerli bufer + TLS kanal mərkəzi ingest.
15) Konfiqurasiya nümunələri
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 və maskalama)
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) Alertinq və daşbordlar (şablonlar)
Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram.
Nginx/Envoy 5xx sıçrayış; agentlərdə ingest drop; axtarış latency artım.
- Xidmətlər/tenantlar üzrə qeydlərin həcmi.
- Üst səhv nümunələri (kod/istisna/endpoint).
- Retrenshn/saxlama sinifləri üzrə qiymət.
17) Keyfiyyət yoxlamaları (log-QA)
Log müqavilələri: JSON formatı, məcburi sahələr ('ts', 'level', 'service', 'env', 'trace _ id', 'msg').
CI log linter: koordinasiya olmadan yüksək kardinallığı ilə yeni sahələri qadağan.
Kanarya xidmətləri: reqressiyaların erkən aşkarlanması üçün istinad yuvalarının yaradılması.
18) Tez-tez səhvlər və anti-nümunələr
Loki etiketləri ('user _ id', 'request _ id') → yaddaş partlayışı.
Mapping olmadan ES dinamik sahələr → «partlayış indeksləri».
DEBUG «əbədi». Bayraqlara və TTL ilə qoşun.
PII redaksiyasının olmaması.
Hər şey üçün bir ümumi «monolit» konveyer - domenlər üzrə ən yaxşı seqmentlər.
19) Tətbiq planı (iterasiya)
1. MVP: agentlər + bir paypline (proqramlar), baza daşbordları, PII redaksiyası.
2. Genişləndirilməsi: şəbəkə/infra-loqlar, SLO alertləri, yollarla korelasiya.
3. FinOps: retenshn matrisi, dəyər hesabatı, etiket/indekslərin optimallaşdırılması.
4. Multi-tenant: boşluqlar, RBAC, istehlak billing.
5. Etibarlılıq: HA, disaster-drills, Legal Hold.
20) Prod-da başlanğıc çek siyahısı
- JSON formatı və bütün xidmətlərdə məcburi sahələr.
- Agent/ingest PII maskalamaq.
- Retenshn/ILM və ya bucket-lifecycle siyasəti.
- RBAC/fəza/tenant.
- SLO ingest/axtarış və alert.
- Kanarya loads və yük test qaçış.
- Dashboard dəyəri və xidmət sahibləri haqqında hesabat.
- Runbooks: «ingest/yavaş axtarış/qırmızı toplar düşdükdə nə etmək lazımdır».
21) Mini-FAQ
Seçmək üçün nə - ELK və ya Loki?