GH GambleHub

التتبع الموزع: OpenTelemetry

التتبع الموزع: OpenTelemetry

1) لماذا OTEL وماذا يعطي

OpenTelemetry (OTel) هو معيار مفتوح ومجموعة من SDKs/الوكلاء/جامعي القياس عن بعد (المسارات والمقاييس والسجلات) مع بروتوكول OTLP واحد. الأهداف:
  • رؤية مسارات الطلب من طرف إلى طرف (خدمات → البوابة → DB/cache/قوائم الانتظار).
  • تحلل وإطلاقات RCA/debug السريع (الكناري/الأزرق الأخضر).
  • الربط مع SLO والتراجع التلقائي (الحلول التشغيلية على أساس البيانات).
  • البائع اللاأدري: التصدير إلى أي واجهة خلفية، دون إلزام إحدى الألغام المضادة للأفراد.

المبادئ المرجعية: توحيد، عينة ذكية، آمنة افتراضيًا، ربط كل شيء.

2) الأساسيات: السياق، الامتدادات، السمات

تتبع - استدعاء الشجرة/الرسم البياني ؛ Span - التشغيل (RPC، SQL، مكالمة قائمة الانتظار).
Span Kind: «SERVER» و «CLIENT» و «PRODUCE» و «CONSUMER» و «INTERNAL».
W3C Trace Context: 'traceparent', 'tracestate' headers; محمولة بين الخدمات.
السمات - قيمة المفتاح (الكاردينالية المنخفضة!)، الأحداث - الطوابع الزمنية، الحالة - رمز الخطأ/الوصف.
الروابط - يمتد الارتباط خارج التسلسل الهرمي الصارم (مهم لـ async/fan-out/fan-in).

يمتد التسمية:
  • HTTP: 'HTTP {METHOD}' ('GET/سحب' كسمة)
  • DB: "DB SELECT "/" DB INSERT'
  • قائمة الانتظار: 'QUEUE نشر الموضوع = X '/' QUEUE استهلاك الموضوع = X'

3) الاتفاقيات الدلالية (semconv)

استخدم مخططات السمات المستقرة:
  • HTTP/GRPC: 'http. ، 'http. الطريق، 'http. status_code'، "url. ممتلئة '.
  • DB: 'db. system = postresql ',' db. بيان '(فقط ضغط آمن!)،' db. الاسم ".
  • الرسائل: "الرسائل. النظام = كافكا '،' الرسائل. العملية = تلقي '،' الرسائل. المقصد '.
  • Cloud/K8s/Host: 'سحابة. المنطقة '،' k8s. جراب. اسم «،» حاوية. id '.
  • خصائص الموارد (المطلوبة): 'الخدمة. اسم '،' خدمة. ، 'نشر. البيئة ".

حدد استقرار المخطط عبر "schemaUrl' في موارد SDK/Collector.

4) أخذ العينات: الرأس، الذيل، التكيف

مقرها الرأس (في SDK): تقرر مسبقًا، بسعر رخيص ؛ جيد لـ QPS عالية ولكن قد يفوت المسارات «المثيرة للاهتمام».
القائمة على الذيل (في المجمع): تقرر بعد الانتهاء من المسار ؛ يسمح بالقواعد حسب المركز والكمون والسمات.
التكيف/الديناميكي: يرفع حصة العينة لـ p95 خطأ/نمو.

وصفة مستوى الإنتاج: الرأس 1-5٪ عالميًا + اختيار الذيل «مهم»: «الحالة = خطأ»، «الكمون> p95»، «طرق المال»، أخطاء PSP/KYC.

5) الارتباط: المقاييس والسجلات والمسارات

النماذج: ملصقات مع «تتبع _ معرف» في مخطط متري (قفزة سريعة إلى المسار).
جذوع الأشجار: تضاف عبارة «تتبع - معرف »/« امتداد - معرف» وتتحول من جذوع الأشجار إلى تتبع.
تتجمع SpanMetrics (المعالج) من مقاييس RED («الطلبات والأخطاء والمدة») لتتبع SLOs/التنبيهات.

6) هيكل النشر

الوكيل (DaemonSet) على كل عقدة يجمع من التطبيقات (OTLP) والأمام.
البوابة (المجموعة/المنطقة) - المجمع المركزي (العديد من النسخ المتماثلة) مع خطوط أنابيب التوجيه/أخذ العينات/التخصيب.
OTLP: gRPC '4317'، HTTP '4318' ؛ مكّن TLS/mTLS.

إيجابيات «العامل + البوابة»: العزل، التخزين المؤقت، الضغط الخلفي المحلي، الشبكة المبسطة.

7) OpenTelemetry Collector - نموذج أساسي (بوابة)

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

يوجد الآن "آثار _ spanmetrics _ مكالمات {خدمة، مسار، رمز} و" مدة _ دلو "لـ SLO/تنبيهات.

9) K8s: نشر جامع (DaemonSet + Position)

جزء العامل (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 }

البوابة (النشر) - عدة نسخ طبق الأصل، Service ClusterIP/Ingress، HPA بواسطة CPU/QPS.

10) الأمن والخصوصية

TLS/mTLS между SDK → Agent → Gateway → Backend.
التوثيق (Basic/OAuth/Headers) عند مدخلات البوابة ؛ يحد من الأصول.
مراجعة 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
// 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

بايثون (FastAPI)

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'/" الأمتعة").
عند استهلاك الدفعة، قم بإنشاء امتداد لكل رسالة أو اجمعها مع «سمة الرسائل». دفعة. '.
بالنسبة إلى cron/jobs: تتبع جديد للتشغيل + روابط للأحداث الأولية (إن وجدت).

13) الأمتعة والاستهداف

تخزين الحد الأدنى من المفاتيح الثابتة ('المستأجر _ id'، 'المنطقة'، 'vip _ tier') في الأمتعة ؛ حظر PII.
ادفع عبر مسجل البوابة/البوابة لتجميع المقاييس لاحقًا حسب القطاع.

14) التكامل مع الإطلاقات وبوابة SLO

خطوات الكناري → التحقق من 'آثار _ spanmetrics _' على الطرق/الأجزاء الفرعية.
أثناء التحلل (5xx/p95) - التوقف التلقائي والتراجع (Argo Rollouts AnalysisTemplate + PromQL).
تؤدي الحالات من المقاييس مباشرة إلى المسارات «السيئة» لفاصل الإصدار.

15) الحدود والأداء

Ограничивайте: 'OTEL _ SPAN _ SPANUTE _ COUNT _ LIMITE', 'OTEL _ SPAN _ EVENT _ LENGTH _ LIMITE'.
استثناءات العينة/المسار المكدس حسب الاحتمال/التردد.
معالج الدفعات في SDK وجامع ؛ احتفظ بطوابير لتجنب فقدان المسارات عند حدوث رشقات نارية.

16) قابلية التشغيل البيني والهجرة

أجهزة الدعاية: استخدام W3C ؛ دعم الانتشار المزدوج B3/X-Ray القراءة.
التصدير: OTLP → APM (Jaeger/Tempo/Elastic/X-Ray، إلخ.).
إصدارات ثابتة من semconv - إصلاح "schemaUrl' وترقيات الخطة.

17) الأنماط المضادة

الكاردينالية العالية للسمات («المستخدم _ المعرف» في التسمية، المفاتيح الديناميكية).
سجلات بدون أثر _ معرف → أي ارتباط.
تصدير مباشرة من التطبيقات إلى الإنترنت APM (بدون بوابة، بدون TLS/mTLS).
جمع 100٪ «فقط» في المبيعات مكلف ولا طائل من ورائه.
مقالب استفسارات SQL مع بيانات المستخدم في 'db. '.
الخدمة/اسم الإصدار غير المتسق - المقاييس «تنهار».

18) قائمة التنفيذ المرجعية (0-45 يوما)

0-10 أيام

تمكين SDK/الأجهزة الذاتية على 2-3 الخدمات الحيوية.
عامل التهيئة (DaemonSet) + البوابة (النشر)، OTLP 4317/4318 مع TLS.
أضف خدمة. اسم '،' خدمة. ، 'نشر. في كل مكان.

11-25 يومًا

أخذ العينات عن طريق الأخطاء/زمن الانتقال/طرق» النقود».
SpanMetrics → Prometheus، تشمل نماذج ولوحات تحكم RED/SLO.
نشر W3C من خلال بوابة API/NGINX/الشبكة ؛ جذوع الأشجار المترابطة.

26-45 يومًا

تغطية الطوابير/DB/المخبأ ؛ روابط لـ async.
وسياسات إصدار PII في Collector ؛ حدود السمات في SDK.
دمج بوابات SLO للإطلاقات والتراجع التلقائي.

19) مقاييس النضج

تغطية الطلب الوارد مع تتبع ≥ 95٪ (بما في ذلك أخذ العينات الرأس/الذيل).
حصة المقاييس مع النماذج ≥ 80٪.
time RCA «from metric to trace» ≤ 2 min (p50).
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))

السياسة: حظر خصائص مؤشر الاستثمار الدولي (البطانة الزائفة)

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

21)

يحول OpenTelemetry إمكانية الملاحظة إلى دائرة موحدة يمكن التحكم فيها: الدلالات الموحدة، والانتشار الآمن، وأخذ العينات الذكية، والارتباط القوي مع المقاييس والسجلات. قم ببناء وكيل + بوابة، وإضافة عينات الذيل، وقياسات الامتداد والممتحنات، ومراقبة PII والكاردينالية - وسيصبح التتبع أداة ليس فقط للتصحيح، ولكن أيضًا لحلول SRE/Release الآلية، وتقليل MTTR والمخاطر مع كل إصدار.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.