يمنحك Laravel Telescope نافذة تفصيلية إلى ما يحدث داخل تطبيق Laravel: الطلبات الواردة، استعلامات قاعدة البيانات، الأخطاء، السجلات، المهام في الطوابير، البريد، الإشعارات، عمليات التخزين المؤقت، أوامر Redis، الأحداث، مهام الجدولة، وطلبات HTTP الصادرة. يشرح هذا الدليل طريقة تثبيته وضبطه واستخدامه بطريقة عملية وآمنة، من بيئة التطوير المحلية حتى جلسات التشخيص المحدودة في بيئة الإنتاج.
Telescope ليس مجرد شاشة لعرض الأخطاء، بل أداة تربط الآثار الناتجة عن العملية الواحدة لتساعدك على إعادة بناء مسار التنفيذ وفهم سبب المشكلة، لا الاكتفاء برؤية نتيجتها.
ملاحظة التوافق: أُعدّ هذا المقال بالاستناد إلى توثيق Laravel 13.x الرسمي. إذا كان مشروعك يستخدم إصدارًا أقدم، اختر إصدار Laravel المطابق من قائمة الإصدارات في الموقع الرسمي، وراجع دليل ترقية Telescope قبل تحديث الحزمة بين الإصدارات الرئيسية.
ما هو Laravel Telescope؟
Laravel Telescope حزمة رسمية مفتوحة المصدر من فريق Laravel، صُممت لتكون مساعدًا عميقًا لعمليات التطوير والتصحيح. تسجل الحزمة أنواعًا متعددة من نشاط التطبيق في مخزن بيانات، ثم تعرضها في لوحة ويب موحدة يمكن الوصول إليها افتراضيًا عبر المسار /telescope.
القيمة الحقيقية للأداة ليست في كمية البيانات فقط، بل في العلاقة بين السجلات. فعند فتح طلب HTTP محدد، يمكنك الانتقال إلى الاستعلامات والأحداث والمهام والسجلات المرتبطة به. بهذا تنتقل من سؤال «ما الخطأ؟» إلى سؤال أدق: «ما سلسلة العمليات التي أدت إلى الخطأ؟»
المشكلات التي يساعد Telescope على كشفها
- طلب API بطيء بسبب استعلام واحد ثقيل أو عشرات الاستعلامات المتكررة.
- مشكلة
N+1الناتجة عن تحميل علاقات Eloquent داخل حلقة. - مهمة Queue فشلت، أو أُرسلت إلى اتصال أو طابور غير متوقع.
- استثناء متقطع يحتاج إلى تتبع المكدس والطلب المرتبط به.
- مفتاح Cache لا يُقرأ أو يُحدَّث أو يُحذف كما هو متوقع.
- حدث أُطلق، لكن المستمع المتوقع لم يعمل أو تلقى بيانات غير صحيحة.
- طلب HTTP صادر إلى خدمة خارجية استغرق وقتًا طويلًا.
- رسالة بريد أو إشعار لم يُنشأ بالمحتوى المتوقع.
- قرار Gate أو Policy أعاد السماح أو الرفض بصورة غير متوقعة.
متى تستخدم Telescope، ومتى لا يكفي وحده؟
يناسب Telescope التطوير المحلي، الاختبارات، بيئات التجهيز، وجلسات التشخيص الموجهة. يمكن تشغيله في الإنتاج، لكن بعد تقييد الوصول وتقليل البيانات المسجلة وحذف القديم منها دوريًا.
لا يُعد Telescope بديلًا كاملًا لمنصة مراقبة إنتاجية طويلة الأجل. فهو لا يهدف وحده إلى توفير تنبيهات الحوادث، تجميع السجلات من عشرات الخدمات، مقاييس البنية التحتية، تتبع موزع بين الخدمات، أو اتفاقيات مستوى الخدمة. لهذا قد يعمل إلى جانب أدوات مثل Laravel Pulse أو Horizon أو منصات المراقبة الخارجية.
استخدم Telescope للتحقيق التفصيلي في التنفيذ، واستخدم نظام مراقبة وتنبيه مخصص لمتابعة صحة النظام باستمرار. الأداتان متكاملتان وليستا بديلتين بالضرورة.
كيف يعمل Laravel Telescope؟
- يراقب Telescope دورة تنفيذ طلب HTTP أو أمر Console من خلال مجموعة من المراقبين.
- ينشئ كل مراقب سجلات تسمى
IncomingEntryعند وقوع حدث يخصه. - تُمرر السجلات عبر قواعد الترشيح لتحديد ما يجب الاحتفاظ به.
- تُخزن السجلات المقبولة وعلاقاتها ووسومها بواسطة Driver التخزين المهيأ.
- تقرأ لوحة Telescope البيانات المخزنة وتعرضها حسب النوع والوقت والوسم والعلاقة.
ينشئ التثبيت القياسي جداول منها telescope_entries وtelescope_entries_tags وtelescope_monitoring. قد تنمو هذه الجداول بسرعة لأن طلبًا واحدًا يمكن أن ينتج عدة سجلات: طلب، واستعلامات، وسجلات تطبيق، وأحداث، ومهام، وغيرها. لذلك تعد سياسة الاحتفاظ بالبيانات جزءًا أساسيًا من الإعداد.
تثبيت Laravel Telescope وإعداده
التثبيت القياسي
نفّذ الأوامر التالية من جذر مشروع Laravel:
composer require laravel/telescope
php artisan telescope:install
php artisan migrateينشر الأمر telescope:install ملف الإعدادات، وملفات الترحيل، وموفر الخدمة الخاص بالتطبيق. بعد اكتمال الترحيل، افتح:
https://example.com/telescopeالتثبيت للتطوير المحلي فقط
إذا كنت لا تريد وجود الحزمة ضمن تبعيات الإنتاج، ثبّتها كحزمة تطوير:
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrateبعد ذلك احذف تسجيل App\Providers\TelescopeServiceProvider::class من bootstrap/providers.php، وسجّل موفري Telescope يدويًا داخل AppServiceProvider عندما تكون البيئة محلية والحزمة موجودة:
public function register(): void
{
if (
$this->app->environment('local') &&
class_exists(\Laravel\Telescope\TelescopeServiceProvider::class)
) {
$this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
$this->app->register(\App\Providers\TelescopeServiceProvider::class);
}
}امنع Composer كذلك من الاكتشاف التلقائي للحزمة في composer.json:
{
"extra": {
"laravel": {
"dont-discover": [
"laravel/telescope"
]
}
}
}استخدام
--devوحده لا يكفي. إذا بقي موفر الخدمة مسجلًا، فقد يحاول تطبيق الإنتاج تحميل صنف غير مثبت عندما تُبنى التبعيات باستخدامcomposer install --no-dev.
أهم إعدادات البيئة
يمكن التحكم بتشغيل التسجيل وبعض المراقبين من ملف .env:
TELESCOPE_ENABLED=true
TELESCOPE_QUERY_WATCHER=true
TELESCOPE_REQUEST_WATCHER=true
TELESCOPE_RESPONSE_SIZE_LIMIT=64يعتمد توفر المتغيرات الدقيقة على ملف config/telescope.php المنشور في إصدار الحزمة لديك. بعد تغيير الإعدادات في الإنتاج، أعد بناء Cache الإعدادات:
php artisan config:clear
php artisan config:cacheإيقاف التسجيل بالكامل
'enabled' => env('TELESCOPE_ENABLED', true),عند ضبط TELESCOPE_ENABLED=false يتوقف جمع البيانات. يفيد ذلك عند إبقاء الحزمة مثبتة مع تفعيلها فقط في نافذة تشخيص محددة.
ترقية Telescope
عند الانتقال إلى إصدار رئيسي جديد، راجع دليل الترقية الرسمي. وبعد أي تحديث للحزمة، أعد نشر الأصول:
php artisan telescope:publishويمكن أتمتة نشر أصول Laravel بعد تحديث Composer:
{
"scripts": {
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
]
}
}كيف تقرأ لوحة Telescope بفعالية؟
لا تبدأ بتصفح كل الأقسام. ابدأ من أثر المشكلة، ثم انتقل إلى السجلات المرتبطة به. إذا كانت استجابة API بطيئة، افتح Requests أولًا؛ وإذا وصل تنبيه عن Exception، ابدأ من Exceptions.
منهج التحقيق الموصى به
- حدد الزمن والمسار والمستخدم أو رقم العملية.
- افتح السجل الأساسي المناسب: Request أو Exception أو Job.
- راجع الزمن، الحالة، الذاكرة، Payload، والوسوم.
- انتقل إلى الاستعلامات والسجلات وطلبات HTTP والأحداث المرتبطة.
- ابحث عن التكرار، وليس البطء الفردي فقط.
- كوّن فرضية، ثم أعد تنفيذ الحالة بعد التعديل وقارن النتيجة.
ما الذي تبحث عنه داخل Request؟
- طريقة HTTP والمسار ورمز الحالة.
- مدة التنفيذ واستهلاك الذاكرة.
- Headers وPayload وبيانات Session والاستجابة، وفق حدود التسجيل.
- المستخدم المسجل عند تنفيذ الطلب.
- عدد الاستعلامات ومجموع أزمنتها.
- السجلات والأحداث والمهام والطلبات الخارجية المرتبطة.
المراقبون Watchers: قلب Telescope
المراقب هو مكوّن يجمع نوعًا محددًا من نشاط التطبيق. يمكنك تشغيل المراقبين أو إيقافهم من config/telescope.php لتقليل الضجيج واستهلاك التخزين:
use Laravel\Telescope\Watchers;
'watchers' => [
Watchers\CacheWatcher::class => true,
Watchers\CommandWatcher::class => true,
Watchers\QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'slow' => 100,
],
],| المراقب | ما الذي يسجله؟ | متى يفيد؟ |
|---|---|---|
| Batch Watcher | معلومات دفعات المهام، والمهام والاتصالات المرتبطة بها. | تحليل عمليات Queue المجمعة. |
| Cache Watcher | إصابة المفتاح وفقدانه وتحديثه وحذفه. | قياس فعالية Cache وكشف المفاتيح غير المستقرة. |
| Command Watcher | أوامر Artisan ووسائطها وخياراتها ورمز الخروج والمخرجات. | تشخيص أوامر الصيانة والمهام المجدولة. |
| Dump Watcher | القيم المرسلة عبر dump(). | فحص المتغيرات دون تشويه استجابة الصفحة. |
| Event Watcher | بيانات الأحداث والمستمعين والبث. | تتبع Event-driven workflows. |
| Exception Watcher | الاستثناءات القابلة للتقرير مع Stack Trace. | تحديد مصدر الخطأ وسياقه. |
| Gate Watcher | فحوص Gates وPolicies ونتائجها. | تحليل مشكلات الصلاحيات. |
| HTTP Client Watcher | طلبات HTTP الصادرة من Laravel HTTP Client. | كشف بطء أو فشل الخدمات الخارجية. |
| Job Watcher | بيانات وحالة المهام المرسلة إلى Queue. | تتبع dispatch والمعالجة والفشل. |
| Log Watcher | سجلات التطبيق حسب الحد الأدنى للمستوى. | ربط رسائل Log بطلب أو مهمة. |
| Mail Watcher | البريد المرسل ومعاينته وتنزيله كملف .eml. | فحص التصميم والمستلمين والبيانات. |
| Model Watcher | أحداث نماذج Eloquent وعدد عمليات Hydration اختياريًا. | تتبع تغييرات البيانات واستهلاك النماذج. |
| Notification Watcher | الإشعارات المرسلة عبر قنوات Laravel. | التحقق من مسار الإشعار ومحتواه. |
| Query Watcher | SQL وBindings وزمن التنفيذ. | كشف الاستعلامات البطيئة وN+1. |
| Redis Watcher | أوامر Redis المنفذة. | تحليل Cache وRedis والضجيج التشغيلي. |
| Request Watcher | الطلب والرؤوس والجلسة والاستجابة. | إعادة بناء دورة تنفيذ Endpoint. |
| Schedule Watcher | الأوامر ومخرجات المهام المجدولة. | التحقق من تشغيل Scheduler ونتيجته. |
| View Watcher | اسم View ومساره وبياناته وComposers. | تشخيص عرض Blade والبيانات المحقونة. |
Query Watcher والاستعلامات البطيئة
يسجل SQL وBindings وزمن التنفيذ، ويضع وسم slow افتراضيًا للاستعلامات الأبطأ من 100ms. يمكن تعديل العتبة:
Watchers\QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'slow' => 50,
],لا تحكم على الأداء من أبطأ استعلام فقط. قد يكون استعلام بزمن 5ms يتكرر 200 مرة أسوأ من استعلام واحد بزمن 80ms. تكرار SQL المتشابه داخل طلب واحد علامة شائعة على مشكلة N+1.
// قد يولّد N+1 عند الوصول إلى customer داخل الحلقة
$orders = Order::latest()->get();
foreach ($orders as $order) {
echo $order->customer->name;
}
// الحل: التحميل المسبق للعلاقة
$orders = Order::with('customer')->latest()->get();Request Watcher وحد الاستجابة
Watchers\RequestWatcher::class => [
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
],قيمة size_limit بالكيلوبايت، وتحد من بيانات الاستجابة المخزنة. هذا الحد مهم للأداء والخصوصية، خصوصًا مع APIs التي تعيد ملفات أو قوائم كبيرة.
Log Watcher
يسجل افتراضيًا مستوى error فما فوق، ويمكن توسيعه أثناء التشخيص:
Watchers\LogWatcher::class => [
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
'level' => 'debug',
],تجنب debug المفتوح دائمًا في الإنتاج؛ لأنه يزيد حجم البيانات وقد يلتقط سياقًا لا تريد الاحتفاظ به.
Model Watcher وعمليات Hydration
Watchers\ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.created*', 'eloquent.updated*'],
'hydrations' => true,
],تكشف hydrations عدد نماذج Eloquent التي أُنشئت من نتائج قاعدة البيانات. العدد الضخم قد يشير إلى تحميل بيانات أكثر من الحاجة، حتى لو لم يكن SQL نفسه بطيئًا.
استبعاد أوامر وقدرات كثيرة التكرار
Watchers\CommandWatcher::class => [
'enabled' => true,
'ignore' => ['key:generate'],
],
Watchers\GateWatcher::class => [
'enabled' => true,
'ignore_abilities' => ['viewNova'],
],الترشيح Filtering والوسوم Tags
تشغيل المراقب يحدد نوع البيانات التي يمكن التقاطها، بينما يحدد الترشيح أي السجلات ستُحفظ فعلًا. توجد استراتيجيتان: ترشيح كل سجل على حدة باستخدام Telescope::filter، أو الاحتفاظ بدفعة كاملة مرتبطة بطلب أو أمر باستخدام Telescope::filterBatch.
ترشيح السجلات الفردية
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
Telescope::filter(function (IncomingEntry $entry) {
if ($this->app->environment('local')) {
return true;
}
return $entry->isReportableException()
|| $entry->isFailedJob()
|| $entry->isScheduledTask()
|| $entry->isSlowQuery()
|| $entry->hasMonitoredTag();
});هذه سياسة إنتاج جيدة كنقطة بداية: كل شيء محليًا، وفي البيئات الأخرى تُحفظ الإشارات المهمة فقط.
ترشيح الدفعة كاملة
use Illuminate\Support\Collection;
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
Telescope::filterBatch(function (Collection $entries) {
if ($this->app->environment('local')) {
return true;
}
return $entries->contains(function (IncomingEntry $entry) {
return $entry->isReportableException()
|| $entry->isFailedJob()
|| $entry->isScheduledTask()
|| $entry->isSlowQuery()
|| $entry->hasMonitoredTag();
});
});يفيد filterBatch عندما تريد الاحتفاظ بالسياق الكامل للعملية. إذا احتوت الدفعة على Exception، تحفظ الاستعلامات والسجلات والأحداث المحيطة بها أيضًا، ما يجعل التحقيق أكثر دقة.
إضافة وسوم مخصصة
use Laravel\Telescope\EntryType;
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
Telescope::tag(function (IncomingEntry $entry) {
return $entry->type === EntryType::REQUEST
? ['status:'.$entry->content['response_status']]
: [];
});يضيف Telescope تلقائيًا وسومًا مثل صنف نموذج Eloquent أو معرّف المستخدم. ويمكنك إضافة وسوم أعمال مثل tenant:42 أو order:9832 أو release:2026-09-02. لا تضع أسرارًا أو بيانات شخصية حساسة داخل الوسوم؛ فهي مصممة للبحث والتصنيف.
استخدام Telescope بأمان في بيئة الإنتاج
تحتوي لوحة Telescope على بيانات تشغيلية قد تشمل Headers وPayload وSession وSQL Bindings ومحتوى البريد. لذلك فإن نشر المسار دون حماية قد يؤدي إلى كشف رموز وصول أو بيانات مستخدمين أو تفاصيل داخلية للتطبيق.
1. اضبط البيئة بصورة صحيحة
APP_ENV=production
APP_DEBUG=falseيحذر التوثيق الرسمي من أن ضبط APP_ENV بصورة خاطئة قد يجعل لوحة Telescope متاحة علنًا؛ لأن الوصول يكون مسموحًا افتراضيًا في البيئة المحلية.
2. قيد الوصول باستخدام Gate
داخل app/Providers/TelescopeServiceProvider.php:
use App\Models\User;
use Illuminate\Support\Facades\Gate;
protected function gate(): void
{
Gate::define('viewTelescope', function (User $user) {
return $user->is_admin === true;
});
}يفضل استخدام دور أو Permission مركزي بدل قائمة بريد ثابتة عندما يكون التطبيق متعدد المديرين. ويمكن إضافة طبقة شبكة مثل VPN أو Zero Trust أو IP allowlist، لكن لا تجعلها بديلًا عن المصادقة والتفويض داخل التطبيق.
3. أخفِ البيانات الحساسة
ينشئ موفر Telescope عادة دالة hideSensitiveRequestDetails(). راجعها وأضف أسماء الحقول والرؤوس الخاصة بتطبيقك. مثال توضيحي:
protected function hideSensitiveRequestDetails(): void
{
if ($this->app->environment('local')) {
return;
}
Telescope::hideRequestParameters([
'_token',
'password',
'password_confirmation',
'credit_card_number',
]);
Telescope::hideRequestHeaders([
'authorization',
'cookie',
'x-csrf-token',
'x-xsrf-token',
]);
}أسماء الحقول تختلف بين التطبيقات. راجع Payloads الفعلية، ولا تعتمد على القائمة الافتراضية وحدها. لا تسجل كلمات المرور أو Tokens أو أرقام البطاقات أو المفاتيح السرية حتى لو كانت قاعدة البيانات مشفرة.
4. سجل الإشارات المهمة فقط
استخدم filter أو filterBatch لحفظ الأخطاء، المهام الفاشلة، الاستعلامات البطيئة، والعمليات ذات الوسوم المراقبة. عطّل المراقبين غير الضروريين بدل جمع كل شيء ثم تجاهله في الواجهة.
5. استخدم نافذة تشخيص محدودة
يمكن إبقاء TELESCOPE_ENABLED=false افتراضيًا، ثم تشغيله أثناء التحقيق بعد تقييم التأثير، وإيقافه عند الانتهاء. تأكد من إعادة تحميل إعدادات التطبيق والعمال طويلة العمر بعد التغيير.
6. قائمة تحقق قبل الإنتاج
APP_ENV=productionوAPP_DEBUG=false.- المسار محمي بالمصادقة وGate صارم.
- الوصول الشبكي مقيد عند الإمكان.
- حقول ورؤوس الطلب الحساسة مخفية.
- المراقبون غير المطلوبين معطلون.
- قواعد Filter تحفظ البيانات الضرورية فقط.
telescope:pruneمجدول ويعمل فعليًا.- حجم جداول Telescope ومساحة القرص مراقبان.
- سياسة الاحتفاظ متوافقة مع متطلبات الخصوصية في مؤسستك.
إدارة البيانات والأداء
الحذف الدوري باستخدام telescope:prune
وفق التوثيق الرسمي، قد يتراكم جدول telescope_entries بسرعة. احذف السجلات القديمة يوميًا من routes/console.php أو الموضع المعتمد لجدولة الأوامر في إصدار Laravel لديك:
use Illuminate\Support\Facades\Schedule;
Schedule::command('telescope:prune')->daily();يحذف الأمر افتراضيًا السجلات الأقدم من 24 ساعة. للاحتفاظ بـ48 ساعة:
Schedule::command('telescope:prune --hours=48')->daily();وتأكد من أن Laravel Scheduler نفسه يعمل على الخادم:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1تقليل تكلفة Telescope
- عطّل Watchers التي لا تخدم التحقيق الحالي.
- ارفع مستوى Log من
debugإلىerrorفي الإنتاج. - اضبط حد Response على قيمة صغيرة مناسبة.
- استبعد الأوامر والقدرات كثيرة التكرار.
- استخدم Filtering لتقليل الكتابات إلى قاعدة البيانات.
- اختر مدة احتفاظ قصيرة ما لم توجد حاجة مدروسة لمدة أطول.
- راقب زمن الطلب وحجم جداول Telescope قبل التفعيل وبعده.
تشغيل Telescope مع العمال طويلة العمر
عمال Queue وLaravel Octane والعمليات الدائمة لا يعيدون قراءة الإعدادات تلقائيًا دائمًا. بعد تغيير إعدادات Telescope أو نشر إصدار جديد، أعد تشغيل العمال بالطريقة المناسبة لبنيتك، مثل:
php artisan queue:restart
php artisan octane:reloadنفّذ الأمر الثاني فقط إذا كان تطبيقك يستخدم Octane.
سيناريوهات تشخيص عملية
السيناريو الأول: Endpoint بطيء
- افتح Requests وحدد المسار البطيء.
- راجع مدة الطلب والذاكرة وحجم الاستجابة.
- افتح Queries المرتبطة، ثم رتبها حسب الزمن وابحث عن التكرار.
- راجع HTTP Client لمعرفة إن كان التأخير من خدمة خارجية.
- افحص عدد Hydrations إذا كان التطبيق يحمل آلاف النماذج.
- طبّق التحسين، ثم أعد الطلب وقارن العدد والزمن.
السيناريو الثاني: مهمة Queue لا تعمل
- ابحث في Jobs وتأكد من أن المهمة أُرسلت فعلًا.
- راجع Connection وQueue والحالة وعدد المحاولات.
- إذا فشلت، افتح Exception وStack Trace.
- راجع Logs وQueries وHTTP calls المرتبطة بالمهمة.
- تحقق من أن العامل يستمع إلى الطابور الصحيح ومن أن الكود المنشور محدث.
السيناريو الثالث: صلاحية تعيد 403
- افتح الطلب الذي أعاد 403.
- انتقل إلى Gate Watcher.
- حدد اسم Ability والنموذج والمستخدم والنتيجة.
- راجع Policy المستخدمة ومدى تحميل العلاقة أو الدور المطلوب.
- اكتب اختبار Feature يثبت السلوك الصحيح قبل تعديل القاعدة.
السيناريو الرابع: Cache لا يعطي النتيجة المتوقعة
- ابحث عن المفتاح في Cache Watcher.
- راجع تسلسل hit وmiss وwrite وforget.
- تحقق من تركيب المفتاح وTenant أو Locale أو User ID.
- إذا استخدمت Redis، راجع Redis Watcher بحذر لتجنب تكرار البيانات غير الضروري.
- تحقق من مدة TTL ومن مواضع إبطال Cache بعد التحديث.
السيناريو الخامس: بريد غير صحيح
- افتح Mail Watcher واعرض الرسالة داخل المتصفح.
- راجع المرسل والمستلمين والعنوان والبيانات.
- نزّل
.emlإذا احتجت فحص Headers وعميل بريد فعلي. - إذا كان البريد مرسلًا عبر Queue، اربطه بسجل Job.
- لا تستخدم وجود البريد في Telescope دليلًا منفردًا على وصوله إلى صندوق المستلم؛ راجع مزود البريد كذلك.
Telescope مقابل Debugbar وHorizon وPulse والسجلات
| الأداة | الدور الأساسي | أفضل استخدام |
|---|---|---|
| Telescope | فحص تفصيلي مترابط لأنشطة التطبيق. | التطوير والتحقيق في طلب أو مهمة أو خطأ. |
| Laravel Debugbar | معلومات تصحيح داخل صفحة المتصفح أثناء الطلب. | التطوير المحلي السريع لصفحات الويب. |
| Laravel Horizon | إدارة ومراقبة طوابير Redis. | الـQueues، Throughput، العمال، وفشل المهام. |
| Laravel Pulse | مؤشرات أداء وصحة التطبيق في لوحة موجزة. | مراقبة الاتجاهات والاختناقات العامة. |
| Logs | سجل نصي أو مركزي للأحداث التي يكتبها التطبيق. | التدقيق والتجميع طويل الأجل والتنبيهات. |
لا يوجد اختيار واحد صحيح لكل الحالات. يستخدم فريق ناضج Pulse أو منصة Monitoring لاكتشاف المشكلة، وHorizon للطوابير، وTelescope للغوص في السياق، وLogs للحفظ والبحث والتنبيه وفق سياسة المؤسسة.
المشكلات الشائعة وحلولها
المسار /telescope يعيد 404
- تأكد من تثبيت الحزمة وتشغيل
php artisan telescope:install. - تحقق من تسجيل
TelescopeServiceProvider. - شغّل
php artisan route:list --path=telescope. - امسح Cache الإعدادات والمسارات ثم أعد بناءه عند الحاجة.
لوحة Telescope فارغة
- تحقق من
TELESCOPE_ENABLED. - راجع Filter؛ ربما يرفض كل السجلات في البيئة الحالية.
- تأكد من تشغيل Watcher المطلوب.
- تحقق من نجاح Migrations ومن اتصال قاعدة البيانات.
- أعد تشغيل Queue/Octane workers بعد تغيير الإعدادات.
403 عند فتح اللوحة في الإنتاج
- هذا غالبًا سلوك الحماية المتوقع، لا عطلًا.
- تأكد من تسجيل الدخول بالمستخدم الصحيح.
- راجع Gate المسمى
viewTelescope. - تحقق من أن Middleware المصادقة والجلسة يعملان على النطاق نفسه.
قاعدة البيانات تكبر بسرعة
- جدول
telescope:pruneيوميًا وتأكد من تشغيل Scheduler. - قلل ساعات الاحتفاظ.
- عطّل Watchers كثيرة الحجم مثل Request وQuery عند عدم الحاجة.
- ارفع مستوى Log وقلل Response size.
- استخدم Filter أو FilterBatch بدل حفظ كل العمليات.
التحديث أدى إلى خلل في الواجهة
php artisan telescope:publish
php artisan optimize:clearراجع دليل الترقية إذا كان التحديث بين إصدارين رئيسيين.
الأسئلة الشائعة
هل Laravel Telescope مجاني؟
نعم، هو مشروع رسمي مفتوح المصدر، ويُنشر مستودعه على GitHub وفق الترخيص المبيّن في المستودع.
هل يمكن تشغيله في الإنتاج؟
نعم تقنيًا، بشرط حماية اللوحة، إخفاء البيانات الحساسة، تقليل التسجيل، وجدولة حذف البيانات. في الأنظمة الحساسة، الأفضل تشغيله لمدة محددة ولغرض تشخيص واضح.
هل يؤثر في الأداء؟
أي نظام يجمع ويسجل بيانات يضيف كلفة في المعالجة والتخزين. يتحدد الأثر بحجم الحركة وعدد Watchers ونوع البيانات وقواعد Filter. لذلك يجب القياس في بيئتك وعدم افتراض أن إعداد التطوير مناسب للإنتاج.
هل يستبدل Sentry أو Datadog أو OpenTelemetry؟
لا. Telescope أداة Laravel داخلية ممتازة للتحقيق، بينما تقدم منصات الرصد عادة تنبيهات وتجميعًا طويل الأجل وتتبعًا موزعًا ومقاييس للبنية التحتية وخدمات متعددة.
هل يحذف telescope:prune بيانات التطبيق؟
يستهدف الأمر بيانات Telescope وفق إعداداته، لا سجلات أعمال تطبيقك. ومع ذلك، اختبر أوامر الصيانة في بيئة آمنة، واحتفظ بنسخ احتياطية مناسبة لقواعد الإنتاج.
ما الفرق بين filter وfilterBatch؟
filter يقرر حفظ كل Entry بصورة منفردة. أما filterBatch فيقرر حفظ المجموعة المرتبطة بطلب أو أمر كاملة، وهو مفيد للحفاظ على سياق الخطأ.
لماذا لا تظهر قيم dump()؟
يوضح التوثيق الرسمي أن تبويب Dump يجب أن يكون مفتوحًا في المتصفح ليتم تسجيل القيم؛ وإلا يتجاهلها المراقب.
خلاصة أفضل الممارسات
- ابدأ من Request أو Exception أو Job، ثم تتبع العلاقات.
- ابحث عن التكرار وعدد العمليات إلى جانب الزمن.
- فعّل أقل مجموعة Watchers تحقق هدف التحقيق.
- استخدم وسومًا مرتبطة بمجال العمل لتسريع البحث.
- لا تحفظ أسرارًا أو بيانات شخصية لا تحتاج إليها.
- اجعل الوصول إلى لوحة الإنتاج امتيازًا إداريًا محميًا.
- جدول الحذف الدوري وراقب نمو قاعدة البيانات.
- أعد قياس المشكلة بعد الإصلاح بدل الاكتفاء بسلامة الكود نظريًا.
- استخدم Telescope ضمن منظومة Monitoring أوسع، لا كبديل عن كل أدوات الرصد.
التعليقات (0)
لا توجد تعليقات بعد — كن أول من يشارك رأيه.
أضف تعليقك