تخطَّ إلى المحتوى

eBPF الرؤية في 2026: Continuous Profiling و مراقبة ما وكلاء الذكاء الاصطناعي بالفعل يفعلون

· 13 min read · default
monitoringebpfobservabilityprofilingailinux

الطريقة التقليدية إلى profile مشكلة الإنتاج له dependance محرج: أنت لديك إلى بالفعل الاشتباه بأنه. شيء يبدو بطيء أنت attach profiler أنت حاول reproduce شرط و — إذا كنت محظوظ و المشكلة ما زالت يحدث — أنت التقط البيانات. فشل الوضع واضح و شائع. الحادث حدث في 3 أ.م. و آخر أربع دقائق و بـ الوقت أي شخص نظر البيانات كانت ذهبت. أنت أضفت logging أمل إنه يعود و انتظر.

eBPF غيرت الاقتصاديات بـ كافي إلى معكوسة سير العمل. لأن eBPF برامج تشغيل داخل kernel في verified sandbox يمكنهم ملاحظ syscalls و scheduling و مكدسات عبر كل عملية على آلة في overhead منخفضة بما فيه الكفاية — باستمرار أقل من 1٪ — إلى ترك تشغيل بشكل دائم. هذا يحول profiling من شيء تنت ابدأ إلى شيء تنت الاستعلام: البيانات ل 3 أ.م. موجود بالفعل. هذا الدليل يغطي هذا الإزاحة عبر Parca Agent ل continuous profiling و تطبيق أحدث الذي نشأ كـ autonomous agents تتكاثر — استخدام نفس kernel-level الرؤية لـ أن نر ما و AI agent بالفعل فعلت عبر أدوات مثل AgentSight.

لماذا eBPF جعل always-on قابل للحياة

السبب التقني continuous profiling كان غير عملي قبل هو أن الخيارات الأقدم كل impose الضريبة تنت لن تدفع بشكل دائم. Sampling profilers المبني على perf رخيص لكن تتطلب الإعداد لكل الهدف و ينتج بيانات تنت يجب أن تدير نفسك. Instrumented profilers تتطلب تغييرات الكود و أضفت per-call overhead. Language-specific الوكلاء تغطي runtime واحد و غالباً ما تقدم overhead الخاصة بهم. لا شيء منهم كانت أشياء تنت سوف تشغيل على كل عملية على كل عقدة للأبد.

eBPF's المساهمة هي أن البرامج تشغيل في kernel space حتى جمع مكدس trace لا تحتاج context-switch إلى userspace عامل ل كل عينة و kernel's verifier staticly يثبت البرنامج لا يمكن أعطل النظام أو loop للأبد قبل إنه مسموح بالحمل. النتيجة هي kernel-level الرؤية مع الأمان يضمن و overhead في الضوضاء. بشكل أساسي إنها أيضاً zero-instrumentation: تنت لا تعديل أعادة تجميع أو إعادة تشغيل التطبيقات جرى profiled الذي يزيل الاحتكاك التنظيمي التي قتلت معظم محاولات سابقة ("نحتاج كل فريق لإضافة عامل").

هناك واحد الحقيقي المتطلب المستحق الحالة: هذا يعتمد على معقول حديثة kernel مع BTF الدعم و مكدس جودة unwinding يعتمد على الرموز ثنائيات الخاصة بك. Stripped ثنائيات الإنتاج العائد profiles كامل من hex عناوين وهذا مشكلة solvable لكن واحد تنت يجب أن تحل قبل الخروج استنتج أداة لا تعمل.

Continuous profiling في الممارسة

Parca Agent هو أوضح التعبير من الفكرة. Deployed كـ DaemonSet على Kubernetes (أو عملية على عقدة) إنها عينات مكدسات من كل عملية على تلك العقدة بشكل مستمر و علامات لهم مع pod و container و namespace البيانات الوصفية و شحنات لهم إلى خادم حيث يتم تخزينها مثل مقاييس — queryable بـ نطاق زمني و تسمية.

أن storage النموذج هو ما يجعلها مفيدة بدلاً من مجرد مثير للاهتمام. لأن profiles تسميات السلاسل الزمنية يمكنك طلب أسئلة على-demand profiling لا تستطيع الجواب. ما كان استهلاك CPU في الدفع namespace بين 03:04 و 03:08؟ Profile موجود; تنت فصل إلى نافذة. حتى أكثر قيمة هي المقارنة: diff profile من قبل deployment ضد بعد و الانحدار يظهر كـ دالة التي نمت. تنت لم تحتاج التنبؤ تنت يريد "قبل" profile — continuous collection تعني إنها دائماً هناك.

Parca يعالج mixed-language مكدسات وهذا يهم أكثر من يبدو. خدمة حديثة قد تكون Go الاستدعاء إلى C مكتبات أو Python استدعاء أصلي امتدادات و profile يحل فقط layer واحد يقول قصة مضللة. Kernel-level unwinding ترى كامل مكدس. ل deep one-off تحليل تنت ستصل بعد ل perf أو async-profiler — continuous profiling يحسن ل التغطية و التاريخ و ليس أقصى per-run التفاصيل — لكن الاستعلام اليومي من "ما هو هذا التجمع تنفقق CPU على" تُجاب بشكل مستمر و رخيص.

المشكلة الجديدة: ما فعلت الوكيل؟

التطبيق الثاني أحدث و في 2026 ومتزايدة pressing. Teams تشغيل autonomous ترميز الوكلاء و LLM الوكلاء مع الأداة الوصول على الأنظمة الحقيقية. هذه الأنظمة توفر الرؤية التي application-level: المطالبات و استدعاءات الأداة و token counts و spans. أدوات مثل Langfuse و Arize Phoenix افعل هذا بشكل جيد و هي جديرة بـ بصراحة مفيد ل الفهم وكيل التفكير.

لكن application-level tracing لها قيود البناء: إنها يعرض ما عامل framework اختار لـ report. إذا أداة ينفذ shell أمر trace يسجل الـ command string — ليس عشرة ستة العمليات ذلك spawned و الملفات أنهم لمسوا أو الاستضافة أنهم اتصلوا. إذا الوكيل مخترق بـ طلب حقن و يأخذ إجراء خارج نطاق مقصود trace يعرض الإجراء إنه روى وهذا بالضبط مصدر الحقيقة الخاطئ ل سؤال الأمان.

AgentSight تطبق eBPF هنا: ملاحظ سلوك النظام الفعلي للوكيل على kernel المستوى — تنفيذ العملية و إمكانية الوصول للملف و اتصالات الشبكة — بـ instrumentation من الوكيل على الإطلاق. وكيل لا يمكن حذف أو misreport هذه الأحداث لأنه ليس الجواب واحد عنهم. ل coding وكيل العاملة على مستودع تنت الجواب الحقيقي إلى "الملفات التي فعلت إنه تعديل" و "ما فعلت إنه تشغيل" و "فعلت يصل خارج مساحة العمل."

الموقف الصحيح هو أن هذا complementary الطبقات و ليس المنافسة. Application tracing يقول لك الوكيل قصد و التفكير; kernel tracing يقول لك إنها آثار. الربط لهم بـ timestamp يعطيك كلا النصفين: هذا ما الوكيل كان يحاول افعل و هذا ما بالفعل حدث على الآلة. ل أي شيء مع الأذونات الحقيقية المستحقة فقط النصف الأول هو فجوة.

أمان و ليس فقط الأداء

ذلك الإطار يشير في الأعم استخدم. نفس eBPF الأساس underpins أدوات أمان وقتية — Tracee و Falco و Tetragon — الذي مراقب ل kernel-level سلوك مريب و في Tetragon's حالة يمكن enforce السياسة في-kernel. مرة واحدة تنت جمع عملية و ملف و الأحداث الشبكة على كل عقدة الفرق بين "رؤية" و "الكشف" هو معظم أي أسئلة تنت اسأل البيانات.

ل وكيل أحمال عمل الخصوص أن التقارب يفيد. الأسئلة "لماذا هذا بطيء" و "ما فعلت الوكيل التغيير" و "فعلت أي شيء هروب رمل الخاص به" كل الإجابة من نفس event stream. عملياً هذا يعني تنظيم نشر الوكلاء مع النظام الوصول يجب أن يعامل kernel-level الرؤية كجزء من النشر و ليس بعد الفكر — إنها الطبقة الوحيدة التي ينتج proof قابل للتدقيق من ما عملية autonomous بالفعل فعلت.

التحذير الصريح هو الحجم. Kernel-level tracing يمكن توليد enormous event streams و naively logging كل syscall على node مشغول سوف إغراق storage و القدرة لـ تجد أي شيء. التصفية في المصدر — بـ مسار و العملية و نوع الأحداث — ليس تحسين لكن متطلب و حيث معظم operational العمل في هذه الأدوات يعيش.

قراءة profile بدون خداع نفسك

Continuous profiling ينتج الكثير من البيانات و هناك قليل موثوق الطرق إلى misread إنه. المستحقة معرفة قبل تنت عمل على flame graph.

العرض هو عينات و ليس wall-clock الكمون. CPU profile يعرض حيث CPU الوقت ذهب. إذا الخدمة بطيء لأنه انتظار — على قاعدة بيانات و قفل و network استدعاء — CPU profile قد تبدو perfectly صحية لأن thread محجوب استهلاك لا CPU. هذا واحد الخطأ الأكثر شيوعاً: الخروج إلى هناك لا مشكلة لأن CPU profile مسطح عندما المشكلة على-CPU الوقت. Wall-clock أو off-CPU profiling الجواب أن السؤال بدلاً من ذلك.

مجموع hotspots ليس بالضرورة الكمون المشكلة الخاصة بك. دالة استهلاك 30٪ من الكتلة CPU قد تكون بالكامل متوقع العمل الخلفية — serialization و ضغط و garbage جمع. الإشارة المثيرة للاهتمام هي عادة تغيير: هذه الدالة كانت 5٪ آخر أسبوع و إنها 30٪ الآن. هذا لماذا المقارنة يهم أكثر من المطلق الترتيب و لماذا continuous جمع beats واحد لقطة.

رمز الجودة يشكل الاستنتاجات. الرموز المفقودة جعل مكدسات انهيار إلى hex عناوين غير مفيدة و أسوأ يمكنهم خطأ تسند الوقت إلى closest resolvable frame — إنتاج واثق خاطئ جواب. إذا profile يلوم دالة التي جعل لا معنى الاشتباه unwinding قبل تنت الاشتباه الأكواس.

أخذ العينات له أرضية. دالة هذا تشغيل بشكل متكرر لكن جداً مختصرة قد underrepresented نسبي إلى الحقيقي التكلفة و حدث نادر لكن مكلفة قد لا تظهر على الإطلاق في نافذة قصيرة. Continuous جمع يخفف هذا بـ التجميع عبر فترات طويلة الذي حجة أخرى ل always-on أكثر من on-demand.

العادة العملية: استخدم profile ل شكل فرضية ثم تأكيد إنه مع قياس مستهدف قبل تنت تنفق sprint التحسين.

اعتماد هذا بعقلانية

تسلسل براغماتي يتجنب الفشل الشائع من نشر كل شيء و غرق. ابدأ مع continuous profiling على subset من عقد. إنها أقل مخاطرة الإدخال و يسلم القيمة على الفور (تنت سوف تجد شيء مثير للاهتمام في أولاً أسبوع) و يعلم كيف ل إنك kernels و الرموز تتصرف قبل أي شيء يعتمد عليه. تأكيد أن مكدسات تحل الحقيقي أسماء الدالة; الرموز الإصلاح التوفر إذا لم تفعل.

ثم أضفت مقارنة workflows لأن هذا حيث payoff يركز: wire profile diffing في إصدار عملية حتى CPU الانحدار يتم القبض عليها كـ profile التغيير بدلاً من كـ latency alert ثلاثة أيام لاحقاً.

أضفت agent-level tracing عندما تنت بالفعل تشغيل الوكلاء مع النظام الوصول. إذا الوكلاء فقط استدعاء APIs و إعادة النص kernel tracing هي overkill. إذا أنهم تنفيذ الأوامر و كتابة الملفات أو العاملة على مستودعات الرؤية الفجوة حقيقي و المستحقة الإغلاق.

و فصل بقوة من الإيجابي. قررت مقدماً أي المسارات و العمليات و نوع الأحداث يهم و استبعد بقية. إنها بعيد أسهل لـ تتسع مضيقة فصل لاحقاً من retrofit فصل على firehose تنت بالفعل تخزين.

أخيراً الحفاظ على-demand الأدوات حاد. Continuous profiling يقول لك أن دالة صار hot و متى; perf و bpftrace و async-profiler بقي أفضل ل الغوص العميق إلى لماذا. سير العمل الذي يعمل هو continuous البيانات ل الكشف و التاريخ و targeted الأدوات ل التشخيص.

الخط السفلي

eBPF نقل الرؤية من "attach profiler عندما تنت الاشتباه مشكلة" إلى "البيانات موجود بالفعل و الاستعلام إنه" لأن kernel-side التنفيذ مع verified sandbox جعل always-on جمع التكلفة أقل من 1٪ و يتطلب لا تطبيق تغييرات. Parca Agent يسلم أن كـ continuous و label-queryable و mixed-language CPU profiling وجود الحقيقي قوة فائقة هي المقارنة قبل و بعد. الحدود الجديدة يطبق نفس الرؤية ل الوكلاء المستقلين: AgentSight يعرض ما وكيل بالفعل فعلت في syscall المستوى إغلاق الفجوة تركت بـ application traces أن فقط report ما الوكيل اختار روي. ابدأ مع profiling على قليل عقد و تحقق الرموز و build المقارنة إلى الإصدارات و add وكيل tracing عندما الوكلاء لمس الحقيقي الأنظمة و filter hard من day واحد و الحفاظ على perf و bpftrace ل الغوص العميق.

المراجع و الموارد

الأدوات

الخلفية و التحليل

1337skills cheatsheets ذات الصلة