Log конвейерлері: ELK және Loki
1) Неліктен және қашан: логикалау мақсаттары
Бақылау және RCA: дебаг жеделдету, пост-мортем, SLO/SLA бақылау.
Қауіпсіздік және аудит: қол жеткізу іздері, ауытқулар, тергеулер.
Бизнес-метриктер: конверсия, төлем флоу, PSP қателіктері, пайдаланушылардың мінез-құлқы.
Комплаенс: PII сақтау, бүркемелеу, ретеншн саясаты, Legal Hold.
Логтардың түрлері: қосымшалық, инфрақұрылымдық (kubelet, kube-proxy, CNI, ingress), желілік, аудиторлық, төлем, веб-оқиғалар, Nginx/Envoy, БД.
2) Жоғары деңгейлі сәулеттер
А нұсқасы: ELK
Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг
В нұсқасы: Loki
Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг
Гибрид
ELK толық мәтін/фасет бойынша іздеу үшін, Loki арзан масштабталатын сақтау және жылдам греп-ұқсас сұрау үшін; Графанадағы метриктер/трассалармен кореляция.
3) Деректер ағыны және өңдеу деңгейлері
1. Файлдарды жинау: биттік tail, journald, syslog, stdout контейнерлер, HTTP.
2. Байыту: timestamp қалыпқа келтіру, host/pod/namespace, env (prod/stage), release, commit SHA, trace/span id.
3. Парсинг: JSON → flat fields; grok/regex; Nginx/Envoy пішімдері; төлем схемалары (PSP қате кодтары).
4. Сүзу/редакциялау: PII (PAN, CVV, e-mail, мекенжайлар), құпияларды, токендерді кесіп алу.
5. Роутинг: tenant/service/лог-деңгей бойынша; hot/warm/cold; S3/нысан қоймасында.
6. Сақтау және ретеншн: деректер класы бойынша TTL саясаты.
7. Кіру/Талдау/Тәуекелдер.
4) ELK: түйінді шешімдер
4. 1 Logstash/Beats
Жеңіл құрастырушы үшін түйіншектерде Beats/Fluent Bit қолданыңыз, Logstash - орталық ETL (grok, dissect, mutate, geoip, translate) ретінде.
Logstash пулдары: ingest-ETL, security-ETL, payments-ETL - жүктемелерді оқшаулау үшін.
4. 2 Elasticsearch
Шардарлау: бір шардқа 20-50 ГБ ~ бағдарланыңыз; «шард-жарылыстан» аулақ болыңыз.
Индекс стратегиясы: 'logs- <tenant> - <service> -YYYY. MM. DD 'немесе күн-ағымдары; rollover өлшемі/уақыты бойынша.
- hot: SSD, 1-7 күн; warm: HDD, 7-30 күн; cold: көлемді; frozen: неғұрлым баяу қол жеткізумен ең төменгі құн.
- Мэппингтер: өрістерді қатаң түрде типтеңіз, 'fielddata' дегенді шектеңіз және динамикалық өрістер жасаңыз.
- Кэш және сұраулар: keyword өрістері бойынша сүзгілер, агрегаттар - ұқыпты; жоғары жиілікті іздеу үшін pin-to-hot.
4. 3 Kibana
Көп теңдік кеңістігі (Spaces).
Saved searches, Lens/TSVB, threshold/метрикалық-алерта.
Индекс-паттерндер бойынша RBAC ('logs-tenant-').
5) Loki: негізгі шешімдер
5. 1 Лейблдер үлгісі
Лейблдер - Loki «индексі». Төмен түбегейлікті пайдаланыңыз: 'cluster', 'namespace', 'app', 'level', 'env', 'tenant'.
Жоғары түбегейлі өрістер (uid, request_id) - жолда; сұрағанда LogQL '=', '| json', '| regexp' арқылы алыңыз.
5. 2 Компоненттер
Promtail: сбор stdout, files, journald; парсерлер (JSON, regex, cri).
Distributor/Ingester/Querier/Query-frontend: рөлдер бойынша масштабтау; сұрауларды кэштеу.
Чанк-логтарды ұзақ уақыт сақтау үшін Object storage (S3/GCS/MinIO).
5. 3 LogQL тәсілдері
Жылдам grep: '{app = «payments», level =» error»} | = «declined»'
Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()`
Өлшемдермен корреляция: 'rate ({app = «nginx»} | = «200» [5m])'
6) ELK vs Loki салыстыру (қысқаша)
Іздеу/агрегациялау: ELK күрделі толық мәтінді және фасетті сұраулар үшін күштірек; Loki - grep-like, жылдам және арзан.
Құны: Loki көп жағдайда үлкен көлемде арзан (объектілік сақтау орны + кіші индекс).
Пайдалану күрделілігі: ELK индекстер/ILM, Джаву-хиптер бойынша тәртіпті талап етеді; Loki - лейблдер бойынша пәндер.
Метриктермен/трассалармен корреляция: Loki табиғи түрде Grafana/OTel стекымен интеграцияланады; ELK да біледі, бірақ көбінесе интеграция арқылы.
7) Қауіпсіздік және комплаенс
PII-редакция шетінде (shipper): PAN, e-mail, телефон, мекенжайлар, белгілерді жасырыңыз.
TLS in-transit, mTLS агенттер мен шиналар арасында.
RBAC: per-tenant индекстер/лейблдер; неймспейстерді/кеңістіктерді оқшаулау.
Secrets hygiene: құпиясыз ауыспалы орта, жеке құпия менеджерлер.
Legal Hold: сегменттерді/индекстерді мұздату тетігі; даулы кезеңдер үшін write-once.
Жою/ретеншн: деректер кластары бойынша TTL саясаты (prod/stateful/төлемдер/аудит).
Логтарға қатынау трейлері.
8) Сенімділік және өткізу қабілеті
Буферлеу және backpressure: агенттердегі жергілікті файлдар/дискілер; экспоненциалды backoff ретрайлері.
Idempotency: 'ingest _ id '/' log _ id' өрістері қайталау кезінде қайталануды болдырмау үшін.
HA: Loki ES-шеберлері/ингестерлері үшін ең аз 3 нод; antiaffinity по AZ.
tenant/service бойынша квоталар және rate-limits; логирлеудің «дауылынан» қорғау.
Логтар деңгейінің схемасы: 'ERROR' шектеулі, 'DEBUG' тек динамикалық жалаушалар арқылы уақытша.
9) Өнімділік және тюнинг
ELK:- JVM heap 50% RAM (бірақ ≤ ~ 30-32 ГБ), page cache маңызды.
- Ақылды rollover (20-50 ГБ/шард), ingest-индекстер үшін 'refresh _ interval' ↑.
- Logstash «ауыр» grok болдырмау; мүмкіндігінше көзде JSON-логин жасау.
- Дұрыс лейбл-сет - жылдамдықтың кілті.
- Үлкен күбілер → сақтау арзан, бірақ есте сақтау қымбат ingester; теңгеріңіз.
- Қайта сұрау үшін Query-frontend + кэш (мем/Redis).
10) Логтар үшін финОпс (құны)
Өрістердің/лейблдердің түбегейлілігін төмендету.
DEBUG сэмплингі және динамикалық «лог-свичтер».
Ротация: қысқа hot, объектіге ұзын cold.
Дедупликация және шоғырландырылған хабарлар (batch).
Сирек пайдаланылатын логтарды арзан сақтау сыныптарына мұрағаттау.
Құнның дашборды: көлем/күн-ағындар/лейблдер/индекстер/тенанттар.
11) Өлшегіштермен және трассалармен корреляция (Observability 3-в-1)
Әрбір журналға Trace-ID/Span-ID (API шлюздер мен сервистерде middleware).
OpenTelemetry: бірыңғай контексті; экспорттаушылар Tempo/Jaeger, метриктер Prometheus/Mimir, логтар - Loki/ELK.
Жедел сценарийлер: «метрика бойынша алерт → тиісті логиге секіру → трассаға секіру».
12) Мульти-тенанттық және оқшаулау
Namespace-based оқшаулау (K8s labels), жеке индекс-паттерндер/лейблдер 'tenant'.
Алерттерді/дашбордтарды/ретеншнаны тенант бойынша бөлу.
Тұтыну бойынша биллинг: ingest көлемі, storage, сұрау салулар.
13) Конвейердің өзіне арналған мониторинг және SLO
SLO ingest: «99. 9% логтар жеткізілді <X сек".
SLO іздеу: «p95 сұрау <Y сек».
Техникалық метриктер: queue depth, dropped logs, reprocess rate, error rate парсерлер, істен шығу ingester/ES нод.
14) Өрістетудің үлгілік схемалары
Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki.
Self-hosted K8s: ES/Loki үшін StatefulSets, AZ бойынша anti-affinity, PersistentVolumes, объектілік сақтау орны.
Edge-агенттер (өңірлердегі қосымшалар): жергілікті буфер + орталық ingest TLS арнасы.
15) Конфигурация мысалдары
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 және бүркемелеу)
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) Алертинг және дашбордтар (шаблондар)
Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram.
Nginx/Envoy-дағы 5xx қарқыны; агенттерден ingest дроп; іздеу latency өсуі.
- Сервистер/тенанттар бойынша логтардың көлемі.
- Қателердің топ-үлгілері (коды/ерекшелігі/endpoint).
- Сақтау орнының ретеншн/класы бойынша құны.
17) Сапаны тексеру (лог-QA)
Логин жасау келісімшарттары: JSON пішімі, міндетті өрістер ('ts', 'level', 'service', 'env', 'trace _ id', 'msg').
CI логтар линтері: келісусіз жоғары түбегейлі жаңа өрістерге тыйым салу.
Канареялық сервистер: регрессияны ерте анықтау үшін эталондық логтарды генерациялау.
18) Жиі қателер және қарсы үлгілер
Жоғары кардинальды Loki лейблдері ('user _ id', 'request _ id') → жады жарылысы.
Мэппингсіз ES динамикалық өрістер → «Индекстердің жарылысы».
DEBUG өнімдегі «мәңгі». Жалаулар мен TTL қосыңыз.
PII-редакцияның болмауы.
Бір ортақ «тұтас» конвейер барлығы үшін - домендер бойынша сегменттер жақсы.
19) Енгізу жоспары (итерациялармен)
1. MVP: агенттер + бір пайплайн (қосымшалар), базалық дашбордтар, PII-редакция.
2. Кеңейту: желілік/инфра-логтар, SLO алерталары, трассалармен кореляция.
3. ФинОпс: ретеншн-матрица, құн есебі, лейблдерді/индекстерді оңтайландыру.
4. Мульти-тенант: кеңістік, RBAC, тұтыну бойынша биллинг.
5. Сенімділік: HA, disaster-drills, Legal Hold.
20) Өнімге жіберу чек-парағы
- JSON пішімі және барлық сервистердегі міндетті өрістер.
- Агент/ingest бойынша PII бүркемелеу.
- Ретеншн/ILM немесе bucket-lifecycle саясаты.
- RBAC/кеңістіктер/тенанттар.
- SLO ingest/іздеу және тәуекелдер.
- Канареялық логтар және жүктемені тестілеу.
- Құн дашбордтары және сервистердің иелері бойынша есеп.
- Runbooks: «ingest түссе не істеу керек/іздеу баяу/қызыл шарлар».
21) Шағын FAQ
Не таңдау керек - ELK немесе Loki?