GH GambleHub

Voqealarni loglash va izlash

Voqealarni loglash va izlash

1) Maqsad va ramka

Loglar va treyslar - kuzatish uchun poydevor.
Loglar «nima boʻldi» va «qanday kontekstda» deb javob berishadi.
Treyslar «qayerda va nima uchun sekin/xato» deb javob berishadi.

Asosiy tamoyillar:
  • Structured by default (JSON); Trace-first: har bir log’trace _ id ’/’ span _ id’ga bogʻlanadi.
  • Minimal shovqin, maksimal signal: darajalar, sampling, anti-kardinallik.
  • Xavfsizlik va maxfiylik: niqoblash, tahrir qilish, kirishni chegaralash.
  • Loglar va hodisalarning versionlangan sxemalari.

2) Voqealar taksonomiyasi

Oqimlar va indekslarni belgilangan manzilga ajrating:

1. Texnik loglar (runtime, xatolar, tarmoq taymautlari, retralar).

2. Biznes hodisalar (ro’yxatdan o’tish, depozit, stavka, xulosa, KYC bosqichi) - «pul» yo’llari bo’yicha oziq-ovqat tahlillari va hodisalar uchun yaroqlidir.

3. Audit (kim/qachon o’zgartirdi: konfigurlar, kirish joylari, bayroqlar, limitlar) - o’zgarmas jurnal.

4. Xavfsizlik (autentifikatsiya, imtiyozlar eskalatsiyasi, sanksiya/RER bayroqlari).

5. Infratuzilma (K8s events, autoscaling, HPA/VPA, tugunlar/disk/tarmoq).

Har bir oqim uchun - alohida retenshn, indeksatsiya va kirish qoidalari.


3) Tarkibiy log (JSON etaloni)

json
{
"ts": "2025-11-03T14:28:15.123Z",
"level": "ERROR",
"service": "payments-api",
"env": "prod",
"region": "eu-central-1",
"trace_id": "8a4f0c2e9b1f42d7",
"span_id": "c7d1f3a4b8b6e912",
"parent_span_id": "a1b2c3d4e5f60789",
"logger": "withdraw.handler",
"event": "psp_decline",
"msg": "PSP declined transaction",
"http": { "method": "POST", "route": "/withdraw", "status": 502, "latency_ms": 842 },
"user": { "tenant_id": "t_9f2", "user_key": "hash_0a7c", "vip_tier": 3 },
"payment": { "psp": "acme", "amount": 120.50, "currency": "EUR", "idempotency_key": "u123:wd:7845" },
"safe": true,         // пройдена проверка на секреты
"version": "1.14.2",     // версия сервиса (SemVer)
"build": "sha-1f2a3b4",
"kubernetes": { "pod": "payments-7cbdf", "node": "ip-10-0-2-41" }
}

Talablar: tekis sxema + domen bo’yicha qo’shimchalar, majburiy maydonlar (’ts, level, service, env, trace_id, msg’), son qiymatlari - satrlar bilan emas, sonlar bilan.


4) Darajalar, kardinallik va hajm

Darajalar:’DEBUG’(prodda emas),’INFO’(biznes-faktlar),’WARN’(anomaliyalar),’ERROR’(xatolar),’FATAL’(krashlar).
Kardinallik: ixtiyoriy kalitlardan/dinamik labellardan qoching. Hech qanday «id-kalitda».
Sampling log: rate-limit takrorlanuvchi xabarlar; ’DEBUG’ ni faqat scoped va vaqt boʻyicha yoqing (feature flag).
Idempotentlik:’idempotency _ key’manzilini yozib oling.


5) Maxfiylik va xavfsizlik

(’email’,’card’,’token’,’authorization’).
’user _ key’ xesh qiling, faqat kerakli kontekstni saqlang (mamlakat, KYC darajasi, VIP-tier).
Saqlash joylarini ajrating: issiq (tezkor qidiruv) va sovuq (PII/s qisqartirilgan kontekstsiz arxiv).
Audit - append-only, WORM-saqlash, kirish faqat least privilege printsipi bo’yicha.


6) Trassalash: standartlar va kontekst

W3C Trace Context:’traceparent ’/’ tracestate’sarlavhalari, plyus xavfsiz kalitlar uchun baggage (masalan,’tenant _ id’,’region’).
Metrik va treys aloqasi: Exemplars -’trace _ id’ni gistogrammalarning semple nuqtalariga uzating (RCA tezlashtiradi).
Sampling: asosiy sampling 1-5% + dinamik «xato/sekin p95» muammoli soʻrovlar uchun 100% gacha.
Links: Asinxron navbatlar/saglar uchun uyquni faqat’parent’orqali emas, balki’links’orqali bogʻlang.


7) Yig’ish va yo’naltirish

Agentlar: Fluent Bit/Vector log uchun; OpenTelemetry Collector’ga OTLP eksport qilish.
Collector: markaziy shlyuz (batch/transform/filter/routing).

Tavsiya etilgan konveyer:

App → (OTLP logs/traces/metrics) → OTel Collector
→ logs: redact → route(security    audit    tech    biz) → hot index / cold archive
→ traces: tail_sampling(errors    p95>threshold) → APM backend
→ metrics: Prometheus exporter (for SLO/alerts)
OTel Collector (parcha):
yaml processors:
batch: {}
attributes:
actions:
- key: env value: prod action: insert filter/logs:
logs:
include:
match_type: strict resource_attributes:
- key: service.name value: payments-api exporters:
otlp/traces: { endpoint: "apm:4317", tls: { insecure: true } }
loki: { endpoint: "http://loki:3100/loki/api/v1/push" }
prometheus: {}
service:
pipelines:
logs: { receivers: [otlp], processors: [attributes,batch], exporters: [loki] }
traces: { receivers: [otlp], processors: [batch], exporters: [otlp/traces] }
metrics: { receivers: [otlp], processors: [batch], exporters: [prometheus] }

8) Instrumentatsiya: SDK namunalari

8. 1 Node. js (Pino + OTel)

js import pino from "pino";
import { context, trace } from "@opentelemetry/api";

const logger = pino({ level: process.env.LOG_LEVEL          "info" });

function log(info) {
const span = trace.getSpan(context.active());
const base = span? { trace_id: span.spanContext().traceId, span_id: span.spanContext().spanId }: {};
logger.info({...base,...info });
}

// пример log({ event: "deposit.created", amount: 50, currency: "EUR", user: { user_key: "hash_0a7c" } });

8. 2 Java (SLF4J + OTel)

java
MDC.put("trace_id", Span.current().getSpanContext().getTraceId());
MDC.put("span_id", Span.current().getSpanContext().getSpanId());
log.info("psp_response status={} latency_ms={}", status, latency);

8. 3 Python (structlog + OTel)

python import structlog from opentelemetry import trace log = structlog.get_logger()

def log_json(event, kwargs):
span = trace.get_current_span()
ctx = {}
if span and span.get_span_context().is_valid:
ctx = {"trace_id": span.get_span_context().trace_id, "span_id": span.get_span_context().span_id}
log.msg(event=event, ctx, kwargs)

8. 4 NGINX → sarlavhalarni izlash

nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;

9) Alertlar va avto-harakatlar uchun signal sifatida loglar

Xato patternlar (’psp _ decline’,’fraud _ flag’) SLO bilan bogʻlansin.
Pattern-rate alertlari: "5xx po/withdraw> 0. 10 m uchun 5%", "fraud_flag spike> + 200% bazaviy".
Avtomatik harakatlar:’withdrawals _ manual _ mode = true’logida bayroqlar platformasi orqali kill-switchni yoqing.

Qoidaga misol (psevdo-ekspressiya):

rate(count_over_time({service="payments-api", level="ERROR", event="psp_decline"}[5m])) > 5

10) Retenshn, indeksatsiya, saqlash

Issiq: 7-14 kun (tezkor tergov).
Issiq: 30-90 kun (trendlar, RCA).
Sovuq: 180-365 + (arxiv, audit) - siqish, arzon sinflar, ehtimol to’liq matnli qidiruvsiz.
Indeksatsiya: oʻrnatilgan kalitlar (’service, env, level, event, trace_id, user. tenant_id'), «hammasi ketma-ket» indeksiga taqiq.
Hodisa o’lchami bo’yicha limitlar (masalan, 32KB ≤), trim/pastki qismida: «storage ortiqcha - MTTR dushmani».


11) Audit va o’zgarmaslik

Audit voqealarini imzolar/xeshlar, server vaqti,’who/what/when/why’bilan alohida oqimda yozing.
«DEda 100% bonus bayrogʻini kim yoqdi?» - javob 1-2 so’rovda bo’lishi kerak.

Audit misoli:
json
{
"ts": "2025-11-03T14:00:00.000Z",
"actor": "alice@company",
"action": "feature_flag.update",
"target": "bonus.enable_vip",
"old": {"rollout": 10},
"new": {"rollout": 100},
"reason": "campaign_2311",
"ticket": "OPS-3481",
"trace_id": "cf12ab.."
}

12) Biznes-voqealar va ma’lumotlar modeli

Biznes-tadbirlar - «loglardagi matn» emas, balki kontrakt:
  • `event_type`, `event_id`, `occurred_at`, `actor`, `subject`, `amount`, `currency`, `status`, `idempotency_key`.
  • Outbox va «at-least-once» dan foydalaning.

13) Kubernetes va pipeline loglari

Sidecar/DaemonSet agentlari (tarmoq tanaffuslarida).
Marshrutlash uchun pod izohlari (’log. type`, `retention. tier`).
K8s-nazoratchilar loglarini alohida yig’ing (klaster indeksi).

Fluent Bit (niqoblash, parcha):
ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) Anti-patternlar

«Kerakli» satr loglari,’trace _ id’mavjud emas.
PII/sahifalardagi sirlar, to’liq payload dampalari.
Millionlab noyob kalitlar → «portlatilgan» indeksatsiya.
DEBUG proda 24/7.
Audit, xavfsizlik va texnloglarni bitta indeksga aralashtirish.
Arxivdan qayta tiklash testi va retenshn siyosati yoʻq.


15) Joriy etish chek-varaqasi (0-45 kun)

0-10 kun

Gateway/mijozlarda W3C Trace Context dasturini yoqish.
Ilova yozuvlarini JSON ga tarjima qilish,’trace _ id ’/’ span _ id’qoʻshish.
PII/sirlarni (agentda yashirish) taqiqlash, maydonlar ro’yxatini tasdiqlash.

11-25 kun

Quyidagi oqimlarni ajratish: tech/biz/audit/security/infra, retenshn va ACL.
OTel Collector’ni yoqish, xatolarni/sekin soʻrovlarni tail-sampling qilish.
«Log Rate/Error by route» + Jump-to-trace (Exemplars) dashbordlari.

26-45 kun

Voqealar shablonlariga ko’ra alertlar va SLO bilan bog’lanish.
Sovuq loglar uchun arxiv/tiklash (DR-test).
SIda loglar sxemalari linteri, biznes voqealari uchun kontrakt.


16) Etuklik metrikasi

’trace _ id’ soʻrovlari 95% ga ≥.
JSON log ulushi ≥ 99%.
via «jump-to-trace» topilgan hodisalar <15 min (p50) hal qilindi.
0 ta holat PII (sizib chiqish skaneri).
Retenshn barcha oqimlar bo’yicha bajarilgan (auditni avtomatik ravishda isbotlaymiz).


17) Ilovalar: mini-snippetlar

W3C traceparent generatsiyasi (psevdo)

txt traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

PromQL - loglar va SLO bogʻlamasi (misol)


high_error_logs = rate(log_events_total{service="payments-api",level="ERROR"}[5m])
5xx_rate = sum(rate(http_requests_total{service="payments-api",status=~"5.."}[5m])) / sum(rate(http_requests_total{service="payments-api"}[5m]))
alert if high_error_logs > 10 and 5xx_rate > 0.005

OpenAPI - korelatsiya sarlavhalari

yaml components:
parameters:
Traceparent:
name: traceparent in: header required: false schema: { type: string }

18) Xulosa

Logotip va traskirlashning kuchli konturi - bu bitimlar + intizom: tuzilmaviy JSON-loglar, yagona’trace _ id’, xavfsiz PII ishlov berish, oqimlar bo’yicha marshrutlash va retenshn, shuningdek SLO, alerting va qaytish bilan yaqin bog’lanish. «Matnlar to’planishidan» voqealar va trassalar shartnomalariga o’ting va prod-hodisalarni tashxislash tezkor, oldindan aytib bo’ladigan va tekshiriladigan bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.