Hadisələrin loqosu və izlənməsi
Hadisələrin loqosu və izlənməsi
1) Məqsəd və çərçivə
Logi və treys - müşahidə üçün təməl.
Loqlar «nə baş verdi» və «hansı kontekstlə» cavab verir.
Treys paylanmış sorğu yolunda «harada və niyə yavaş/səhv» cavab verir.
- Structured by default (JSON); Trace-first: isti yolda hər log 'trace _ id '/' span _ id' ilə bağlıdır.
- Minimum səs-küy, maksimum siqnal: səviyyələri, sampling, anti-kardinallıq.
- Təhlükəsizlik və məxfilik: maskalanma, redaktə, giriş sərhədləri.
- Version log və hadisə sxemləri.
2) Hadisələrin taksonomiyası
Axınları və indeksləri təyinatına görə bölün:1. Texniki qeydlər (runtime, səhvlər, şəbəkə vaxtları, retrajlar).
2. Biznes hadisələri (qeydiyyat, depozit, dərəcə, nəticə, KYC-mərhələ) - «pul» yolları üzrə məhsul analitikası və insidentlər üçün yararlıdır.
3. Audit (kim/nə vaxt dəyişdi: konfiqlər, girişlər, bayraqlar, limitlər) - dəyişməz jurnal.
4. Təhlükəsizlik (autentifikasiya, imtiyazların eskalasiyası, sanksiya/RER bayraqları).
5. Infrastruktur (K8s events, autoscaling, HPA/VPA, qovşaqlar/disk/şəbəkə).
Hər bir axın üçün - ayrı retenshn, indeksasiya və giriş qaydaları.
3) Struktur log (JSON etalonu)
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" }
}
Tələblər: düz sxem + domen əlavələri, məcburi sahələr ('ts, level, service, env, trace_id, msg'), ədədi qiymətlər - nömrələrlə, sətirlərlə deyil.
4) Səviyyələri, kardinallığı və həcmi
Səviyyələr: 'DEBUG' (nəsil deyil), 'INFO' (biznes faktları), 'WARN' (anomaliyalar), 'ERROR' (səhvlər), 'FATAL' (kraşlar).
Kardinallıq: ixtiyari açarlardan/dinamik etiketlərdən çəkinin. Heç bir «id-in-açar».
Sampling log: rate-limit təkrarlanan mesajlar; 'DEBUG' yalnız scoped və zaman (feature flag).
İdempotentlik: «idempotency _ key» loqotipini istifadəçilər tərəfindən təkrarlanan hadisələrin qarşısını almaq üçün.
5) Gizlilik və təhlükəsizlik
Agentlərdə PII/sirləri maskalayın (Fluent Bit/Vector): açar maskalama kartları ('email', 'card', 'token', 'authorization').
'user _ key' heşesi, yalnız lazımi konteksti saxlayın (ölkə, KYC səviyyəsi, VIP-tier).
Saxlama bölmələri: isti (operativ axtarış) və soyuq (PII olmadan arxiv/kəsilmiş kontekstdə).
Audit - append-only, WORM-saxlama, giriş yalnız least privilege prinsipi ilə.
6) Tracking: standartlar və kontekst
W3C Trace Context: başlıqlar 'traceparent '/' tracestate', üstəgəl təhlükəsizlik açarları üçün çantalar (məsələn, 'tenant _ id', 'region').
Metrik və treys əlaqəsi: Exemplars - 'trace _ id' -ni histoqramların toplanmış nöqtələrinə (RCA sürətləndirir) ötürün.
Sampling: problemli sorğular üçün əsas 1-5% + dinamik «səhv/yavaş p95» 100% -ə qədər.
Links: Asenkron növbələr/saqlar üçün yuxuları yalnız 'parent' vasitəsilə deyil, 'links' vasitəsilə bağlayın.
7) Toplama və marşrutlaşdırma
Agentlər: Log üçün Fluent Bit/Vector; OpenTelemetry Collector-a OTLP ixracı.
Collector: mərkəzi şluz (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 (fraqment):
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) Alət: SDK nümunələri
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 → başlıqların izi
nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;
9) Alert və avtomatik hərəkətlər üçün siqnal kimi log
Səhv nümunələr ('psp _ decline', 'fraud _ flag') SLO ilə birləşdirin və korrelyasiya edin.
Pattern-rate-də alertlər: "5xx/withdraw> 0. 5% 10m üçün", "fraud_flag spike> + 200% bazadan".
Avtomatik hərəkətlər: 'withdrawals _ manual _ mode = true' log ilə bayraq platforması vasitəsilə kill-switch açın.
rate(count_over_time({service="payments-api", level="ERROR", event="psp_decline"}[5m])) > 5
10) Retenshn, indeksasiya, saxlama
İsti: 7-14 gün (əməliyyat araşdırması).
İsti: 30-90 gün (trendlər, RCA).
Soyuq: 180-365 + (arxiv, audit) - sıxılma, ucuz siniflər, tam mətnli axtarış olmadan mümkündür.
Indeksləşdirmə: sabit açarlar ('service, env, level, event, trace_id, user. tenant_id'), «ardıcıl hər şey» indeksinə qadağa.
Hadisənin ölçüsü üzrə limitlər (məsələn, 32KB ≤), trim/altdan: «storage-da artıq MTTR düşmənidir».
11) Audit və dəyişməzlik
Audit hadisələrini imzalar/heşlər, server vaxtı, 'who/what/when/why' ilə ayrı-ayrılıqda yazın.
«DE-də 100% bonus bayrağını kim işə saldı?» - cavab 1-2 sorğu olmalıdır.
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 hadisələri və data modeli
Biznes hadisələri - «loglarda mətn» deyil, müqavilə:- `event_type`, `event_id`, `occurred_at`, `actor`, `subject`, `amount`, `currency`, `status`, `idempotency_key`.
- İdempotent istehlakçıları ilə Outbox və «at-least-once» istifadə edin.
13) Kubernetes və pipeline log
Sidecar/DaemonSet agentləri disk tamponu ilə (şəbəkə fasilələrində).
Marşrutlaşdırma üçün pod şərhləri ('log. type`, `retention. tier`).
K8s-controller loqlərini ayrıca yığın (klaster indeksi).
ini
[FILTER]
Name modify
Match
Remove authorization, password, card_number
14) Anti-nümunələr
String log «lazım olduğu kimi», yox 'trace _ id'.
PII/log sirləri, bütün payload damps.
Milyonlarla unikal açar → «partladılmış» indeksasiya.
DEBUG prod 24/7.
Audit, təhlükəsizlik və texnoloqları bir indeksə qarışdırın.
Arxivdən heç bir retenshn siyasəti və bərpa testi yoxdur.
15) Giriş çek siyahısı (0-45 gün)
0-10 gün
W3C Trace Context-i gateway/müştərilərə daxil edin, başlıqların boşalması.
Tətbiq qeydlərini JSON-a tərcümə edin, 'trace _ id '/' span _ id' əlavə edin.
PII/sirləri qadağan edin (agentdə maskalanma), sahələrin siyahısını təsdiq edin.
11-25 gün
Axınları ayırın: tech/biz/audit/security/infra, retenshn və ACL təyin edin.
OTel Collector aktiv, tail-sampling səhvləri/yavaş sorğular etmək.
Dashboard «Log Rate/Error by route» + Jump-to-trace (Exemplars).
26-45 gün
Hadisə şablonları və SLO ilə korrelyasiya.
Arxiv/bərpası (DR-test) üçün soyuq log.
CI-də log sxemlərinin linteri, iş hadisələri üçün müqavilə.
16) Yetkinlik metrikası
'trace _ id' sorğularının əhatə dairəsi 95% ≥.
JSON log payı ≥ 99%.
via «jump-to-trace» tapılan insidentlər həll <15 min (p50).
0 PII halları (sızma skaneri).
Retenshn bütün axınlarda müşahidə olunur (audit avtomatik olaraq sübut olunur).
17) Proqramlar: mini snippet
W3C traceparent generation (psevdo)
txt traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
PromQL - log və SLO (nümunə)
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 - korelasiya başlıqları
yaml components:
parameters:
Traceparent:
name: traceparent in: header required: false schema: { type: string }
18) Nəticə
Güclü loginq və izləmə konturu müqavilələr + nizam-intizam: struktur JSON-loqlar, vahid 'trace _ id', təhlükəsiz PII emalı, marşrutlaşdırma və axınlar üzrə retenşn, həmçinin SLO, alertinq və geri çəkilmə ilə sıx əlaqə. «Mətn zibilliyindən» hadisə müqavilələrinə və yollara keçid edin və prod hadisələrinin diaqnostikası sürətli, proqnozlaşdırıla bilən və yoxlanıla bilən olacaq.