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

Parca Agent - Continuous Profiling دائم على أساس eBPF

Parca Agent - Continuous Profiling دائم على أساس eBPF

Parca Agent هو محلل ملف تعريفي مستمر قائم على eBPF. بدلاً من إرفاق محلل ملف تعريفي عندما تشك في وجود مشكلة يأخذ عينات من مكدسات الاستدعاء من كل عملية على عقدة وطوال الوقت بحوالي 1٪ النفقات العامة ومع عدم الحاجة إلى تعديل التطبيق. يعكس هذا سير العمل المعتاد: بدلاً من إعادة إنتاج حادثة تحت محلل ملف تعريفي تبحث عما كان يعمل بالفعل خلال نافذة الحادث. يُسند CPU (والذاكرة لأوقات التشغيل المدعومة) إلى رقم السطر وينقل ملفات التعريف إلى خادم Parca أو أي متجر ملف تعريفي متوافق مع Prometheus.

المتطلبات

  • Linux kernel مع eBPF/BTF (5.4+ أفضل الأحدث)
  • Root / حاوية مميزة
  • خادم Parca (أو متجر متوافق) لاستقبال ملفات التعريف

التثبيت

الطريقةالأمر
Binarydownload from GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDeploy as a DaemonSet (manifests provided)
Serverrun parca separately to store/query profiles
Verifyparca-agent --version

التشغيل

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
العلمالغرض
--nodeملصق العقدة المرفق بملفات التعريف
--remote-store-addressحيث لنقل ملفات التعريف
--http-addressنقطة نهاية المحلي UI/metrics (:7071)
--profiling-durationنافذة أخذ العينات (افتراضي 10s)
--log-levelالمستوى الفعال

Kubernetes DaemonSet

الجانبملاحظة
النشرعامل واحد لكل عقدة
الامتيازاتprivileged: true وhostPID
الاكتشافعلامات تلقائياً حسب pod/container/namespace
النفقات العامة~1٪ CPU نموذجي
التخزينملفات التعريف تذهب إلى خادم Parca وليس العقدة

دعم اللغة

وقت التشغيلفك الترميز المكدس
C/C++/Rust/Goأصلي (DWARF أو مؤشرات الإطار)
Javaدقة رمز JIT
Python / Rubyفك ترميز يدرك المترجم
Node.jsتدعم فك ترميز وقت التشغيل
أي ثنائي بالرموزأفضل النتائج عند عدم التجرد

تحل المكدسات المختلطة اللغة في ملف تعريفي واحد وهذا بالضبط ما تحتاجه لخدمة متعددة اللغات.

الاستعلام عن ملفات التعريف

واجهة Parca (و API) تسمح لك بتقسيم ملفات التعريف مثل المقاييس:

بُعد الاستعلاممثال
نطاق زمني5 دقائق حول حادث
الملصقاتnamespace="prod", pod=~"api-.*"
المقارنةفرق نطاقي زمنيين (قبل/بعد نشر)
الدالةتصفية إلى رمز
# مفهومي: ملف تعريفي CPU لخدمة واحدة أثناء الارتفاع
cpu_samples{namespace="prod", container="api"}  [14:05 → 14:10]

ميزة القاتل: المقارنة

الاستخدامكيف
البحث الانحدارDiff ملفات التعريف قبل وبعد الإصدار
تحليل الحادثDiff نافذة الحادث مقابل خط الأساس
إثبات التحسينإظهار انكماش الدالة الساخنة

يجعل تحديد ملف التعريف المستمر هذا ممكناً لأن ملف التعريف “قبل” موجود بالفعل — لم تكن بحاجة إلى التنبؤ برغبتك فيه.

Parca Agent مقابل محللي ملفات التعريف ذات الصلة

الجانبParca AgentperfPyroscopeasync-profiler
النموذجدائم الوصول على مستوى الأسطولعند الطلب لكل تشغيلدائم الوصولعند الطلب JVM
التجهيزلا شيء (eBPF)لا شيءخيارات Agent/SDKعامل JVM
متعدد اللغاتنعمنعم (أصلي)نعمJVM فقط
الأفضل للـتحديد الملف التعريفي المستمر للإنتاجالتحليل المحلي العميقتحديد ملف تعريفي مستمردقة JVM

نفس الفئة مثل Pyroscope; استخدم perf أو async-profiler عندما تحتاج إلى تحليل عميق لمرة واحدة.

الموارد