المستوى المطلوب: متوسط — هذا المقال يفترض إنك تعرف الـ Microservices بشكل عام، شغّلت تطبيق Python أو Node على الإنتاج، وعندك فكرة عن Logging و Metrics. لو لسه ما عملتش deploy لـ microservice واحدة، ابدأ بمقال أساسي قبل ده.
لو الطلب في تطبيقك بيمر على 14 microservice وفجأة P95 latency طلع من 280ms لـ 3.2 ثانية، الـ logs العادية مش هتقولك المشكلة فين بالظبط. OpenTelemetry بيرسم رحلة الطلب كاملة في شكل شلال (waterfall) ويوريك السيرفس اللي بيستهلك 2.1 ثانية من الـ 3.2، وبيخلّيك تشخّص الـ regression في دقيقتين بدل 47 دقيقة.
OpenTelemetry للمتوسط: من الـ Logs المبعثرة لـ Trace شلال واحد
المشكلة باختصار
لو عندك e-commerce فيه 14 microservice (auth، cart، pricing، inventory، payment، shipping، notification…)، وطلب checkout واحد بيلمس 9 منهم، الـ logs العادية بترجّع 9 سجلات منفصلة في 9 أماكن منفصلة، بدون أي ربط بينهم. مفيش طريقة تعرف هل المشكلة في pricing service ولا في inventory ولا في الـ DB call جوّا inventory نفسه.
الـ Distributed Tracing بيحل الموضوع ده عن طريق إن كل طلب بياخد trace_id واحد فريد، وكل خطوة بتاخد span_id مربوط بالـ parent، فالنتيجة شجرة كاملة بتقولك بالظبط أي خطوة استهلكت قد إيه ومين كلّف مين.
المفهوم بمثال محقق الشرطة (للمبتدئ تماماً)
تخيّل إن في جريمة حصلت في فندق 14 طابق، والمشتبه به مر على 9 طوابق قبل ما يهرب. لو سألت كل موظف ريسبشن لوحده، كل واحد هيقولك "أيوه شفت حد عابر"، بس مفيش حد يعرف الترتيب أو الوقت اللي قضاه في كل طابق. النتيجة فوضى.
دلوقتي تخيّل إن كل موظف بيكتب وقت الدخول والخروج بتاع المشتبه به في نفس دفتر مركزي بنفس رقم القضية. المحقق يفتح الدفتر، يبص على رقم القضية ده، ويرسم خط زمني كامل في دقيقتين: 14 دقيقة في الطابق الخامس، 22 ثانية في الطابق السابع، 3 دقايق في الطابق العاشر. بكدا عرف فين المشتبه به اتأخر.
الـ trace_id هو رقم القضية، الـ span_id هو السطر اللي كل موظف بيكتبه، والـ parent_span_id بيقولك مين كلّف مين (موظف الاستقبال كلّم موظف الطابق العاشر، اللي كلّم موظف غرفة الخدمات).
التعريف العلمي الدقيق
OpenTelemetry (اختصاراً OTel) هو CNCF Graduated Project (تخرّج 2024) ومعيار صناعي بينتج عن دمج مشروعَي OpenTracing و OpenCensus. بيوفّر SDKs لـ 11 لغة برمجة، و Collector واحد بيستقبل البيانات بـ بروتوكول OTLP ويبعتها لأي backend (Jaeger، Grafana Tempo، Datadog، New Relic، Honeycomb).
التعريف الرسمي من توثيق OpenTelemetry: الـ Trace هو DAG (Directed Acyclic Graph) من Spans. كل Span فيه: name، start_time، end_time، attributes (key-value)، status (OK/ERROR)، و events (نقاط زمنية محددة جوّا الـ span). الفكرة الأصلية رجعت لورقة ، وهي اللي ألهمت Zipkin و Jaeger وكل الأنظمة اللي بعدها.