GH GambleHub

Günlüğe kaydetme ve izleme olayları

Günlüğe kaydetme ve izleme olayları

1) Amaç ve çerçeve

Günlükler ve izler gözlemlenebilirliğin temelidir.
Günlükler'ne oldu've'ne bağlamı ile "yanıt verir.
İzler, dağıtılmış bir sorgu yolunda "nerede ve neden yavaş/hatalı'olarak yanıt verir.

Temel ilkeler:
  • Varsayılan olarak yapılandırılmış (JSON); Trace-first: hot path üzerindeki her log 'trace _ id'/' span _ id'olarak bağlanır.
  • Gürültü minimum, sinyal maksimum: seviyeler, örnekleme, anti-kardinalite.
  • Güvenlik ve gizlilik: maskeleme, düzenleme, erişim kontrolü.
  • Günlüklerin ve olayların düzenlenmiş diyagramları.

2) Olayların taksonomisi

Akışları ve dizinleri hedefe göre ayırın:

1. Teknik günlükler (çalışma zamanı, hatalar, ağ zaman aşımları, geri yüklemeler).

2. Ticari etkinlikler (kayıt, depozito, oran, para çekme, KYC aşaması) - ürün analizleri ve "para" yollarındaki olaylar için uygundur.

3. Denetim (kim/ne zaman neyi değiştirdi: yapılandırır, erişir, bayraklar, sınırlar) değişmez bir dergidir.

4. Güvenlik (kimlik doğrulama, ayrıcalık yükseltme, yaptırım/PEP bayrakları).

5. Altyapı (K8s olaylar, otomatik ölçekleme, HPA/VPA, düğümler/disk/ağ).

Her akış için - tutma, dizinleme ve erişim için ayrı kurallar.


3) Yapısal kütük (JSON standardı)

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

Gereksinimler: düz şema + alana göre ekler, gerekli alanlar ('ts, seviye, servis, env, trace_id, msg'), sayısal değerler - sayılar, dizeler değil.


4) Seviyeler, kardinalite ve kapsam

Düzeyler: 'DEBUG' (satışta değil), 'INFO' (iş bilgileri), 'WARN' (anomaliler), 'ERROR' (hatalar), 'FATAL' (çökmeler).
Kardinalite: rastgele tuşlardan/dinamik etiketlerden kaçının. "Anahtar içinde kimlik" yok.
Örnekleme günlükleri: hız sınırı yinelenen mesajlar; 'DEBUG' özelliğini yalnızca kapsamlı ve zamanında etkinleştirin (özellik bayrağı).
Idempotency: Tüketiciler tarafından yinelenen olayları bastırmak için 'idempotency _ key' yazın.


5) Gizlilik ve güvenlik

Maske PII/ajanların sırları (Fluent Bit/Vector): anahtar maskeleme kartları ('e-posta ',' kart ',' belirteç ',' yetkilendirme ').
Hash 'user _ key', yalnızca gerekli bağlamı tutar (ülke, KYC düzeyi, VIP düzeyi).
Ayrı depolar: sıcak (çevrimiçi arama) ve soğuk (PII olmadan/soyulmuş bir bağlamla arşiv).
Denetim - yalnızca ekleme, WORM depolama, yalnızca en az ayrıcalık ilkesine erişim.


6) İzleme: standartlar ve bağlam

W3C Trace Bağlam: 'Traceparent'/' tracestate' başlıkları, artı güvenli anahtarlar için bagaj (örn. 'tenant _ id', 'bölge').
Bağlantı metrikleri ve izleri: Örnekler - histogramların örnekleme noktalarına 'trace _ id' iletin (RCA'yı hızlandırır).
Örnekleme: temel örnekleme 1-5 % + dynamic "on error/slow p95" problem sorguları için %100'e kadar.
Bağlantılar: Asenkron kuyruklar/sagalar için, bağlantı sadece 'üst'değil,' bağlantılar 'üzerinden yayılır.


7) Toplama ve yönlendirme

Ajan: Günlükler için Akıcı Bit/Vektör; OTLP, OpenTelemetry Collector'a dışa aktarılır.
Toplayıcı: merkezi ağ geçidi (toplu/dönüştürme/filtre/yönlendirme).

Önerilen konveyör:

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 Toplayıcı (parça):
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) Enstrümantasyon: SDK örnekleri

8. 1 Düğüm. 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 - üstbilgi izleme

nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;

9) Uyarılar ve otomatik işlemler için bir sinyal olarak günlükler

Hatalı desenler ('psp _ decline', 'fraud _ flag') toplanır ve SLO ile ilişkilidir.

Desen hızı ile ilgili uyarılar: "5xx by/withdraw> 0. 10 m başına %5", "fraud_flag spike> tabanın + %200'ü"

Otomatik eylemler: günlük 'withdrawals _ manual _ mode = true'ise, bayrak platformu üzerinden kill-switch'i etkinleştirin.

Örnek kural (sözde ifade):

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

10) Tutma, endeksleme, depolama

Sıcak: 7-14 gün (operasyonel soruşturma).
Sıcak: 30-90 gün (eğilimler, RCA).
Soğuk: 180-365 + (arşiv, denetim) - sıkıştırma, ucuz sınıflar, muhtemelen tam metin arama olmadan.
İndeksleme: sabit anahtarlar ('service, env, level, event, trace_id, user. tenant_id'), "arka arkaya her şey" endeksinin yasaklanması.
Olay boyutu sınırları (örneğin, ≤ 32KB), trim/alt: "ekstra depolama MTTR düşmanıdır".


11) Denetim ve değişmezlik

Denetim olaylarını imzalar/hash'ler, sunucu zamanı,'kim/ne/ne/ne/neden ", bilete bir bağlantı içeren ayrı bir akışta yazın.
"Bonus bayrağını DE'ye %100 kim dahil etti?" - Cevap 1-2 istekte olmalıdır.

Denetim örneği:
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) İş Etkinlikleri ve Veri Modeli

İş etkinlikleri "günlüklerde metin'değil, bir sözleşmedir:
  • 'event _ type', 'event _ id', 'occured _ at', 'actor', 'subject', 'amount', 'currency', 'status', 'idempotency _ key'.
  • Idempotent tüketicilerle Outbox ve'en az bir kez "kullanın.

13) Kubernetes ve boru hattı günlükleri

Diske arabellekli Sidecar/DaemonSet aracıları (ağ kesintileri sırasında).
Yönlendirme için pedlerin ek açıklamaları ('log. ',' tutma yazın. katman ').
K8s denetleyicilerin günlüklerini ayrı ayrı toplayın (küme indeksi).

Akıcı Bit:
ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) Anti-desenler

Dize günlükleri "gerektiği gibi", 'trace _ id' yokluğu.
PII/günlüklerdeki sırlar, bütünüyle yük boşaltma.
Milyonlarca benzersiz anahtar - "patladı" indeksleme.
DEBUG 7/24 satışta.
Denetim, güvenlik ve teknoloji uzmanlarını bir endekste birleştirmek.
Saklama politikası ve yedekleme kurtarma testi yoktur.


15) Uygulama kontrol listesi (0-45 gün)

0-10 gün

Ağ geçidi/istemcilerde W3C İzleme Bağlamını etkinleştirin, başlıkları iletin.
Uygulama günlüklerini JSON'a çevirin, 'trace _ id'/' span _ id' ekleyin.
PII/sırları reddedin (ajan üzerinde maskeleme), alanların listesini onaylayın.

11-25 gün

Ayrı akışlar: teknoloji/biz/denetim/güvenlik/infra, set tutma ve ACL.
OTel Collector, kuyruk örnekleme hataları/yavaş sorguları etkinleştirin.
"Log Rate/Error by route" + Jump-to-trace (Exemplars) panoları.

26-45 gün

Olay modeli uyarıları ve SLO ile korelasyon.
Soğuk günlükler için Arşiv/geri yükleme (DR testi).
CI'da log diyagramlarının linter, iş etkinlikleri için sözleşme.


16) Olgunluk metrikleri

'Trace _ id' %95 ≥ kapsama alanı talep ediyor.
JSON günlüklerinin payı %99 ≥.
"Jump-to-trace" yoluyla bulunan olaylar <15 dakika (p50) çözüldü.
Günlüklerde 0 PII durumu (sızıntı tarayıcı).
Tutma, tüm akışlar için gözlemlenir (denetimi otomatik olarak kanıtlarız).


17) Uygulamalar: Mini Snippet'ler

W3C traceparent üretimi (sözde)

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

PromQL - bir grup günlük ve SLO (örnek)


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 - korelasyon başlıkları

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

18) Sonuç

Güçlü bir günlüğe kaydetme ve izleme devresi bir anlaşma + disiplindir: yapısal JSON günlükleri, tek bir 'trace _ id', güvenli PII işleme, akışlar üzerinde yönlendirme ve tutma, ayrıca SLO, uyarı ve geri dönüşlerle yakın bağlantı. "Metinlerin dökümü'nden olay sözleşmelerine ve izlerine geçiş yapın ve üretim olaylarının teşhisi hızlı, öngörülebilir ve doğrulanabilir hale gelecektir.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.