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

ebpf_exporter - مقاييس Kernel المخصصة لـ Prometheus (Cheatsheet)

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
Dockerdocker 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-tracepointsI/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_typeexp2 / 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 دائم.

الموارد