Laravel / المتقدم / الدرس 17
الرصد ومعالجة الفشل
اربط السجلات والمقاييس وعقود الفشل بنتائج المستخدم مع حماية السياق وتمييز حيوية التطبيق من صحة اعتمادياته.
في هذه الصفحة
أهداف الدرس
- اختيار أحداث منظمة وأبعاد مقاييس محدودة.
- ربط الطلب والمهام دون تسجيل الأسرار.
- اختبار الإبلاغ والاستعادة مستقلين عن تنسيق الرسالة.
رصد العملية التي تهم المستخدم
تصف الإشارة نتيجة كاكتمال التقرير أو رفضه أو فشله لا تشغيل الأسلوب فقط. تضم التجربة ثلاث ملاحظات بطول وحالة وفشل تقرير بهوية ربط من الخادم. حدّد الحدود والنجاح والتأخر المقبول قبل اللوحات. تفصل السجلات الحدث وتلخص المقاييس مجموعات وتربط التتبعات المراحل، ولا تستبدل عقد الخطأ. قد تنجح HTTP وتفشل المهام بلا نهاية.
استخدام مقام صحيح ومجموعة معلنة
يعد نموذج PHP الفشل في الملاحظات الثلاث ويطبع كسرًا دون اختلاق هدف خدمة أو مئين مقاس. حدّد الفشل والنافذة والمقام للمقياس الحقيقي. لا يثبت الفراغ غياب الخطأ. تحتاج المئينات توزيعًا مناسبًا لا متوسط تسميات. حدّ أبعاد المقاييس كالعملية والنتيجة واترك هويات الطلب والمستخدم لسياق أحداث مضبوط.
<?php
declare(strict_types=1);
$observations = [
["status" => 200, "duration_ms" => 30],
["status" => 500, "duration_ms" => 120],
["status" => 200, "duration_ms" => 50],
];
$failures = count(array_filter($observations, fn (array $event): bool => $event["status"] >= 500));
$total = count($observations);
echo "requests=", $total, " failures=", $failures, PHP_EOL;
echo "error_fraction=", $failures, "/", $total, PHP_EOL;
requests=3 failures=1
error_fraction=1/3
لواحدة من الثلاث حالة خطأ خادم. هذه نتيجة حساب اصطناعي لا نسبة إنتاج مقاسة.
إرفاق هوية مفيدة دون نسخ الحمولة الحساسة
تقبل سجلات Laravel سياقًا منظمًا مع رسالة ثابتة. يفترض المقطع التقرير 17 وهوية ربط من الخادم وإصدارًا معلومًا ويستبعد الأجسام والرموز والبايتات ومعاملات القاعدة. احمل الربط للمهمة صراحة وافحص الهوية الخارجية ولا تعدها دليل أمان. امنع تسرب السياق بين أعمال العامل الطويل. يسهل السياق المحلي للحدث التفكير بدل حالة عامة محتفظة عرضيًا.
<?php
use Illuminate\Support\Facades\Log;
Log::warning("report_generation_failed", [
"report_id" => 17,
"correlation_id" => $serverCorrelationId,
"release" => $releaseId,
"failure_category" => "source_unavailable",
]);
المتوقع بسجل معزول: حدث ثابت بالحقول المنتقاة دون أسرار. يتبع التنسيق والاحتفاظ والتسليم الإعداد ولا تُنفذ هنا.
فصل الإبلاغ والعرض والاستعادة
الإبلاغ والعرض واستعادة العمل قرارات مختلفة. أبلغ غير المتوقع عند حد مفيد وأعد استجابة آمنة دون تسجيل كل طبقة ثم الرمي. تتبع أخطاء الفحص والإذن عقودها لا حادث خادم موحدًا. لا يجعل منع الإبلاغ نجاحًا ولا تصلح الرسالة الودية حالة جزئية. عطّل APP_DEBUG للعموم. لا تثبت نقطة سلامة الإقلاع صحة القاعدة والمخزن والطابور والبعيد دون فحوص محدودة مقصودة.
اختبار بقاء دليل الفشل مفيدًا
استخدم قنوات معزولة لفحص الفئة والسياق والحجب، واختبر فشل المهمة ونفاد المحاولة والمهلة وانقطاع السجل. تحتاج عتبة التنبيه حركة أساسية وأثر مستخدم لا نسبة عامة. راقب تأخر الطابور والإكمال مع HTTP. حدّ الاحتفاظ والوصول واحفظ هوية تشخيص دون أسرار. صرّح بالدليل؛ فلا يثبت استدعاء سجل تسليمه أو اكتمال التتبع أو استعادة العملية.
الأخطاء الشائعة وإصلاحها
عاصفة إعادة مخفية خلف قبول HTTP ناجح.
- لماذا يحدث؟
- ينتهي الرصد قبل الإكمال غير المتزامن.
- كيف تصلحه؟
- تتبّع النتائج والتأخر والنفاد منفصلة.
- كيف تتجنب تكراره؟
- عرّف النجاح عند حد العمل الحقيقي.
السجلات تحوي رموزًا أو أجسام طلب كاملة.
- لماذا يحدث؟
- أغفل جمع السياق حساسية البيانات.
- كيف تصلحه؟
- انتق حقولًا آمنة واضبط الاحتفاظ.
- كيف تتجنب تكراره؟
- اختبر الحجب وسياسة الوصول.
تصير المقاييس مكلفة لهوية كل طلب كتسمية.
- لماذا يحدث؟
- استُخدمت هويات غير محدودة كأبعاد.
- كيف تصلحه؟
- استخدم أبعادًا محدودة وهوية تفصيلية بأحداث مضبوطة.
- كيف تتجنب تكراره؟
- راجع تعدد الأبعاد قبل النشر.
اختبر فهمك
1. أضف ملاحظة رابعة بحالة 503. أعط العدّ وسبب عدم استنتاج مئين زمن منه.
اعرض الحل المشروح
تصير الطلبات أربعًا والفشل اثنين والكسر 2/4. لا يحوي العد توزيع مدد فلا يحدد مئينًا. تحتاج المدد نفسها تعريف مئين وعينة. افصل نسبة الخطأ والزمن بمجموعتيهما ونافذتيهما.
2. تضيف فرقة correlation_id وuser_id لتسميات كل مقياس زمن. اقترح تصميمًا يحفظ التشخيص الفردي.
اعرض الحل المشروح
استخدم فئة المسار والعملية والنتيجة، واحفظ الربط المفحوص بسجلات أو تتبعات مقيدة وهوية المستخدم عند ضرورة محمية. اربط التنبيه بالتحقيق بدل سلسلة لكل طلب. اختبر السياق وغياب الحقول الحساسة.
أهم ما تعلمته
- ارصد إكمال العمل لا قبول الطلب فقط.
- استخدم سياقًا منتقى ومقاييس محدودة.
- لا يثبت الإبلاغ الاستعادة أو صحة الاعتمادية.