Observability и trace sampling
1) Эмне үчүн Observability
Observability (O11y) үч суроого жооп берет: эмне болуп жатат, эмне үчүн, аны кантип чечүү керек. Ал 4 сигнал таянат:- Метрика (агрегаттар, тез жооп);
- Логи (бөлүктөрү жана forensics);
- Tracks (себептик байланыштар аркылуу);
- Профилдер (CPU/heap/lock contention prod режиминде).
Ачкыч: сигналдардын ортосундагы корреляция + телеметрия экономикасы (самплирлөө, ретенция, кысуу).
2) Сигналдардын картасы жана принциптери
2. 1 RED/USE
RED (API үчүн): Rate (RPS), Errors (% 5xx/4xx маанилүү), Duration (p50/p95/p99).
USE (ресурстар үчүн): Utilization, Saturation, Errors (NIC, CPU, диск, кезек).
2. 2 Продукт Invariant
SLO аныктоо (мисалы, "p95 жашыруун "/v1/payments '≤ 300 ms, туура эмес бюджет 0. 30 күндүн ичинде 5%"). Алерталар SLO бузулганда же күйүп кеткенде гана "кыйкырышы" керек.
2. 3 Контекст
W3C Trace Context ('traceparent', 'tracestate') жана ошол/бизнес атрибуттарын (мисалы, 'tenant', 'region', PIIсиз) коопсуз өткөрүп берүү үчүн багажды киргизиңиз.
3) Байкоо архитектурасы
SDK/Auto Instrumentation: OpenTelemetry (OTel) кызматтарында (HTTP/gRPC/DB/кардарлар).
OTel Collector шин катары: кабыл алуу → байытуу → эскиз → экспорт (Prometheus, Tempo/Jaeger, Loki/ELK, ClickHouse).
- Метрика: Prometheus/Mimir/VictoriaMetrics;
- Соода: Tempo/Jaeger/Zipkin;
- Loki: Loki/ELK/Vector → S3 + арзан сактоо;
- Profiles: Pyroscope/Parca.
- Корреляция: кызматтардын графалары, exemplars, p99 графиктен конкреттүү соодага өтүү.
4) Сэмплинг Трейдинг: стратегиялар
4. 1 Head-based sampling (кире бериште, жыйынтык билүү чейин)
Жөнөкөй жана арзан ишке ашыруу (SDK/ingress).
кемчиликтери: сейрек ката/жай суроо сагынам болот.
Качан: жогорку RPS, катуу бюджеттер, алдын ала үлүшүн талап кылынат (мисалы, 1-5%).
4. 2 Tail-based sampling (натыйжасын билип чыгуу)
чечим Span аяктагандан кийин Collector кабыл алынат.
Аномалияларды: каталарды, p99, конкреттүү роуттарды/тенанттарды тандап алууга кепилдик берилет.
Кемчиликтери: буферизация, татаал жана кымбат.
Качан: орточо наркы менен "маанилүү" соода керек.
4. 3 Combo модели
Global Head 1-5%, плюс tail эрежелери: "ар дайым каталарды сактоо/slow-span", "50% canary-traffic sample", "окуя болгон учурда бардык тендер төлөм жолдорун сактоо".
5) Динамикалык самплирлөө жана телеметрия бюджети
Budget-aware: көлөмүн кармап туруу ≤ N соода/мин; ашканда - босоголорду көтөрүү (мисалы, p99 гана тандоо. 5+, error-only).
Rules by route/tenant: маанилүү эндпоинттер/тенанттар - көбүрөөк үлүшү менен.
Адаптивдүү терезелер: жарылуулар → каталардын үлүшүн убактылуу көбөйтүү/жай.
Кардиналдыкты азайтуу: колдонуучу-агентти, IP/ASN, squash stack traces нормалдаштыруу, сырларды жашыруу.
6) Конфиги
6. 1 OpenTelemetry Collector - tail-sampling
yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }
processors:
batch: { send_batch_size: 8192, timeout: 2s }
tail_sampling:
decision_wait: 5s num_traces: 100000 expected_new_traces_per_sec: 5000 policies:
- name: always-error type: status_code status_code: { status_codes: [ERROR] }
- name: slow-endpoints type: latency latency: { threshold_ms: 300 } # p95 цель
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/v1/payments", "/v1/payouts"] }
- name: tenant-eu1 type: string_attribute string_attribute: { key: tenant, values: ["eu-1"] }
- name: probabilistic-default type: probabilistic probabilistic: { sampling_percentage: 5. 0 }
exporters:
otlphttp/tempo: { endpoint: http://tempo:4318 }
prometheus: { endpoint: "0. 0. 0. 0:9464" }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tail_sampling]
exporters: [otlphttp/tempo]
6. 2 Prometheus - exemplars (үзүндү)
Тиркемеде гистограммаларды жазууда exemplars 'trace _ id' менен кошуңуз. Жылы Grafana "ийне" боюнча чыкылдатуу менен соода алып келет.
yaml scrape_configs:
- job_name: api scrape_interval: 10s honor_labels: true static_configs: [{ targets: ["api:9100"] }]
exemplar_limit: 10
6. 3 Loki - Логдордун наркын төмөндөтүү
Tags гана туруктуу ('service', 'env', 'region', 'route _ class').
Жогорку кардиналдуулук (request_id, user_id) - payload, бирок redaction менен.
"Ийгиликтүү" маалымат логторду семплирлөө, бардык каталарды/эскертүүлөрдү сактоо.
6. 4 Jaeger/Tempo - retenshn жана индекси
Чийки сооданы 3-7 күн, агрегаттарды/симметрияларды - узакка сактаңыз.
арзан сактоо parquet/blocks (S3-шайкеш), индекстер - компакт.
7) Trace моделдөө
7. 1 Аталышы жана атрибуттары
`service. name`, `service. version`, `deployment. environment`.
`http. method`, `http. route`, `http. target`, `http. status_code`, `net. peer. name`.
PII жок бизнес атрибуттары: 'tenant', 'region', 'payment _ provider', 'game _ id'.
7. 2 Окуялар жана байланыштар
Span events: маанилүү чекиттер (DB бүтүмдөрдүн башталышы, retray, circuit open, cache miss).
Шилтемелер: байланыш суроо → вебхук/окуя; EDA жана outbox/inbox үчүн пайдалуу.
7. 3 нускалары (exemplars)
Гистограммаларга latency/size 'trace _ id' менен мисалдарды кошуңуз: навигация "метрикадан → трейске" бир чыкылдатуу менен.
8) Метрика: кандай жана кантип
8. 1 Техникалык
Каттамдар/тенанттар/провайдерлер боюнча RED (PSP, KYC).
Пулы: `db_connections_in_use`, `http_client_in_flight`, `queue_depth`.
Турукташтыруу: retries, timeouts, circuit open/half-open, rate-limit hits.
Go/Java/Python runtime: GC тыныгуу, heap, safepoints, GIL-кечигүү.
8. 2 Бизнес-метрика
Каттоо/логиндер/депозиттер/корутундулар, конверсия, 3DS/KYC мүчүлүштүктөрү, chargeback-ratio.
Маанилүү ficks: time-to-wallet, success-rate payout.
8. 3 кардиналдуулук жана сактоо
ачык buckets менен гистограммалар (мисалы, '50,100,200,300,500,1000,2000] ms').
Жогорку кардиналдуу белгилерден качуу (raw user_id, request_id) - логиге/соодага алып чыгуу.
9) Логи: стандарттар жана корреляция
Формат: JSON + керектүү ачкычтар ('timestamp', 'level', 'message', 'trace _ id', 'span _ id', 'service', 'env').
Редакциялоо: PAN, токендер, PIIлерди жашыруу.
Семплинг: 100% үчүн 'error/warn', 5-20% үчүн 'info' үчүн "ызы-чуу" жолдорунда.
Trading - аркылуу 'trace _ id'. Log-саптар → "pivot" соода жана тескерисинче.
10) Прод профайлинг
CPU/heap/alloc/locks үчүн continuous profiling (Pyroscope/Parca) кирет.
p99 чокуларын ысык айнек менен байланыштырыңыз; 7-14 күн сактоо.
11) SLO/туура эмес бюджет боюнча Алертинг
SLO-алерталар: "туура эмес бюджет Х %/сааттан тез сарпталат" (алдын ала алерталар).
Белгилери, себеп эмес: кардардын денгээлде alertite (RUM/edge же per-rout) эмес, CPU.
Multi-window, multi-burn rate: 1 саат үчүн 2% жана 6 саат үчүн 5% - эки шарт.
Пландаштырылган деградацияларда жымжырттык: фич-желектерде/канареяда босоголордун жылышы.
12) Наркы жана retenshn
Көлөмү боюнча квоталар: соода ≤ N ТБ/ай, loi - ысык 3-7 күн, муздак S3 30-90 күн, метрика - downsampling (1 мин → 5 мин → 1 саат).
Tail-rules ката/жай сактоо менен × 10- × 100 көлөмүн азайтат.
Минималдуу наркы бар сигналдар - метрика; жогорку баалуулугу менен - "туура" соодалар жана профилдер.
13) Антипаттерндер
"100% ар дайым соода" → жарылуу наркы, ызы-чуу жана тормоз.
ачкычтары/жашыруу жок эркин түрдө Логи.
Чексиз лейблдер менен Metrics (user_id/ip/full UA).
Жок 'traceparent '/' baggage' - корелляция мүмкүн эмес.
CPU/heap ордуна SLO боюнча Alerts - чат "күйүп" эч кандай пайда.
"Rand 1%" менен артыкчылыктуу каталар/slow - баалуу учурларда жоготуп.
14) Дашборд мисалдары (скелеттер)
API Overview: RPS, error-rate класстары, latency p95/p99 (exemplars clickable), топ-роуттар.
Release/Canary: эски/жаңы версия метрика салыштыруу, outlier-rate, open-circuits, retries.
PSP/KYC: success-rate боюнча провайдерлер, latency жана баш тартуу, payout-каталар менен байланыш.
Infra: ресурстары боюнча USE, кезектерди сатураттоо, тармактык тамырлар.
15) iGaming/каржы өзгөчөлүктөрү
Критикалык жолдор (депозиттер/корутундулар): 100% гана окуялар же чектелген терезелер менен соода; штаттык режимде - tail "бардык ката/узак жашыруун".
Аймак/Тенант: кошуу 'tenant', 'jurisdiction', 'brand' in baggage; SLOну юрисдикция боюнча куруп.
Антифрод/бот чыпкасы: тобокелдик API (allow/deny/challenge), challenge-pass-rate, velocity-hits.
Аудит/комплаенс: PII жок, минималдуу зарыл сактоо; өзгөрүлбөс журналдар - өзүнчө контурда.
16) Prod-даярдык чек тизмеси
- Аркылуу үгүттөө ('traceparent', 'baggage'), логдордун/метриктердин/соодалардын корреляциясы.
- tail-sampling менен OTel Collector (errors/slow/маанилүү роутер) + probabilistic default.
- RED/USE метрика, ачык buckets, exemplars → трасса өтүү.
- SLO жана туура эмес бюджет боюнча алертинг (эки убакыт шкаласы).
- Ретенциянын регламенттери жана телеметрия бюджети; downsampling метрик; Логиндер үчүн cold storage.
- Стандартташтырылган JSON журналы, redaction PII/сырлар.
- Профайлинг кирет; окуя боюнча "ысык" стэктерди
- Канар тактайчалар жана салыштыруу; "сокур зоналары" жок чыгаруу.
- Runbook: окуя учурунда убактылуу үлгү үлүшүн жогорулатуу үчүн.
- Документация нейминга атрибуттар/белгилер жана тыюу high-cardinality.
17) TL; DR
Корреляциянын айланасында байкоо түзүңүз: RED/USE → exemplars → Traces → логи/профилдер. Комбинацияланган үлгү аркылуу бааны башкаруу: кичинекей head% + tail эрежелери (каталар, жай, маанилүү каттамдар/тенанттар). Алерталар - SLO жана каталардын бюджети боюнча. Ретенцияны жана кардиналдуулукту көзөмөлгө алып, "борбордук нерв системасы" катары OTel Collector колдонуңуз. Төлөм/юрисдикция жолдору үчүн - артыкчылыктуу телеметрия жана катуу маалымат гигиенасы.