Συμβάντα καταγραφής και εντοπισμού
Συμβάντα καταγραφής και εντοπισμού
1) Σκοπός και πλαίσιο
Τα αρχεία καταγραφής και τα μονοπάτια είναι τα θεμέλια της παρατηρησιμότητας.
Τα αρχεία καταγραφής απαντούν στο «τι συνέβη» και «με ποιο πλαίσιο».
Τα ίχνη απαντούν στο «πού και γιατί αργά/εσφαλμένα» σε μια κατανεμημένη διαδρομή ερωτήσεων.
- Δομημένα εξ ορισμού (JSON). Πρώτο ίχνος: κάθε ημερολόγιο στην καυτή διαδρομή δεσμεύεται στο 'trace _ id '/' span _ id'.
- Ελάχιστο θόρυβο, μέγιστο σήμα: επίπεδα, δειγματοληψία, αντιπαραγωγικότητα.
- Ασφάλεια και προστασία της ιδιωτικής ζωής: κάλυψη, επεξεργασία, έλεγχος πρόσβασης.
- Επαληθευμένα διαγράμματα αρχείων καταγραφής και γεγονότων.
2) Ταξινόμηση γεγονότων
Χωριστές ροές και δείκτες ανά προορισμό:1. Τεχνικά αρχεία καταγραφής (χρόνος λειτουργίας, σφάλματα, χρονοδιαγράμματα δικτύου, retrays).
2. Επιχειρηματικά γεγονότα (καταχώριση, κατάθεση, ποσοστό, απόσυρση, στάδιο KYC) - κατάλληλα για την ανάλυση προϊόντων και συμβάντα κατά μήκος διαδρομών «χρήματος».
3. Ο έλεγχος (ποιος/όταν άλλαξε τι: συνθέσεις, πρόσβαση, σημαίες, όρια) είναι ένα αμετάβλητο ημερολόγιο.
4. Ασφάλεια (εξακρίβωση ταυτότητας, κλιμάκωση προνομίων, κυρώσεις/σημαίες PEP).
5. Υποδομή (K8s εκδηλώσεις, αυτόματη κλιμάκωση, 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, επίπεδο, υπηρεσία, env, trace_id, msg'), αριθμητικές τιμές - αριθμοί, όχι συμβολοσειρές.
4) Επίπεδα, πληθικότητα και πεδίο εφαρμογής
Επίπεδα: 'DEBUG' (όχι στις πωλήσεις), 'INFO' (επιχειρηματικά γεγονότα), 'WARN' (ανωμαλίες), 'ERROR' (σφάλματα), 'FATAL' (συντριβές).
Πληθικότητα: αποφυγή αυθαίρετων κλειδιών/δυναμικών ετικετών. Δεν υπάρχει «id-in-key».
Κούτσουρα δειγματοληψίας: επαναλαμβανόμενα μηνύματα ορίου ταχύτητας. Ενεργοποίηση του «DEBUG» μόνο σε εύρος και σε χρόνο (σημαία χαρακτηριστικών).
Idempotency: Log 'idempotency _ key' για την καταστολή των διπλών γεγονότων από τους καταναλωτές.
5) Προστασία της ιδιωτικής ζωής και ασφάλεια
Μάσκα PII/μυστικά σε πράκτορες (Fluent Bit/Vector): κάρτες μάσκας κλειδιών ('email', 'card', 'token', 'εξουσιοδότηση').
Hash 'χρήστης _ κλειδί', κρατήστε μόνο το απαιτούμενο πλαίσιο (χώρα, επίπεδο KYC, VIP-βαθμίδα).
Ξεχωριστές αποθήκες: θερμή (online αναζήτηση) και κρύο (αρχείο χωρίς PII/με απογυμνωμένο πλαίσιο).
Έλεγχος - μόνο προσθήκη, αποθήκευση WORM, πρόσβαση μόνο βάσει της αρχής του ελαχίστου προνομίου.
6) Ιχνηλάτηση: πρότυπα και πλαίσιο
Πλαίσιο ιχνών W3C: κεφαλίδες «traceparent »/« tracestate», συν αποσκευές για ασφαλή κλειδιά (π.χ. "tenant _ i ," περιφέρεια ").
Μετρήσεις και ίχνη ζεύξης: Παραδείγματα - πέρασμα 'trace _ i στα σημεία δειγματοληψίας των ιστογραμμάτων (επιταχύνει την RCA).
Δειγματοληψία: βασική δειγματοληψία 1-5% + δυναμική «σε σφάλμα/αργή p95» έως 100% για προβληματικά ερωτήματα.
Σύνδεσμοι: Για ασύγχρονες ουρές/sagas, η σύνδεση εκτείνεται μέσω «συνδέσμων», όχι μόνο «γονέων».
7) Συλλογή και δρομολόγηση
Παράγοντας: Fluent Bit/Vector για κορμούς. Εξαγωγή του OTLP στο OpenTelemetry Collector.
Συλλέκτης: κεντρική πύλη (παρτίδα/μετασχηματισμός/φίλτρο/δρομολόγηση).
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 (θραύσμα):
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 Κόμβος. 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) Καταχωρίσεις ως σήμα για καταχωρίσεις και αυτόματες ενέργειες
Τα εσφαλμένα πρότυπα («psp _ decline», «απάτη _ flag») αθροίζονται και συσχετίζονται με την SLO.
Προειδοποιήσεις σχετικά με την ταχύτητα μοτίβου: "5xx by/record> 0. 5% ανά 10m", "fraud_flag ακίδα> + 200% της βάσης"
Αυτόματες ενέργειες: εάν το ημερολόγιο είναι 'withdrawals _ manual _ mode = true', ενεργοποιήστε το kill-switch μέσω της πλατφόρμας σημαίας.
Παράδειγμα κανόνα (ψευδοέκφραση):
rate(count_over_time({service="payments-api", level="ERROR", event="psp_decline"}[5m])) > 5
10) Διατήρηση, ευρετηρίαση, αποθήκευση
7-14 ημέρες (επιχειρησιακή έρευνα).
Θερµοκρασία: 30- 90 ηµέρες (τάσεις, RCA).
Κρύο: 180-365 + (αρχείο, έλεγχος) - συμπίεση, φτηνές τάξεις, πιθανώς χωρίς αναζήτηση πλήρους κειμένου.
Ευρετηρίαση: σταθερά κλειδιά ('service, env, level, event, trace_id, χρήστης. , απαγόρευση του δείκτη «όλα στη σειρά».
Όρια μεγέθους γεγονότων (π.χ. ≤ 32KB), κοπή/κάτω: «επιπλέον στην αποθήκευση είναι ο εχθρός του MTTR».
11) Έλεγχος και αμετάβλητο
Εγγραφή γεγονότων ελέγχου σε ξεχωριστό ρεύμα με υπογραφές/hashes, χρόνο διακομιστή, «ποιος/τι/πότε/γιατί», σύνδεσμος με το εισιτήριο.
«Ποιος συμπεριέλαβε τη σημαία μπόνους 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 _ i ,' appened _ at ',' actor ',' subjec , 'action', 'country', 'status', 'idempotency _ key'.
- Χρησιμοποιήστε το Outbox και «τουλάχιστον μία φορά» με ευφυείς καταναλωτές.
13) Kubernetes και κορμοί αγωγών
Παράγοντες Sidecar/DaemonSet με ρυθμιστικό διάλυμα προς δίσκο (κατά τη διάρκεια διακοπών δικτύου).
Σημειώσεις μαξιλαριών για δρομολόγηση ('log. τύπος ',' κατακράτηση. βαθμίδα ').
Συλλέγονται χωριστά τα αρχεία καταγραφής των ελεγκτών K8s (δείκτης συστάδων).
ini
[FILTER]
Name modify
Match
Remove authorization, password, card_number
14) Αντι-μοτίβα
Καταγραφές συμβολοσειρών «κατά περίπτωση», απουσία 'trace _ id'.
PII/μυστικά στα κούτσουρα, το ωφέλιμο φορτίο χάνει στο σύνολό του.
Εκατομμύρια μοναδικών κλειδιών → «εκρηκτική» ευρετηρίαση.
Αποσφαλμάτωση στην πώληση 24/7.
Ανάμειξη του ελέγχου, της ασφάλειας και των τεχνολόγων σε έναν δείκτη.
Δεν υπάρχει πολιτική διατήρησης ούτε εφεδρική δοκιμή ανάκτησης.
15) Κατάλογος ελέγχου εφαρμογής (0-45 ημέρες)
0- 10 ηµέρες
Ενεργοποιήστε το πλαίσιο W3C Trace για πύλη/πελάτες, προωθώντας κεφαλίδες.
Μετάφραση αρχείων καταγραφής εφαρμογών σε JSON, προσθήκη 'trace _ id '/' span _ id'.
Αρνηθείτε το PII/μυστικά (συγκαλύπτοντας τον πράκτορα), εγκρίνετε τον κατάλογο των πεδίων.
11- 25 ηµέρες
Χωριστές ροές: τεχνολογία/biz/έλεγχος/ασφάλεια/infra, διατήρηση σετ και ACL.
Ενεργοποίηση συλλεκτών OTEL, σφάλματα δειγματοληψίας ουράς/αργές ερωτήσεις.
Dashboards «Log Rate/Error by route» + Jump-to-trace (Exemplars).
26 - 45 ηµέρες
Προειδοποιήσεις και συσχέτιση συμβάντων με την SLO.
Αρχείο/αποκατάσταση (δοκιμή DR) για ψυχρούς κορμούς.
Linter των διαγραμμάτων καταγραφής σε CI, σύμβαση για επιχειρηματικές εκδηλώσεις.
16) Μετρήσεις διάρκειας
'Trace _ i request coverage 95%.
Το μερίδιο των κορμών JSON ≥ 99%.
Περιστατικά που βρέθηκαν μέσω «άλματος σε ίχνος» επιλύθηκαν <15 λεπτά (p50).
0 κρούσματα PII σε κούτσουρα (σαρωτής διαρροής).
Παρατηρείται διατήρηση για όλες τις ροές (αποδεικνύουμε αυτόματα τον έλεγχο).
17) Εφαρμογές: Mini Snippets
Παραγωγή ιχνοστοιχείων W3C (ψευδο)
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, ένα ενιαίο «trace _ id», ασφαλής επεξεργασία PII, δρομολόγηση και διατήρηση πάνω από ρεύματα, καθώς και μια στενή σύνδεση με SLO, συναγερμός και rollbacks. Να καταστεί ταχεία, προβλέψιμη και επαληθεύσιμη η μετάβαση από την «απόρριψη κειμένων» σε συμβάσεις και τροχιές εκδηλώσεων και η διάγνωση περιστατικών παραγωγής.