Իրադարձությունների տրամաբանությունը և ճանապարհը
Իրադարձությունների տրամաբանությունը և ճանապարհը
1) Նպատակը և շրջանակը
Լոգներն ու թրեյսները դիտարկման հիմքն են։
Լոգները պատասխանում են «ինչ պատահեց» և «ինչ ենթատեքստով»։
Թրեյսները պատասխանում են «որտեղ և ինչու դանդաղ/սխալ» հարցման բաշխված ճանապարհին։
Հիմնական սկզբունքները
Structured by default (JSON); Trace-first: Յուրաքանչյուր լոգ տաք ճանապարհով կապված է «trace _ id »/« բանաձև _ id» -ի հետ։
Նվազագույն աղմուկը, առավելագույն ազդանշանը 'մակարդակները, սեմպլինգը, անտի-կարդինալությունը։
Անվտանգությունն ու գաղտնիությունը 'դիմակավորում, խմբագրում, հասանելիության սահմանափակում։
Լոգարանների և իրադարձությունների տարբերակված սխեմաները։
2) Իրադարձությունների տաքսոնոմիա
Բաժանեք հոսքերը և ինդեքսները նպատակներով
1. Տեխնոլոգիական լոգները (runtime, սխալներ, ցանցային թայմաուտներ, ռետրաններ)։
2. Բիզնես իրադարձությունները (ռուսական, դեպոզիտ, տոկոսադրույքը, եզրակացությունը, KYC-քայլը) հարմար են սննդի վերլուծության և «դրամական» ճանապարհների համար։
3. Աուդիտը (ով/երբ ինչ-որ բան փոխեց 'ուլտրաձայններ, մատչելի, դրոշներ, սահմաններ) անփոփոխ ամսագիր է։
4. Անվտանգություն (վավերացում, արտոնությունների սրացում, սանկցիա/RER դրոշներ)։
5. Ենթակառուցվածքը (K8s events, autoscaling, HPA/MSA, 108/սկավառակ/ցանց)։
Յուրաքանչյուր հոսքի համար ռետենշնի, ինդեքսավորման և հասանելիության առանձին կանոններ են։
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, intel, env, trace _ id, www.g»), թվային արժեքներ թվերով, ոչ թե տողերով։
4) Մակարդակները, կարդինալությունը և ծավալը
Մակարդակները ՝ «DEBUG» (ոչ թե վաճառքում), «MS» (բիզնես փաստեր), «WARN» (անոմալիա), «ERROR» (սխալներ), «FATAL» (ներկեր)։
Կարդինալություն 'խուսափեք կամայական կոդերից/դինամիկ label' ից։ Ոչ մի «id-e-բանալին»։
Sampling logs: rate-limit կրկնվող հաղորդագրությունները; միացրեք 'DEBUG' միայն scoped և ժամանակի ընթացքում (feature flag)։
Idempotenty: Տրամաբանեք 'idempotency _ key ", որպեսզի ճնշեն իրադարձությունների կրկնօրինակները սպառողների կողմից։
5) Գաղտնիությունը և անվտանգությունը
Դիմակավորված PII/գաղտնիքները գործակալների վրա (Fluent Bit/Vector) 'բեկորների վրա դիմակավորված քարտեզներ («email», «card», «token», «authorization»)։
Հեշիրուրու 'user _ key ", պահեք միայն անհրաժեշտ կոնտեքստը (երկիր, KYC մակարդակ, VIP-tier)։
Բաժանեք հասցեները ՝ տաք (ստացիոնար որոնում) և սառը (արխիվը առանց PII/c կրճատված համատեքստով)։
Աուդիտը append-only, WORM պահեստը, հասանելիությունը միայն leoftprivilege սկզբունքով։
6) Ուղիներ ՝ ստանդարտներ և համատեքստեր
W3C Trace Disext: վերնագրերը 'traceparent '/« tracestate », գումարած baggage անվտանգ կոդավորման համար (օրինակ ՝« tenrone _ id »,« region »)։
Մետրիկի և թրեյսների կապը 'Exemplars - փոխանցեք «trace _ id» -ը հիստոգրամների մոդելավորված կետերում (արագացնում է RCA)։
Sampling: Հիմնական sempling 1-5% + դինամիկ «սխալների վրա/դանդաղ p95» մինչև 100 տոկոսը խնդրահարույց հարցումների համար։
Links: ասինխրոն հերթերի/սագերի համար կապեք մեջքերը «links» -ի միջոցով, ոչ միայն «parent» -ի միջոցով։
7) Հավաքումը և երթուղայնացումը
Մոսկվա: Fluent Bit/Vector լոգարանների համար; OTLP էքսպորտը OpenTelemetry Collector-ում։
Collector: կենտրոնական դարպասը (batch/transform/wwww.ter/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) Փոփոխումը 'MSK օրինակներ
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) Լոգները որպես ազդանշան ալտերտերի և մեքենայական գործողությունների համար
Սխալ patterns («pult _ decium», «fraud _ flag») համախմբեք և հարաբերեք SLO-ի հետ։
Ալերտները pattern-rate: "5xx/withdrance> 0։ 5% 10m", "fraud _ flag spike> + 200 տոկոսը հյուրանոցներից"։
Avto-գործողությունները '«withdrawals _ manium _ mode = mode» -ի դեպքում, միացրեք 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 + (արխիվ, աուդիտ) - սեղմված, էժան դասարաններ, հավանաբար առանց ամբողջական որոնման։
Ինդեքսավորումը 'ֆիքսված բանալիներ ("www.d., env, level, event, trace _ id, user. tenrone _ id ")," ամբողջ անընդմեջ "ինդեքսի արգելքը։
Իրադարձության չափի լիմիթները (օրինակ ՝ 323 KB), տրիմը/ներքևից. <<ավելին 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`.
Օգտագործեք Medibox-ը և «at-lement-once» -ը idempotent սպառողների հետ։
13) Kubernetes և pipeline logs
Sidecar/DaemonExpress-ը և բուֆերը սկավառակի վրա (ցանցային ընդմիջումների ժամանակ)։
Ենթատեսակների նույնականացումը երթուղման համար ("log. type`, `retention. tier`).
K8s-վերահսկիչների լոգները հավաքեք առանձին (կլաստերի ինդեքսը)։
Fluent Bit (դիմակավորում, հատված)
ini
[FILTER]
Name modify
Match
Remove authorization, password, card_number
14) Anti-patterna
Կառուցվածքային լոգները «ինչպես պետք է», «trace _ id» բացակայությունը։
PII/գաղտնիքները լոգարաններում, տիկնայք payload ամբողջովին։
Միլիոնավոր յուրահատուկ բջիջներ ունեն «պայթեցված» ինդեքսավորում։
DEBUG-ն վաճառում է 24/7։
Փաթեթների, անվտանգության և տեխնոլոգների խառնուրդը մեկ ինդեքսում։
Չկա ռեթենշն քաղաքականություն և վերականգնելու թեստ արխիվից։
15) Ներդրման թուղթ (0-45 օր)
0-10 օր
Միացրեք W3C Trace Disext-ը gateway/հաճախորդների մեջ, փորձելով վերնագրերը։
Թարգմանել պլանային լոգները JSON-ի վրա, ավելացնել «trace _ id »/« բանաձև _ id»։
Արգելել PII/գաղտնիքները (դիմակավորում գործակալին), հաստատել դաշտերի ցանկը։
11-25 օր
Հոսքերը 'tech/biz/audit/www.ru/infra, տեղադրել rentenshn և ACL։
Ներառել OTel Collector-ը, դարձնել tail-sampling սխալներ/դանդաղ հարցումներ։
Dashbords «Log Rate/Error by rope» + Jump-to-trace (Exemplars)։
26-45 օր
Ալերտները իրադարձությունների օրինաչափություններով և SLO-ի հետ հարաբերությամբ։
Արխիվը/վերականգնումը (DR-թեստ) սառը լոգարանների համար։
Linter սխեմաները CI-ում, բիզնես իրադարձությունների պայմանագիր։
16) Հասունության մետրերը
Հարցումների ծածկումը 'trace _ id' 2495 տոկոսն է։
JSON-ի լոգարանների մասը 99 տոկոսն է։
«jump-to-trace» -ի հայտնաբերած միջադեպերը որոշված են <15 րոպե (p50)։
0 PII դեպք լոգարաններում (արտահոսքի սկան)։
Retenshn-ը հետևում է բոլոր հոսանքներին (աուդիտը ինքնաբերաբար ապացուցում ենք)։
17) Ծրագրեր ՝ մինի-սնունդ
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-loga, միասնական' trace _ id ", PII անվտանգ վերամշակումը, երթուղայնացումը և հոսքի միջակայքը, ինչպես նաև SLO-ի, alerting- ի և արձագանքների հետ սերտ կապը։ Անցեք «տեքստերի աղբավայրից» դեպի իրադարձությունների և ուղիների պայմանագրերին, և պրո-հետախուզության ախտորոշումը կդառնա արագ, կանխատեսելի և ստուգելի։