GH GambleHub

Пайгирии тақсимшуда: Open-Telemetry

Пайгирии тақсимшуда: Open-Telemetry

1) Чаро OT bel ва он чӣ медиҳад

OpEN Telemetry (OT bel) стандарти кушода ва маҷмӯи SDK/агентҳо/коллекторҳо барои телеметрия (роҳҳо, ченакҳо, гузоришҳо) бо як протоколи OTLP мебошад. Вазифаҳо:
  • Намоёнии охири роҳҳои дархостӣ (шлюз → хизматрасонӣ → DB/кэш/навбат).
  • Таназзули зуд RCA/debug ва релизҳо (canaries/кабуд-сабз).
  • Истинод бо SLO ва худкор гардиш (қарорҳои амалиётӣ дар асоси маълумот).
  • Фурӯшанда-агностикӣ: содирот ба ҳама гуна пуштибонӣ, бидуни ҳатмӣ ба як APM.

Принсипҳои истинод: стандартизатсия, намунаи интеллектуалӣ, бо нобаёнӣ бехатар, ҳама чизро бо ҳам мувофиқ мекунанд.

2) Асосҳо: контекст, фосила, сифатҳо

Пайгирӣ - дарахти занг/график; Span - амалиёт (RPC, SQL, занги навбатӣ).
Span Kind: 'SERVER', 'CLIENT', 'PRODUCTER', 'CONSUMER', 'Дохилӣ'.
Контексти пайгирии W3C: сарлавҳаҳои 'traceparent', 'tracestate'; контекст interservice гузаронида мешавад.
Атрибутҳо - арзиши калидӣ (кардиналии паст!), Ҳодисаҳо - маркаҳои вақт, Ҳолат - рамзи хатогӣ/тавсиф.
Истинодҳо - пайванд берун аз иерархияи қатъӣ мегузарад (барои async/fan-out/fan-in муҳим аст).

Номи фосила:
  • HTTP: 'HTTP {METHOM}' ('GET/бозхонд' ҳамчун хусусият)
  • DB: 'DB SELECTE '/' DB INSERT- АПОС
  • Навбат: 'QUEUE мавзӯъро нашр мекунад = X '/' QUEUE мавзӯъро = X' истеъмол мекунад

3) Конвенсияҳои семантикӣ (семконв)

Истифодаи схемаҳои атрибути устувор:
  • HTTP/GRPC: 'http. усули ',' http. масир ',' http. status_code', 'url. пурра '.
  • DB: 'db. система = postgresql ',' db. изҳорот '(танҳо ғунҷоиши бехатар!),' Db. ном '.
  • Паёмнависӣ: 'паёмнависӣ. система = кафка ',' паёмнависӣ. амалиёт = гирифтан ',' паёмнависӣ. таъинот '.
  • Cloud/K8s/Host: 'абр. минтақа ',' k8s. подабон. ном ',' контейнер. ид '.
  • Хусусиятҳои захираҳо (зарурӣ): 'хидмат. ном ',' хидмат. версияи ',' ҷойгиркунӣ. муҳит '.

Муайян кардани устувории схема тавассути 'schemaurl' дар захираҳои SDK/Collector.

4) Интихоб: сар, дум, мутобиқшавӣ

Сарвар (дар SDK): пешакӣ, арзон қарор медиҳад; хуб барои QPS-баланд, аммо метавонад сурудҳои "ҷолиб" -ро пазмон шавад.
Думи асоси (дар коллектор): пас аз ба итмом расидани роҳ қарор қабул мекунад; қоидаҳо аз рӯи мақом, ниҳонӣ, атрибутҳо иҷозат медиҳад.
Мутобиқшавӣ/Динамикӣ: Ҳиссаи намунаро барои хатогиҳо/афзоиши p95 зиёд мекунад.

Дорухат дар сатҳи истеҳсолот: Сарвари 1-5% дар саросари ҷаҳон + Интихоби думи "муҳим": 'status = ХАТО', 'latency> p95', "хатсайрҳои пулӣ", хатогиҳои PSP/KYC.

5) Коррелятсия: ченакҳо, гузоришҳо, роҳҳо

Намунаҳо: тамғакоғазҳо бо 'trace _ id' дар гистограммаҳои метрикӣ (ҷаҳиши зуд ба суруд).
Гузоришҳо: 'trace _ id '/' span _ id' -ро илова кунед ва аз журналҳо ба пайгирӣ гузаред.
Маҷмӯаҳои Spanmetrics (протсессори) аз ченакҳои RED ('дархостҳо, хатогиҳо, давомнокӣ') барои SLO/огоҳиҳо.

6) Меъмории ҷойгиркунӣ

Agent (Daemonset) дар ҳар як гиреҳ аз барномаҳо (OTLP) ва форвардҳо ҷамъ мешавад.
Дарвоза (Кластер/Минтақа) - Коллектори марказӣ (нусхаҳои зиёд) бо қубурҳои масир/интихоб/ғанисозӣ.
OTLP: gRPC '4317', HTTP '4318'; Даргиронидани TLS/MTLS.

Ҷонибдори "агент + дарвоза": ҷудокунӣ, буферӣ, пуштибонии маҳаллӣ, шабакаи соддакардашуда.

7) Коллектори Open-Telemetry - қолаби асосӣ (дарвоза)

yaml receivers:
otlp:
protocols:
grpc: { endpoint: 0. 0. 0. 0:4317 }
http: { endpoint: 0. 0. 0. 0:4318 }

processors:
memory_limiter: { check_interval: 5s, limit_percentage: 75 }
batch: { timeout: 2s, send_batch_size: 8192 }
attributes:
actions:
- key: deployment. environment action: upsert value: prod resource:
attributes:
- key: service. namespace action: upsert value: core tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: slow_traces type: latency latency: { threshold_ms: 800 }
- name: important_routes type: string_attribute string_attribute:
key: http. route values: ["/withdraw", "/deposit"]
- name: baseline_prob type: probabilistic probabilistic: { sampling_percentage: 5 }

exporters:
otlp/apm:
endpoint: apm-backend:4317 tls: { insecure: true }
prometheus:
endpoint: 0. 0. 0. 0:9464

extensions:
health_check: {}
pprof: { endpoint: 0. 0. 0. 0:1777 }
zpages: { endpoint: 0. 0. 0. 0:55679 }

service:
extensions: [health_check, pprof, zpages]
pipelines:
traces:  { receivers: [otlp], processors: [memory_limiter,attributes,resource,batch,tail_sampling], exporters: [otlp/apm] }
metrics: { receivers: [otlp], processors: [batch], exporters: [prometheus] }
logs:   { receivers: [otlp], processors: [batch], exporters: [] }

8) Spanmetrics ва RED барои SLO

Илова кардани протсессор:
yaml processors:
spanmetrics:
metrics_exporter: prometheus histogram:
explicit:
buckets: [50ms,100ms,200ms,400ms,800ms,1600ms,3200ms]
service:
pipelines:
traces: { receivers: [otlp], processors: [spanmetrics,batch,tail_sampling], exporters: [otlp/apm] }
metrics: { receivers: [otlp], processors: [batch], exporters: [prometheus] }

Ҳоло барои 'SLO/огоҳиҳо' пайгирӣ _ spanmetrics _ calls {хидмат, маршрут, рамзи} 'ва' давомнокии _ сатил 'мавҷуданд.

9) K8s: Ҷойгиркунии коллектор (Daemonset + Deparment)

Фрагменти Agent (Daemonset):
yaml apiVersion: apps/v1 kind: DaemonSet metadata: { name: otel-agent, namespace: observability }
spec:
template:
spec:
containers:
- name: otelcol image: otel/opentelemetry-collector:latest args: ["--config=/conf/agent. yaml"]
ports:
- { containerPort: 4317, name: otlp-grpc }
- { containerPort: 4318, name: otlp-http }

Дарвоза (ҷобаҷогузорӣ) - якчанд нусхабардорӣ, Кластери хидматрасонӣ/Ingress, HPA аз ҷониби CPU/QPS.

10) Амният ва махфият

TLS/mTLS mejdu SDK → Agent → Gateway → Backend.
Аутентификатсия (Basic/OA buth/Headers) дар даромадгоҳи Gateway; пайдоиши онро маҳдуд мекунад.
Таҷдиди PII: хусусиятҳои филтр/ниқоб ('корбар. почтаи электронӣ ',' корт. ') дар протсессори коллекторӣ.
Маҳдудиятҳо: Дар SDK, андозаи ҳодиса/шумораи атрибутҳоро маҳдуд кунед (муҳофизати кардиналӣ).
RBAC дар пуштибонӣ + ҷойҳои инфиродӣ/номҳои иҷорагир.

Намунаи филтр дар коллектор:
yaml processors:
attributes/redact:
actions:
- key: user. email action: delete
- key: payment. card action: delete

11) Асбобҳо: Оғози зуд

Гиреҳ. js

js import { NodeSDK } from "@opentelemetry/sdk-node";
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
import { Resource } from "@opentelemetry/resources";
import { SemanticResourceAttributes as R } from "@opentelemetry/semantic-conventions";

const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({ url: "http://otel-agent. observability:4317" }),
resource: new Resource({
[R.SERVICE_NAME]: "payments-api",
[R.SERVICE_VERSION]: "1. 14. 2",
[R.DEPLOYMENT_ENVIRONMENT]: "prod"
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk. start();

Java (Баҳор)

java
// Gradle: io. opentelemetry. instrumentation:opentelemetry-spring-boot-starter
// application. yml otel:
service:
name: orders-api exporter:
otlp:
endpoint: http://otel-agent. observability:4317 traces:
sampler: parentbased_traceidratio sampler-arg: 0. 05

Python (ФАСТАПИ)

python from opentelemetry import trace from opentelemetry. sdk. resources import Resource from opentelemetry. exporter. otlp. proto. grpc. trace_exporter import OTLPSpanExporter from opentelemetry. sdk. trace import TracerProvider from opentelemetry. sdk. trace. export import BatchSpanProcessor

provider = TracerProvider(resource=Resource. create({"service. name":"fraud-scoring","deployment. environment":"prod"}))
provider. add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="http://otel-agent. observability:4317", insecure=True)))
trace. set_tracer_provider(provider)

Бирав

go exp, _:= otlptracegrpc. New(ctx, otlptracegrpc. WithEndpoint("otel-agent. observability:4317"), otlptracegrpc. WithInsecure())
res:= resource. NewWithAttributes(semconv. SchemaURL, semconv. ServiceNameKey. String("gateway"), semconv. DeploymentEnvironmentKey. String("prod"))
tp:= sdktrace. NewTracerProvider(sdktrace. WithBatcher(exp), sdktrace. WithResource(res), sdktrace. WithSampler(sdktrace. ParentBased(sdktrace. TraceIDRatioBased(0. 05))))
otel. SetTracerProvider(tp)

12) Асинхронӣ: навбатҳо, автобусҳо, крон

ИСТЕҲСОЛКУНАНДА/Истеъмолкунанда бо иртибот тавассути "пайвандҳо" (паёмҳо давраи зиндагии худро доранд).
Матнро ба сарлавҳаҳои иттилоот паҳн кунед ('traceparent '/' baggage').
Ҳангоми истеъмол кардани партия, як паём барои як паём эҷод кунед ё бо хусусияти 'messaging' муттаҳид кунед. партия. андоза '.
Барои cron/ҷойҳои корӣ: пайгирии нав барои иҷро + пайвандҳо ба рӯйдодҳои ибтидоӣ (агар бошад).

13) Бағоҷ ва ҳадаф

Ҳадди аққал калидҳои устуворро ('иҷорагир _ ид', 'минтақа', 'vip _ tier') дар бағоҷ нигоҳ доред; манъ PII.
Тавассути сабти дарвоза/дарвоза барои ҷамъбасти минбаъдаи ченакҳо аз рӯи сегмент тела диҳед.

14) Ҳамгироӣ бо релизҳо ва дарвозаҳои SLO

Қадамҳои канарӣ → санҷиши 'пайгирӣ _ spanmetrics _' дар хатсайрҳо/зерқисматҳо.
Ҳангоми таназзул (5xx/p95) - худкори таваққуф ва бозгашт (Argo Rollouts Analysis .Template + Prom-QL).
Мисолҳо аз ченакҳо мустақиман ба роҳҳои "бад" -и фосилаи озодкунӣ оварда мерасонанд.

15) Маҳдудиятҳо ва иҷроиш

Ограничивайте: 'OTEL _ SPAN _ ATTRUTE _ COUNT _ LIMIT', 'OTEL _ SPAN _ EVENT _ COUNT _ LIMIT', 'OTEL _ ATRIBUTE _ VALUE _ LIMENT'.
Истисноҳои намуна/stacktrace аз рӯи эҳтимолият/басомад.
Протсессори партия дар SDK ва коллектор; ҳангоми рух додани таркишҳо навбатҳоро пешгирӣ кунед.

16) Созгорпазирӣ ва муҳоҷират

Тарғиботчиён: истифодаи W3C; Дастгирии дутарафа B3/X-Ray хониш.
Содирот: OTLP → APM (Jaeger/Tempo/Elastic/X-Ray ва ғайра).
Версияҳои устувори semconv - ислоҳи 'схемаи Url' ва такмилдиҳии нақша.

17) Анти-намунаҳо

Кардиналии баланди атрибутҳо ('корбар _ ид' дар нишона, калидҳои динамикӣ).
Сабтҳо бе пайгирӣ _ id → ҳеҷ гуна робита надоранд.
Содироти бевосита аз барномаҳо ба Internet APM (бе шлюз, бе TLS/M TLS).
Ҷамъоварии "танҳо" 100% дар фурӯш гарон ва бефоида аст.
Партофтани дархостҳои SQL бо маълумоти корбар дар 'db. изҳорот '.
Номи номувофиқи хидмат/версия - ченакҳо "шикаста" мебошанд.

18) Рӯйхати назорати амалисозӣ (0-45 рӯз)

0-10 рӯз

Даргиронидани SDK/худкори асбобҳо дар 2-3 хидматҳои муҳим.
Танзимоти Агент (Daemonset) + Gateway (Ҷойгиркунӣ), OTLP 4317/4318 бо TLS.
Илова 'service. ном ',' хидмат. версияи ',' ҷойгиркунӣ. муҳит 'дар ҳама ҷо.

11-25 рӯз

Интихоби думҳо бо хатоҳо/таъхири/хатсайрҳои" пул".
Spanmetrics → Prometheus, намунаҳо ва панелҳои RED/SLO-ро дар бар мегирад.
W3C-ро тавассути дарвозаи API/NGINX/фикрию паҳн кунед; гузоришҳои коррелятсионӣ.

26-45 рӯз

Пӯшонидани навбатҳо/DB/кэш; пайвандҳо барои async.
Сиёсати нашри PII дар коллектор; маҳдудиятҳои атрибут дар SDK.
Интегратсияи дарвозаҳои SLO ва релизҳои худкор.

19) Нишондиҳандаҳои камолот

Фарогирии дархости воридотӣ бо пайгирии ≥ 95% (аз ҷумла интихоби сар/дум).
Ҳиссаи ченакҳо бо намунаҳо ≥ 80%.
Вақти RCA "аз метрика то пайгирӣ" ≤ 2 дақиқа (саҳ. 50).
0 ихроҷи PII дар сифатҳо/рӯйдодҳо (сканер).
Ҳама хидматҳо доранд. ном/версия/муҳит 'ва семантикаи пайваста.

20) Замимаҳо: пораҳои муфид

Таблиғи NGINX:
nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;
proxy_set_header baggage   $http_baggage;
Прометей с Намунаҳо (Графана):

histogram_quantile(0. 95, sum(rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m])) by (le))

Сиёсат: манъи хусусиятҳои PII (псевдо-линтер)

yaml forbid_attributes:
- user. email
- payment. card
- personal.

21) Хулоса

OpEN Telemetry мушоҳидаҳоро ба схемаи стандартӣ ва идорашаванда табдил медиҳад: семантикаи муттаҳидшуда, тарғиби бехатар, интихоби оқилона ва таносуби қавӣ бо ченакҳо ва гузоришҳо. Агент + дарвоза созед, намунаҳои думи, спанметрия ва Expermars илова кунед, PII ва кардинализмро назорат кунед - ва пайгирӣ на танҳо барои ислоҳи хатогиҳо, балки барои ҳалли автоматикии SRE/Release, коҳиш додани MTTR ва хатарҳо бо ҳар як озодкунӣ табдил меёбад.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.