GH GambleHub

Окуяларды логикалоо жана издөө

Окуяларды логикалоо жана издөө

1) Максаты жана алкагы

Логи жана соода - байкоого негиз.
Логдор "эмне болду" жана "кандай контекстте" деп жооп беришет.
Соодагерлер "кайда жана эмне үчүн жай/туура эмес" деп жооп берет.

Негизги принциптери:
  • Structured by default (JSON); Trace-first: ысык жолдо ар бир журнал 'trace _ id '/' span _ id' менен байланышкан.
  • Минималдуу ызы-чуу, максималдуу сигнал: деңгээл, sampling, анти-кардиналдык.
  • Коопсуздук жана купуялык: жашыруу, түзөтүү, жеткиликтүүлүктү ажыратуу.
  • Логдордун жана окуялардын версияланган схемалары.

2) Окуялардын таксономиясы

Агымдарды жана индекстерди максаттуу бөлүңүз:

1. Техникалык протоколдор (runtime, каталар, тармактык таймауттар, ретрациялар).

2. Бизнес окуялар (каттоо, депозиттик, коюм, алып салуу, KYC-этап) - "акча" жолдору боюнча азык-түлүк талдоо жана окуялар үчүн жарактуу.

3. Аудит (ким/качан өзгөрттү: конфиги, жеткиликтүүлүк, желектер, лимиттер) - өзгөрүлбөс журнал.

4. Коопсуздук (аутентификация, артыкчылыктардын эскалациясы, санкциялар/РЕР-желектер).

5. Инфраструктура (K8s events, autoscaling, HPA/VPA, түйүндөр/диск/тармак).

Ар бир агым үчүн - өзүнчө ретеншн, индекстөө жана жетүү эрежелери.


3) Структуралык лог (JSON эталону)

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" }
}

Талаптар: жалпак схема + домен боюнча тиркемелер, милдеттүү талаалар ('ts, level, service, env, trace_id, msg'), сандык маанилер - сандар менен, саптар менен эмес.


4) деңгээл, кардиналдуулук жана көлөмү

Деңгээл: 'DEBUG' (тукумунда эмес), 'INFO' (бизнес-фактылар), 'WARN' (аномалиялар), 'ERROR' (каталар), 'FATAL' (краштар).
Кардиналдуулук: өзүм билемдик ачкычтар/динамикалык label's качуу. Эч кандай "id-ачкыч".
Самплинг: rate-limit кайталанма билдирүүлөр; кошуу 'DEBUG' гана scoped жана убакыт (feature flag).
Демпотенттик: керектөөчүлөр тарабынан кайталанган окуяларды басуу үчүн 'idempotency _ key' логин.


5) Купуялык жана коопсуздук

PII/сырларды агенттерге жашыруу (Fluent Bit/Vector): ачкычтар боюнча жашыруу карталары ('email', 'card', 'token', 'authorization').
'user _ key' деп хэштегиле, керектүү контекстти гана кармап туруңуз (өлкө, KYC-деңгээл, VIP-тир).
сактоо бөлүү: жылуу (ыкчам издөө) жана муздак (PII жок архив/кыскартылган контекстте менен).
Аудит - append-only, WORM-сактоо, жетүү least privilege негизинде гана.


6) Tracking: стандарттар жана контекст

W3C Trace Context: 'traceparent '/' tracestate' аталыштары, плюс коопсуз ачкычтар үчүн багаж (мисалы, 'tenant _ id', 'region').
Метриктер менен соодалардын байланышы: Exemplars - 'trace _ id' гистограммалардын үлгүлүү чекиттерине өткөрүп берүү (RCAны тездетет).
Sampling: негизги sampling 1-5% + динамикалык "ката/жай p95" 100% көйгөйлүү суроолор үчүн.
Шилтемелер: Асинхрондук кезек/саг үчүн уктап 'links' аркылуу эмес, 'parent' аркылуу байланыштырыңыз.


7) чогултуу жана багыттоо

Агенттер: Fluent Bit/Vector сайттар үчүн; OTLP экспорт OpenTelemetry Collector.
Collector: борбордук шлюз (batch/transform/filter/routing).

Сунушталган конвейер:

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

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) Instrumentation: SDK мисалдар

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 → трек аталыштары

nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;

9) Алерт жана auto-аракеттер үчүн сигнал катары Логи

Туура эмес үлгүлөр ('psp _ decline', 'fraud _ flag') SLO менен бириктирип, корреляциялоо.
pattern-rate боюнча Alerty: "5xx боюнча/withdraw> 0. 5% 10м үчүн", "fraud_flag spike> + 200% базалык".
Auto-аракеттер: 'withdrawals _ manual _ mode = true' логунда желектер платформасы аркылуу kill-switch туташтырыңыз.

Эреженин мисалы (псевдо-экспрессия):

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

10) Retenshn, индекстөө, сактоо

Ысык: 7-14 күн (ыкчам иликтөө).
Жылуу: 30-90 күн (тренддер, RCA).
муздак: 180-365 + (архив, аудит) - кысуу, арзан класстар, толук текст издөө мүмкүн эмес.
Индекстөө: белгиленген ачкычтар ('service, env, level, event, trace_id, user. tenant_id'), "бардыгы катары менен" индексине тыюу салуу.
Иш-чаранын өлчөмүнө лимиттер (мисалы, 32KB ≤), трим/төмөнкү: "storage ашыкча - MTTR душманы".


11) Аудит жана өзгөрбөстүк

Аудит окуяларды кол тамгалар/хэштер, сервер убактысы, 'who/what/when/why' менен өзүнчө агым менен жазыңыз.
"Ким 100% DE бонустарды желегин күйгүзгөн?" - жооп 1-2 суроо болушу керек.

Аудит мисалы:
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) Бизнес-окуялар жана маалыматтар модели

Бизнес-окуялар - "логдордогу текст" эмес, контракт:
  • `event_type`, `event_id`, `occurred_at`, `actor`, `subject`, `amount`, `currency`, `status`, `idempotency_key`.
  • Колдонуңуз Outbox жана "at-least-once" демпотенттик керектөөчүлөр менен.

13) Kubernetes жана pipeline Логин

Sidecar/DaemonSet дискте буфер менен агенттер (тармактык тыныгууларда).
Багыттоо үчүн такталардын аннотациялары ('log. type`, `retention. tier`).
K8s-контроллер Логи өзүнчө чогултуу (кластердик индекси).

Fluent Bit

ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) Анти-үлгүлөрү

String Логи "керек", жок 'trace _ id'.
PII/журналдарда сырлар, дампалар толугу менен payload.
Миллиондогон уникалдуу ачкычтар → "жардырылган" индекстөө.
DEBUG прод 24/7.
Аудит, коопсуздук жана техлогдорду бир индекске аралаштыруу.
Эч кандай retenshn саясаты жана архивден калыбына келтирүү сынагы жок.


15) киргизүү чек-тизмеси (0-45 күн)

0-10 күн

gateway/кардарлар менен W3C Trace Context кирет, аталыштары.
JSON тиркемелерди которуу, 'trace _ id '/' span _ id' кошуу.
Тыюу PII/Secrets (агент боюнча жашыруу), талаалардын тизмесин бекитүү.

11-25 күн

Агымдарды бөлүү: tech/biz/audit/security/infra, retenshn жана ACL.
OTEL Collector күйгүзүү, tail-sampling каталар/жай суроо.
Dashboard "Log Rate/Error by route" + Jump-to-trace (Exemplars).

26-45 күн

Иш-чаралардын үлгүлөрү боюнча алерттерди жана SLO менен байланышты.
Archive/калыбына келтирүү (DR-тест) үчүн муздак Логи.
CI Логин схемалар Линтер, бизнес-окуялар үчүн келишим.


16) Жетилүү метрикасы

'trace _ id' ≥ 95%.
JSON логунун үлүшү ≥ 99%.
via "jump-to-trace" табылган окуялар чечилет <15 мин (p50).
0 PII учурлары логдордо (агып сканер).
Ретеншн бардык агымдар боюнча сакталат (аудит автоматтык түрдө далилдейт).


17) Тиркемелер: Mini Snippet

W3C traceparent генерация (псевдо)

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

PromQL - Логдор жана SLO (мисал)


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 - Кореляциялык аталыштар

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

18) Корутунду

Күчтүү Логинг контур жана Tracking келишимдер + тартип болуп саналат: структуралык JSON-Логи, бирдиктүү 'trace _ id', коопсуз PII иштетүү, багыттоо жана агымдар боюнча retenshn, ошондой эле SLO менен тыгыз байланыш, alerting жана racks. "Тексттердин төгүлүшүнөн" окуялардын жана жолдордун келишимдерине өтүңүз жана прод-инциденттердин диагностикасы тез, алдын ала айтууга жана текшерүүгө болот.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.