ebpf_exporter - مقاييس Kernel المخصصة لـ Prometheus (Cheatsheet)
ebpf_exporter (من Cloudflare) يجسر eBPF و Prometheus. تكشف المصدرات القياسية العدادات التي ينشرها kernel بالفعل؛ يسمح ebpf_exporter لك بإرفاق برامج eBPF مخصصة بفحوصات kernel وتصدير كل ما يقيسونه كمقاييس Prometheus — رسوم بيانية كمون I/O للقرص، أسباب إعادة نقل TCP، تأخير قائمة تشغيل الجدولة، سلوك ذاكرة التخزين المؤقت للصفحة. يحول أسئلة kernel العميقة والموجهة إلى سلاسل زمنية مستمرة التجريف.
المتطلبات
- Linux kernel مع BPF + BTF (الإصدار 5.x موصى به)
- امتيازات جذر /
CAP_BPF
- Prometheus لاستخراج نقطة النهاية
التثبيت
| الطريقة | الأمر |
|---|
| ملف ثنائي | تحميل من GitHub Releases |
| Docker | docker run --privileged -p 9435:9435 cloudflare/ebpf_exporter |
| من المصدر | git clone https://github.com/cloudflare/ebpf_exporter && make |
| تشغيل | sudo ebpf_exporter --config.dir=examples --config.names=biolatency |
| المقاييس | http://localhost:9435/metrics |
التشغيل مع الأمثلة المدمجة
# تصدير رسوم بيانية كمون block I/O
sudo ./ebpf_exporter --config.dir=examples --config.names=biolatency
# برامج متعددة في وقت واحد
sudo ./ebpf_exporter --config.dir=examples \
--config.names=biolatency,tcp-syn-backlog,run-queue-latency
| العلم | الغرض |
|---|
--config.dir | دليل إعدادات البرنامج |
--config.names | أي برامج لتحميل (مفصولة بفاصلة) |
--web.listen-address | عنوان الربط (الافتراضي :9435) |
--debug | تحميل/التشخيص المطول |
البرامج المدمجة (الأمثلة)
| البرنامج | المقاييس |
|---|
biolatency | رسم بياني كمون block I/O |
bio-tracepoints | I/O القرص حسب الجهاز/العملية |
run-queue-latency | تأخير الجدولة قبل تشغيل المهمة |
tcp-syn-backlog | عمق SYN backlog |
tcp-window-clamps | أحداث قيد نافذة TCP |
timers | سلوك المؤقت/softirq |
cachestat | ضربة ذاكرة التخزين المؤقت للصفحة/الفشل |
oomkill | أحداث حتل OOM |
بنية الإعداد
يزوج البرنامج كائن eBPF المترجم مع تعريفات المقاييس:
metrics:
histograms:
- name: bio_latency_seconds
help: Block IO latency histogram
bucket_type: exp2
bucket_multiplier: 0.000001 # ميكروثانية → ثانية
bucket_min: 0
bucket_max: 26
labels:
- name: device
size: 32
decoders:
- name: string
- name: bucket
size: 8
decoders:
- name: uint
| الحقل | الغرض |
|---|
counters / histograms | نوع المقياس للتصدير |
bucket_type | exp2 / linear رسم بياني bucketing |
bucket_multiplier | حجم وحدات kernel الخام للثواني |
labels | خريطة مفاتيح خريطة BPF إلى تسميات Prometheus |
decoders | تحويل البايتات الخام (string، uint، ksym، cgroup…) |
أجهزة فك التشفير المفيدة
| فك التشفير | يحول |
|---|
string | مصفوفة بايت → تسمية نص |
uint | عدد صحيح خام |
ksym | عنوان kernel → اسم الرمز |
majorminor | أرقام الجهاز → sda, nvme0n1 |
cgroup | معرف cgroup → مسار |
static_map | تعداد رقمي → تسمية قابلة للقراءة |
الاستعلام في Prometheus
# p99 كمون block I/O حسب الجهاز
histogram_quantile(0.99,
sum(rate(bio_latency_seconds_bucket[5m])) by (le, device))
# تأخير قائمة تشغيل الجدولة p95 (إشارة تشبع CPU)
histogram_quantile(0.95,
sum(rate(run_queue_latency_seconds_bucket[5m])) by (le))
متى تصل إليها
| السؤال | المصدرات القياسية | ebpf_exporter |
|---|
| ”هل القرص مشغول؟“ | نعم (node_exporter) | — |
| “ما هو التوزيع لكمون I/O؟“ | لا | نعم |
| ”كم من الوقت تنتظر المهام أن تجدول؟“ | لا | نعم |
| ”لماذا تحدث إعادة نقل TCP؟“ | جزئياً | نعم |
| ”أي cgroup تسبب هذا؟“ | لا | نعم (فك تشفير cgroup) |
ebpf_exporter مقابل الأدوات ذات الصلة
| الأداة | النموذج |
|---|
| ebpf_exporter | مقاييس eBPF المستمرة → Prometheus |
| bpftrace | سطور eBPF التفاعلية الموجهة |
| bcc-tools | أدوات تشخيص eBPF المدمجة مسبقاً |
| node_exporter | المقاييس المنشورة من قبل kernel |
| bpftop | الحمل الزائد لتشغيل برامج eBPF |
استخدم bpftrace لاستكشاف سؤال بشكل تفاعلي، ثم شفّر الإجابة كمقياس ebpf_exporter دائم.
الموارد