GH GambleHub

მოვლენების ლოგიკა და კვალდაკვალ

მოვლენების ლოგიკა და კვალდაკვალ

1) მიზანი და ჩარჩო

ლოგოები და ტრეისერები დაკვირვების საფუძველია.
ლოგიკები პასუხობენ „რა მოხდა“ და „რა კონტექსტში“.
ტრეისები პასუხობენ „სად და რატომ ნელა/შეცდომით“ მოთხოვნის განაწილებულ გზაზე.

ძირითადი პრინციპები:
  • Structured by default (JSON); Trace-first: ცხელი ბილიკის თითოეული ჟურნალი უკავშირდება 'trace _ id '/' spank _ id'.
  • მინიმალური ხმაური, მაქსიმალური სიგნალი: დონე, ნიმუში, ანტი-კარდინალობა.
  • უსაფრთხოება და კონფიდენციალურობა: შენიღბვა, რედაქტირება, დაშვების დელიმიტაცია.
  • ვერსირებული ლოგებისა და მოვლენების სქემები.

2) მოვლენების ტაქსონომია

გამოყავით ნაკადები და ინდექსები დანიშნულებისამებრ:

1. ტექნიკური ლოგოები (runtime, შეცდომები, ქსელის ტაიმაუტები, retrai).

2. ბიზნეს მოვლენები (რეგისტრაცია, ანაბარი, განაკვეთი, დასკვნა, KYC ეტაპი) შესაფერისია სასურსათო ანალიტიკისა და „ფულადი“ მარშრუტების ინციდენტებისთვის.

3. აუდიტი (ვინ/როდის შეცვალა: ჩამორთმევა, წვდომა, დროშები, ლიმიტები) - უცვლელი ჟურნალი.

4. უსაფრთხოება (ავთენტიფიკაცია, პრივილეგიების ესკალაცია, სანქციები/RER დროშები).

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, მომსახურება, env, trace _ id, msg'), რიცხვითი მნიშვნელობები - რიცხვები, არა სტრიქონები.


4) დონე, კარდინალი და მოცულობა

დონეები: 'DEBUG' (არა გაყიდვაში), 'INFO' (ბიზნეს ფაქტები), 'WARN' (ანომალიები), 'ERROR' (შეცდომები), 'FATAL' (ფერები).
კარდინალობა: თავიდან აიცილეთ თვითნებური გასაღებები/დინამიური ლაბელი. არა „id“.
Logs Sampling: განმეორებითი შეტყობინებები; ჩართეთ 'DEBUG' მხოლოდ დროულად (feature flag).
Idempotence: გააფართოვეთ 'idempotence _ key "მომხმარებლების მიერ მოვლენების დუბლიკატების ჩახშობის მიზნით.


5) კონფიდენციალურობა და უსაფრთხოება

შენიღბეთ PII/საიდუმლოებები აგენტებზე (Fluent Bit/Vector): ნიღბის ბარათები კლავიშებზე ('email', 'card', 'token', 'authorization').
Hash 'user _ key', შეინარჩუნეთ მხოლოდ საჭირო კონტექსტი (ქვეყანა, KYC დონე, VIP-tier).
გამოყავით საცავები: თბილი (ოპერაციული ძებნა) და ცივი (არქივი PII/ს გარეშე შემცირებული კონტექსტით).
აუდიტი - append-only, WORM საცავი, წვდომა მხოლოდ მსუბუქი პირადი პრინციპით.


6) კვალი: სტანდარტები და კონტექსტი

W3C Trace Context: სათაურები 'traceparent '/' tracestate', პლუს უსაფრთხო გასაღებები (მაგალითად, 'tenant _ id', 'region').
მეტრიკისა და ტრეისების კავშირი: Exemplars - გადაიტანეთ 'trace _ id "ჰისტოგრამების სიმულაციურ წერტილებში (აჩქარებს RCA).
Sampling: ძირითადი ნაკრები 1-5% + დინამიური „შეცდომებზე/ნელი p95“ პრობლემური მოთხოვნების 100% -მდე.
ბმულები: ასინქრონული რიგებისთვის/საგებისთვის დააკავშირეთ სპილოები 'ლინკებით' და არა მხოლოდ 'პარენტის' საშუალებით.


7) შეგროვება და მარშრუტიზაცია

აგენტები: Fluent Bit/Vector doles; OTLP ექსპორტი OpenTelemetry 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) ბრიფინგი: 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) Logs, როგორც სიგნალი ალერტებისა და ავტო მოქმედებებისთვის

არასწორი ნიმუშები ('psp _ decline', 'fraud _ flag') აერთიანებს და აკავშირებს SLO- ს.
ალერტები pattern-rate- ზე: "5xx/withdraw> 0. 5% 10 მ-ზე" ", fraud _ flag spike> ბაზის + 200%".
ავტო მოქმედებები: 'withdrawals _ manual _ mode = true' ჩართეთ kill-switch დროშის პლატფორმის საშუალებით.

წესის მაგალითი (ფსევდო გამოხატულება):

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

10) Retenschn, ინდექსაცია, შენახვა

გორიაჩე: 7-14 დღე (ოპერატიული გამოძიება).
თბილი: 30-90 დღე (ტენდენციები, RCA).
ცივი: 180-365 + (არქივი, აუდიტი) - შეკუმშვა, იაფი კლასები, შესაძლოა, სრულფასოვანი ძიების გარეშე.
ინდექსაცია: ფიქსირებული კლავიშები ('მომსახურება, env, evel, ღონისძიება, trace _ id, მომხმარებელი). tenant _ id '), „ზედიზედ“ ინდექსის აკრძალვა.
ღონისძიების ზომების ლიმიტები (მაგალითად, 32KB), ტრიმი/ქვემოდან: „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 და „ast-least-once“ imempotent მომხმარებლებთან.

13) Kubernetes და pipeline doline

Sidecar/DaemonSet აგენტები ბუფერით დისკზე (ქსელის შეფერხებებით).
მარშრუტიზაციის ქვედანაყოფების სურათები ('log. type`, `retention. tier`).
K8s კონტროლერების ლოგოები ცალკე შეაგროვეთ (კასეტური ინდექსი).

Fluent Bit (შენიღბვა, ფრაგმენტი):
ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) ანტი შაბლონები

სტრიქონის ლოგოები „როგორც უნდა“, „ტრეკის _ id“ არარსებობა.
PII/საიდუმლოებები ლოგებში, მთლიანად payload damps.
მილიონობით უნიკალური გასაღები არის „აფეთქებული“ ინდექსაცია.
DEBUG გაყიდვაში 24/7.
აუდიტის, უსაფრთხოების და ტექნოლოგიის შერევა ერთ ინდექსში.
არ არსებობს ეტლის პოლიტიკა და არქივიდან აღდგენის ტესტი.


15) განხორციელების სიის სია (0-45 დღე)

0-10 დღე

W3C Trace Context- ის ჩართვა gateway/კლიენტებში, სათაურების გარღვევა.
პროგრამირების ლოგოების თარგმნა JSON- ზე, დაამატეთ 'trace _ id '/' spank _ id'.
აკრძალეთ PII/საიდუმლოებები (შენიღბვა აგენტზე), დაამტკიცეთ ველების სია.

11-25 დღე

განაწილება ნაკადები: tech/biz/audit/უსაფრთხოების/infra, მიუთითეთ retenchne და ACL.
ჩართეთ OTel Collector, გააკეთეთ tail-sampling შეცდომები/ნელი მოთხოვნები.
დაშბორდები „Log Rate/Error by Route“ + Jump-to-trace (Exemplars).

26-45 დღე

ალერტები მოვლენების შაბლონების მიხედვით და კორელაცია SLO- სთან.
არქივი/აღდგენა (DR ტესტი) ცივი ლოგებისთვის.
Linter ლოგიკური სქემები CI- ში, ხელშეკრულება ბიზნეს მოვლენებისთვის.


16) სიმწიფის მეტრიკა

'Trace _ id' მოთხოვნის დაფარვა 95% -ს შეადგენს.
JSON ლოგოების წილი 99% -ს შეადგენს.
„jump-to-trace“ - ის მიერ ნაპოვნი ინციდენტები მოგვარებულია <15 წთ (p50).
0 PII შემთხვევა ლოგებში (გაჟონვის სკანერი).
Retenshn დაცულია ყველა ნაკადისთვის (ჩვენ ავტომატურად ვადასტურებთ აუდიტს).


17) პროგრამები: მინი snippets

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) დასკვნა

ლანდშაფტისა და კვალიფიკაციის ძლიერი წრე არის + დისციპლინის ხელშეკრულებები: სტრუქტურული JSON-logs, ერთიანი 'trace _ id ", უსაფრთხო PII დამუშავება, ნაკადების მარშრუტიზაცია და რეტენსირება, აგრეთვე მჭიდრო კავშირი SLO- სთან, ალერტინგთან და გამოტოვებასთან. გააკეთეთ გადასვლა „ტექსტების ნაგავსაყრელიდან“ მოვლენებისა და მარშრუტების კონტრაქტებზე, ხოლო პროდუქტების დიაგნოზი გახდება სწრაფი, პროგნოზირებადი და გადამოწმებული.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.