لا تبدأ مشكلات الأداء دائمًا بخطأ واضح. قد يستمر التطبيق في العمل، لكن بعض الصفحات تصبح أبطأ، أو تتراكم المهام في الطوابير، أو ترتفع نسبة فقدان Cache، أو يستهلك أحد الخوادم ذاكرة أكبر من المعتاد. هنا يأتي Laravel Pulse ليقدم لوحة مراقبة رسمية تعرض أهم مؤشرات أداء التطبيق واستخدامه في مكان واحد.
Pulse يعطيك نظرة سريعة على صحة التطبيق واتجاهات الأداء، ويساعدك على تحديد موضع الاختناق الذي يستحق التحقيق. أما تحليل عملية منفردة بكل استعلاماتها وأحداثها وسجلاتها، فهو المجال الذي يتفوق فيه Laravel Telescope.
يعتمد هذا الدليل على توثيق Laravel Pulse الرسمي لإصدار Laravel 13.x. عند استخدام إصدار أقدم من Laravel أو Pulse، اختر نسخة التوثيق المطابقة لمشروعك وراجع ملاحظات الترقية.
ما هو Laravel Pulse؟
Laravel Pulse حزمة رسمية مفتوحة المصدر تقدم لوحة مراقبة آنية تمنحك نظرة سريعة إلى أداء التطبيق وطريقة استخدامه. تسجل الحزمة أحداثًا محددة من Laravel، تجمعها في فترات زمنية، ثم تعرض الاتجاهات والقيم الأعلى أهمية عبر بطاقات Livewire قابلة للتخصيص.
يساعدك Pulse على الإجابة عن أسئلة مثل:
- ما أبطأ المسارات والاستعلامات والمهام وطلبات HTTP الصادرة؟
- هل تتراكم المهام في Queue، وكم منها فشل أو أُعيد إلى الطابور؟
- ما نسبة Cache hits إلى misses، وما المفاتيح الأكثر نشاطًا؟
- ما الاستثناءات الأكثر تكرارًا، ومتى ظهرت آخر مرة؟
- من أكثر المستخدمين إرسالًا للطلبات أو المهام؟
- كيف يتغير استهلاك CPU والذاكرة والتخزين على خوادم التطبيق؟
هل Pulse نظام مراقبة كامل؟
Pulse ممتاز لمراقبة تطبيق Laravel من داخله، لكنه لا يستبدل بالضرورة منصات Observability التي تجمع Logs وMetrics وTraces من خدمات وخوادم متعددة، أو التي تقدم تنبيهات On-call واتفاقيات SLO. يمكن استخدامه بوصفه لوحة Laravel تشغيلية سريعة إلى جانب أنظمة المراقبة المؤسسية.
الفرق بين Laravel Pulse وTelescope وHorizon
| الأداة | السؤال الذي تجيب عنه | أفضل استخدام |
|---|---|---|
| Laravel Pulse | ما الذي يتباطأ أو يتكرر أو يستهلك الموارد عبر الزمن؟ | نظرة عامة لحظية واتجاهات الأداء والاستخدام. |
| Laravel Telescope | ماذا حدث بالتفصيل داخل هذا الطلب أو الخطأ أو المهمة؟ | التصحيح العميق وربط الاستعلامات والسجلات والأحداث. |
| Laravel Horizon | كيف تعمل طوابير Redis والعمال والمشرفون؟ | إدارة Queues وWorkers وThroughput وإعادة المحاولة. |
سير العمل العملي هو أن تكتشف في Pulse أن المسار /api/reports أصبح من أبطأ المسارات، ثم تستخدم Telescope أو سجل APM لتفحص تنفيذ طلب محدد وتصل إلى الاستعلام أو الخدمة الخارجية المسببة للبطء.
كيف يعمل Laravel Pulse؟
- تستمع Recorders إلى أحداث Laravel المتعلقة بالطلبات والطوابير وCache والاستثناءات وغيرها.
- تحوّل المسجلات الحدث إلى Entry أو Value مناسب للقياس.
- تُطبق قواعد التجاهل والترشيح وأخذ العينات.
- تُحفظ البيانات مباشرة في قاعدة البيانات أو تُدفع أولًا إلى Redis Stream.
- يخزن Pulse قيمًا مجمعة داخل Buckets زمنية لتسريع قراءة اللوحة.
- تطلب بطاقات Livewire البيانات دوريًا وتعرضها ضمن الفترة التي يختارها المستخدم.
التصميم القائم على التجميع مهم؛ فبدل إعادة حساب ملايين الصفوف مع كل تحديث، يعتمد Pulse بصورة أساسية على Buckets مهيأة مسبقًا. ويمكنه استخدام السجلات الأقدم اللازمة لإكمال الجزء غير المكتمل من أول Bucket ضمن الفترة.
تثبيت Laravel Pulse وإعداده
يحتاج تنفيذ التخزين الرسمي الحالي إلى MySQL أو MariaDB أو PostgreSQL. إذا كان التطبيق يستخدم محركًا آخر، خصص إحدى قواعد البيانات المدعومة لبيانات Pulse.
1. تثبيت الحزمة
composer require laravel/pulse2. نشر الإعدادات وملفات Migration
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"3. إنشاء جداول Pulse
php artisan migrateبعد ذلك افتح لوحة Pulse من:
https://example.com/pulseنشر ملف الإعدادات وحده
php artisan vendor:publish --tag=pulse-configيوجد ملف الإعداد عادة في config/pulse.php، ومنه تضبط المسجلات، والتخزين، وIngest، والحدود، وأنماط التجاهل والتجميع، واحتمال تنظيف البيانات.
التحقق بعد التثبيت
- تأكد من ظهور مسار
/pulseفيphp artisan route:list --path=pulse. - نفذ طلبات حقيقية إلى التطبيق ثم حدّث اللوحة.
- تحقق من إنشاء جداول Pulse في الاتصال الصحيح.
- لا تتوقع ظهور بيانات الخوادم قبل تشغيل
pulse:check.
فهم لوحة التحكم والبطاقات الأساسية
Servers
تعرض استهلاك CPU والذاكرة والتخزين لكل خادم يعمل عليه pulse:check. وهي البطاقة الأساسية لملاحظة اختلاف عقدة عن بقية عقد Load Balancer أو اقتراب مساحة القرص من النفاد.
Application Usage
تعرض أكثر المستخدمين تنفيذًا للطلبات أو Dispatch للمهام، وكذلك المستخدمين الذين واجهوا طلبات بطيئة. يمكن عرض الأنواع بصورة منفصلة:
<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />Exceptions
تعرض تكرار الاستثناءات وحداثتها. يجمع Pulse الاستثناء افتراضيًا حسب الصنف والموقع الذي خرج منه؛ لذلك قد يظهر الصنف نفسه أكثر من مرة عندما ينشأ في مواقع مختلفة.
Queues
تعرض معدل الطوابير، بما يشمل المهام الموضوعة في Queue، والتي تجري معالجتها، والتي تمت معالجتها، والتي أُعيدت إلى الطابور، والتي فشلت. هي مؤشر سريع، بينما يبقى Horizon أعمق في إدارة Redis Queues.
Slow Requests
تعرض الطلبات التي تجاوزت الحد المهيأ، وهو 1000ms افتراضيًا وفق التوثيق الرسمي. قيمة 1000ms ليست معيارًا صالحًا لكل Endpoint؛ اضبط حدودًا مختلفة للعمليات الثقيلة المتوقعة.
Slow Jobs
تعرض المهام التي تجاوزت حد البطء، وهو 1000ms افتراضيًا، مع إمكانية ضبط حد حسب صنف المهمة.
Slow Queries
تعرض استعلامات قاعدة البيانات البطيئة. يجمع Pulse الاستعلامات افتراضيًا حسب SQL من دون Bindings وبحسب موقع التنفيذ. إذا سببت الاستعلامات الطويلة جدًا مشكلة في العرض، يمكن تعطيل Syntax Highlighting:
<livewire:pulse.slow-queries without-highlighting />Slow Outgoing Requests
تعرض طلبات Laravel HTTP Client التي تجاوزت حد البطء، وهو 1000ms افتراضيًا. تساعدك على فصل بطء التطبيق الداخلي عن تأخر مزود دفع أو API خارجي.
Cache
تعرض إحصاءات Cache hits وmisses على مستوى التطبيق ولكل مفتاح. ارتفاع Miss rate قد يشير إلى TTL قصير، أو مفاتيح شديدة التفرد، أو إبطال متكرر، أو عدم اتساق في بناء المفتاح.
Recorders: كيف يجمع Pulse البيانات؟
Recorders هي المسؤولة عن التقاط الأحداث وتحويلها إلى بيانات Pulse. تسجل وتضبط داخل قسم recorders في config/pulse.php.
| Recorder | البيانات | خيارات مهمة |
|---|---|---|
| CacheInteractions | Cache hits وmisses. | sample_rate، ignore، groups. |
| Exceptions | الاستثناءات القابلة للتقرير. | ignore، capture_location، sampling. |
| Queues | حالات ومعدل الطوابير. | تجاهل أصناف Jobs وأخذ العينات. |
| SlowJobs | المهام التي تجاوزت الحد. | حد افتراضي وحدود لكل Job. |
| SlowOutgoingRequests | طلبات HTTP الصادرة البطيئة. | threshold، ignore، groups. |
| SlowQueries | استعلامات SQL البطيئة. | threshold، ignore، capture_location. |
| SlowRequests | مسارات التطبيق البطيئة. | threshold حسب المسار، ignore. |
| Servers | CPU والذاكرة والتخزين. | اسم الخادم والمجلدات المراقبة. |
| UserJobs | المستخدمون الذين يرسلون Jobs. | sampling وignored jobs. |
| UserRequests | المستخدمون الذين يرسلون Requests. | sampling وignored URLs. |
تعيين حدود مختلفة للمهام
use Laravel\Pulse\Recorders;
Recorders\SlowJobs::class => [
'threshold' => [
'#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
],
],تعيين حدود مختلفة للاستعلامات
Recorders\SlowQueries::class => [
'threshold' => [
'#^insert into `yearly_reports`#' => 5000,
'default' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000),
],
],تعيين حدود مختلفة للمسارات
Recorders\SlowRequests::class => [
'threshold' => [
'#^/admin/#' => 5000,
'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
],
],الحدود المخصصة ليست وسيلة لإخفاء البطء. استخدمها عندما تكون للعملية طبيعة مختلفة ومدروسة، مع إبقاء هدف أداء واضح لكل نوع من العمليات.
الترشيح وتطبيع البيانات
تجميع مفاتيح Cache المتشابهة
المفتاح user:10:profile وuser:11:profile يمثلان النمط نفسه وظيفيًا. من دون تطبيع، قد تمتلئ اللوحة بآلاف المفاتيح الفريدة. استخدم Regular Expressions:
Recorders\CacheInteractions::class => [
'groups' => [
'/:\d+/' => ':*',
],
],يستخدم Pulse أول Pattern متطابق، وإذا لم يتطابق شيء يحتفظ بالقيمة كما هي.
تجميع عناوين APIs الخارجية
Recorders\SlowOutgoingRequests::class => [
'groups' => [
'#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
'#^https?://([^/]*).*$#' => '$1',
'#/\d+#' => '/*',
],
],راقب ترتيب الأنماط، ولا تطبع URLs بصورة تدمج خدمات مختلفة تحتاج إلى قياس مستقل.
الترشيح الديناميكي
عندما لا تكفي قوائم ignore، استخدم Pulse::filter في AppServiceProvider:
use Illuminate\Support\Facades\Auth;
use Laravel\Pulse\Entry;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Value;
public function boot(): void
{
Pulse::filter(function (Entry|Value $entry) {
return Auth::guest() || Auth::user()->isNotAdmin();
});
}المثال يستبعد نشاط المديرين. صمم القاعدة وفق سياقك، وانتبه إلى أن بعض أحداث Console أو Queue قد لا تحمل مستخدمًا مصادقًا عليه.
مراقبة الخوادم باستخدام pulse:check
معظم Recorders تستمع تلقائيًا إلى أحداث Laravel، لكن بطاقة Servers تحتاج إلى عملية طويلة العمر تستطلع موارد النظام. شغل الأمر على كل خادم تطبيق تريد ظهوره:
php artisan pulse:checkيجب أن يكون لكل خادم اسم فريد:
PULSE_SERVER_NAME=app-node-01استخدم Supervisor أو systemd أو مدير العمليات في منصة الاستضافة لإبقاء الأمر يعمل. ولأنه طويل العمر، أعد تشغيله بصورة سلسة بعد النشر:
php artisan pulse:restartيستخدم أمر إعادة التشغيل Cache لإرسال الإشارة، ولذلك يجب أن يكون Cache driver مهيأ ويعمل بطريقة تشترك فيها العقد التي تحتاج إلى استقبال الإشارة.
إخفاء الخوادم غير النشطة
<livewire:pulse.servers ignore-after="3 hours" />هذا مفيد عند استبدال عقدة أو استخدام Auto Scaling، حتى لا تبقى الخوادم القديمة ظاهرة إلى الأبد.
إعداد Pulse للتطبيقات عالية الحركة
استخدام قاعدة بيانات مستقلة
في التطبيقات ذات الحركة العالية، قد تنافس كتابات Pulse استعلامات العمل على الاتصال نفسه. أنشئ Connection مستقلًا في config/database.php ثم اضبط:
PULSE_DB_CONNECTION=pulseالاتصال المستقل لا يعني بالضرورة خادمًا مستقلًا، لكنه يسمح بذلك. قِس الحمل واختر الفصل المناسب لبنية تطبيقك.
Redis Ingest
يحفظ Pulse افتراضيًا البيانات في قاعدة البيانات بعد إرسال استجابة HTTP أو معالجة Job. ويمكن بدلًا من ذلك دفع الأحداث إلى Redis Stream ثم نقلها إلى قاعدة البيانات بواسطة Worker مستقل. يحتاج هذا المسار إلى Redis 6.2 أو أحدث، وعميل phpredis أو predis مهيأ.
PULSE_INGEST_DRIVER=redis
PULSE_REDIS_CONNECTION=pulseثم شغل العامل:
php artisan pulse:workيوصي التوثيق الرسمي باستخدام Redis connection مختلف عن الاتصال الذي تعتمد عليه Redis Queue. افصل عبء Ingest عن الطوابير حتى لا تؤثر موجة بيانات مراقبة في معالجة مهام العمل.
أبقِ pulse:work قيد التشغيل بمدير عمليات، ونفذ php artisan pulse:restart ضمن عملية النشر.
Sampling
يسجل Pulse افتراضيًا كل حدث ذي صلة. في التطبيقات الكبيرة قد ينتج ذلك ملايين الصفوف. تسمح Sample rate بقيمة مثل 0.1 بتسجيل نحو 10% من الأحداث. يوسع Pulse القيمة في اللوحة ويضع قبلها علامة ~ ليوضح أنها تقديرية.
Recorders\UserRequests::class => [
'sample_rate' => 0.1,
],ابدأ بعينة محافظة وقارن استقرار المؤشرات. كلما زاد حجم الحدث، أمكن خفض معدل العينة عادة مع بقاء تقدير مفيد. لا تستخدم Sampling لقياس أحداث نادرة جدًا تحتاج إلى عد دقيق.
Trimming
ينظف Pulse السجلات تلقائيًا عندما تخرج من نافذة اللوحة. يحدث التنظيف أثناء Ingest وفق Lottery يمكن ضبطه في ملف الإعدادات. إذا لاحظت نموًا غير طبيعي، تحقق من استمرار Ingest ومن إعداد Lottery والفترة المعروضة.
التعامل مع أخطاء Pulse
يفشل Pulse بصمت افتراضيًا إذا تعذر تسجيل بياناته حتى لا يعطل تطبيقك. أثناء تشخيص غياب البيانات، سجل أخطاءه:
use Illuminate\Support\Facades\Log;
use Laravel\Pulse\Facades\Pulse;
Pulse::handleExceptionsUsing(function (\Throwable $e) {
Log::debug('Pulse capture failed', [
'message' => $e->getMessage(),
'exception' => $e::class,
]);
});لا تكتب Stack Trace كاملًا بمستوى واسع ودائم إذا كان سيكشف بيانات حساسة أو يضاعف حجم السجلات.
حماية Laravel Pulse في الإنتاج
قد تكشف اللوحة أسماء مسارات وأصناف Jobs واستعلامات وأخطاء وأسماء مستخدمين ومعلومات عن موارد الخوادم. لذلك يسمح Laravel بالوصول افتراضيًا في بيئة local فقط، ويحتاج الإنتاج إلى Gate باسم viewPulse.
use App\Models\User;
use Illuminate\Support\Facades\Gate;
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
}استخدم Permission أو Role حقيقيًا بدل الاعتماد على عنوان بريد ثابت عندما يوجد أكثر من مسؤول. ويمكن تعزيز الحماية باستخدام VPN أو Zero Trust أو IP allowlist، لكن لا تستبدل بها المصادقة والتفويض داخل Laravel.
قائمة تحقق للإنتاج
APP_ENV=productionوAPP_DEBUG=false.- Gate
viewPulseيسمح فقط لمسؤولي المراقبة. - مسار
/pulseغير مكشوف للزوار أو محركات البحث. - قواعد ignore وgroups تمنع تضخم القيم عالية التفرد.
- لا تدخل أسرار أو Tokens أو بيانات شخصية حساسة في مفاتيح Cache أو URLs.
- عمليات
pulse:checkوpulse:workمراقبة بمدير عمليات. - قاعدة Pulse وRedis connection لهما سعة ونسخ احتياطي وسياسة وصول مناسبة.
- Sampling والحدود مقاسان بناء على حركة التطبيق الفعلية.
تخصيص لوحة Pulse والمستخدمين
نشر لوحة التحكم
php artisan vendor:publish --tag=pulse-dashboardيُنشر القالب في resources/views/vendor/pulse/dashboard.blade.php.
تغيير عرض الشبكة
<x-pulse full-width cols="16">
<livewire:pulse.servers cols="8" rows="2" />
<livewire:pulse.usage cols="4" rows="2" />
<livewire:pulse.slow-queries cols="8" expand />
</x-pulse>يستخدم Pulse شبكة من 12 عمودًا افتراضيًا. يغير cols عدد الأعمدة، بينما تضبط خصائص كل بطاقة المساحة، وتمنع expand التمرير الداخلي في البطاقات التي تدعمه.
تخصيص عرض المستخدم
يسجل Pulse معرّف المستخدم فقط، ثم يحل الاسم والبريد عند العرض، ويستخدم Gravatar افتراضيًا للصورة. خصص ذلك:
use Laravel\Pulse\Facades\Pulse;
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
}إنشاء بطاقة Pulse مخصصة
تستطيع إنشاء بطاقة تعرض مقياس أعمال خاصًا، مثل أعلى البائعين أو عدد الطلبات المدفوعة أو نشاط الـTenants. تستخدم البطاقات Livewire وتمتد من Laravel\Pulse\Livewire\Card.
مكوّن Livewire
namespace App\Livewire\Pulse;
use Laravel\Pulse\Livewire\Card;
use Livewire\Attributes\Lazy;
#[Lazy]
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers', [
'topSellers' => $this->aggregate('user_sale', ['sum', 'count']),
]);
}
}تسجيل مقياس العمل
use Laravel\Pulse\Facades\Pulse;
Pulse::record('user_sale', $user->id, $sale->amount)
->sum()
->count();الوسيط الأول هو نوع المقياس، والثاني مفتاح التجميع، والثالث القيمة. يدعم Pulse عمليات avg وcount وmax وmin وsum. حدد عمليات التجميع أثناء التسجيل؛ لأن البطاقة تعتمد أساسًا على Buckets المجمعة مسبقًا.
قالب البطاقة
<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s>
<x-pulse::card-header name="Top Sellers" />
<x-pulse::scroll :expand="$expand">
@foreach ($topSellers as $seller)
<p>
{{ $seller->key }}:
{{ $seller->sum }}
({{ $seller->count }})
</p>
@endforeach
</x-pulse::scroll>
</x-pulse::card>إضافة البطاقة إلى اللوحة
<x-pulse>
<livewire:pulse.top-sellers cols="4" />
</x-pulse>يتيح wire:poll.5s تحديث البطاقة دوريًا. لا تجعل التحديث متقاربًا بلا حاجة إذا كانت Queries الخاصة بالبطاقة مكلفة.
سيناريوهات تشخيص عملية
مسار API أصبح بطيئًا
- حدد المسار في بطاقة Slow Requests والفترة التي بدأ فيها البطء.
- راجع Slow Queries وSlow Outgoing Requests في الفترة نفسها.
- قارن العقد في Servers لاستبعاد مشكلة موارد في خادم واحد.
- استخدم Telescope أو APM لفتح تنفيذ مفرد والوصول إلى السبب الدقيق.
- نفذ الإصلاح وقارن الاتجاه بعد النشر، لا نتيجة طلب واحد فقط.
Queue تتباطأ
- راجع Queues لمعرفة queued وprocessing وprocessed وfailed.
- افتح Slow Jobs وحدد الأصناف الأبطأ.
- قارن CPU والذاكرة على الخوادم التي تشغل Workers.
- راجع Horizon لتوزيع العمال ووقت الانتظار والتوازن.
- افصل العمل الطويل أو قسم Job الكبيرة إذا كان ذلك مناسبًا.
Cache غير فعّال
- راجع النسبة الإجمالية ومفاتيح Miss الأعلى.
- طبّع المفاتيح التي تتضمن IDs حتى ترى النمط الحقيقي.
- تحقق من TTL وإبطال المفاتيح وبنية Prefix.
- قارن زمن الاستجابة قبل التعديل وبعده.
خادم واحد يستهلك موارد أكثر
- تأكد من أن كل عقدة لها
PULSE_SERVER_NAMEفريد. - قارن CPU والذاكرة والتخزين بين العقد.
- راجع توزيع Load Balancer وعدد Workers والمهام المحلية.
- افحص Memory leak محتمل في العمليات طويلة العمر.
- استبدل العقدة أو أعد تشغيل الخدمة بعد حفظ الأدلة اللازمة.
المشكلات الشائعة وحلولها
المسار /pulse يعيد 404
- تأكد من تثبيت
laravel/pulse. - شغل أمر النشر وMigrations.
- تحقق باستخدام
php artisan route:list --path=pulse. - نفذ
php artisan optimize:clearبعد تغيير الإعدادات.
403 في الإنتاج
- هذا هو السلوك الافتراضي إذا لم تسمح Gate بالوصول.
- تأكد من تسجيل الدخول ومن تعريف
viewPulse. - تحقق من Session domain وMiddleware عند استخدام نطاق فرعي.
بطاقة Servers فارغة
- شغل
php artisan pulse:checkعلى كل خادم. - أبق العملية تعمل باستخدام مدير عمليات.
- تحقق من اتصال قاعدة Pulse ومن اسم الخادم الفريد.
- سجل أخطاء Pulse مؤقتًا باستخدام
handleExceptionsUsing.
Redis Ingest لا ينقل البيانات
- تحقق من Redis 6.2 أو أحدث ومن إعداد phpredis أو predis.
- تأكد من تشغيل
pulse:work. - راجع
PULSE_REDIS_CONNECTIONوصلاحيات الاتصال. - أعد تشغيل العامل بعد النشر باستخدام
pulse:restart.
اللوحة بطيئة أو قاعدة البيانات تكبر
- فعّل Sampling للمقاييس كثيرة الحجم.
- استخدم groups لتقليل Cardinality في المفاتيح وURLs.
- انقل Pulse إلى قاعدة مستقلة.
- استخدم Redis Ingest لفصل التسجيل عن مسار الطلب.
- تحقق من Trimming وإعداد Lottery.
- عطّل SQL highlighting عند عرض استعلامات ضخمة جدًا.
الأسئلة الشائعة
هل Laravel Pulse مجاني؟
نعم، Pulse حزمة رسمية مفتوحة المصدر، ومستودعها منشور على GitHub.
هل يمكن استخدامه في الإنتاج؟
نعم، وهو مصمم ليضاف إلى تطبيق قائم. احمِ اللوحة، واضبط Sampling وRecorders، واستخدم قاعدة مستقلة أو Redis Ingest عند الحاجة، ثم قِس أثره في بيئتك.
هل يعرض البيانات في الزمن الحقيقي؟
تحدث بطاقات Pulse نفسها دوريًا باستخدام Livewire وتعرض مقاييس قريبة من الزمن الحقيقي. ليست كل قيمة لحظية بالمعنى الحرفي؛ إذ تعتمد النتيجة على آلية التسجيل والتجميع وPolling وSampling.
لماذا تظهر علامة ~ قبل بعض الأرقام؟
تعني أن القيمة تقريبية لأنها محسوبة من عينة ثم وُسعت لتمثيل الحجم المتوقع.
هل أحتاج Redis؟
لا في التثبيت العادي؛ فالتخزين المباشر في قاعدة البيانات هو الافتراضي. تحتاج Redis إذا اخترت Redis Ingest، كما تستخدمه إشارة pulse:restart عبر Cache driver المهيأ وفق بنية تطبيقك.
هل يمكن مراقبة عدة خوادم؟
نعم. شغل pulse:check على كل خادم، واجعل PULSE_SERVER_NAME فريدًا لكل عقدة.
هل Pulse بديل عن Telescope؟
لا. Pulse يبرز الاتجاهات والاختناقات العامة، بينما Telescope يقدم تفاصيل عميقة للأحداث الفردية. الجمع بينهما يعطي مسارًا أفضل من الاكتشاف إلى التحقيق.
خلاصة أفضل الممارسات
- ابدأ بالتثبيت الافتراضي ثم غيّر الإعدادات بناء على قياسات حقيقية.
- حدد SLO أو حدود أداء منطقية لكل نوع من المسارات والمهام.
- طبّع المفاتيح وURLs عالية التفرد حتى تصبح المؤشرات قابلة للقراءة.
- استخدم Sampling للمقاييس الضخمة، لا للأحداث النادرة التي تحتاج عدًا دقيقًا.
- افصل قاعدة Pulse وRedis Ingest عن أعباء العمل الحرجة عند ارتفاع الحركة.
- أبقِ عمليات Pulse طويلة العمر تحت Supervisor أو مدير عمليات موثوق.
- أعد تشغيل Pulse workers ضمن عملية النشر.
- احمِ اللوحة بـGate صارم وطبقة شبكة إضافية عند الإمكان.
- استخدم Pulse لاكتشاف المشكلة، ثم Telescope أو APM للتحقيق التفصيلي.
- أنشئ بطاقات أعمال مخصصة فقط للمقاييس التي تقود إلى قرار عملي.
التعليقات (0)
لا توجد تعليقات بعد — كن أول من يشارك رأيه.
أضف تعليقك