حول المحتوى:
كيفية إعداد Sentry لتتبع الأخطاء والأداء في تطبيقات بايثون وDjango: تكامل، تصنيف الأخطاء، إعداد التنبيهات، وتحليل stack traces لحل المشاكل أسرع.
إذا كنت تبني تطبيقات بايثون أو Django على بيئة إنتاج (Production)، فمجرد ظهور Traceback في الـConsole لم يعد كافيًا. تحتاج إلى أداة مركزية تجمع الأخطاء، تحللها، تربطها بسلوك المستخدم، وتخبرك فورًا عند حدوث مشكلة. هنا يأتي دور Sentry كواحدة من أقوى منصات مراقبة أخطاء Sentry Python وتتبع الأداء (APM).
في هذا المقال من افهم صح سنشرح خطوة بخطوة:
Sentry منصة سحابية (مع إمكانية تثبيتها ذاتيًا Self-Hosted) متخصصة في:
بدلًا من انتظار المستخدمين ليبلغوك عن خطأ بشكل غامض، يقوم Sentry بالتقاط الاستثناء (Exception) لحظة حدوثه، مع كامل التفاصيل اللازمة لإصلاحه بسرعة.
إذا كنت مهتمًا بتحسين جودة كودك في بايثون، يمكنك أيضًا الاطلاع على: أهم الأخطاء الشائعة في بايثون التي يرتكبها المطورون الجدد.
قبل دمج Sentry مع تطبيق بايثون أو Django، تحتاج إلى:
الـ DSN سيكون بالشكل (تقريبي):
https://<PUBLIC_KEY>@o<ORG_ID>.ingest.sentry.io/<PROJECT_ID>
من الأفضل تخزين الـ DSN في متغير بيئة Environment Variable مثل:
SENTRY_DSN="https://..."
إذا كان لديك سكربت بايثون أو خدمة (Service) بسيطة تريد مراقبتها، يمكنك استخدام حزمة sentry-sdk.
باستخدام pip:
pip install --upgrade sentry-sdk
في ملف main.py أو نقطة دخول التطبيق:
import os
import sentry_sdk
sentry_sdk.init(
dsn=os.getenv("SENTRY_DSN"),
traces_sample_rate=0.2, # نسبة تتبع الأداء (0 إلى 1)
environment="production",
release="[email protected]",
)
def divide(a, b):
return a / b
if __name__ == "__main__":
# خطأ متعمد لاختبار Sentry
divide(10, 0)
عند تشغيل السكربت سيتسبب القسمة على صفر في Exception سيتم إرساله مباشرة إلى مشروعك في Sentry، حيث يمكنك مشاهدة:
مع Django، التكامل أعمق لأن Sentry يدعم:
قم بالتثبيت:
pip install --upgrade sentry-sdk[django]
ثم في settings.py:
import os
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn=os.getenv("SENTRY_DSN"),
integrations=[DjangoIntegration()],
traces_sample_rate=0.3, # تتبع 30% من الطلبات لتحليل الأداء
send_default_pii=True, # يرسل بيانات المستخدم (اختياري – انتبه للخصوصية)
environment="production",
release="[email protected]",
)
يفضل وضع هذا الكود في أعلى ملف settings.py بعد ضبط متغيرات البيئة، أو في ملف إعدادات منفصل يتم استيراده في بيئة الإنتاج فقط.
يمكنك إضافة View لاختبار Sentry:
from django.http import HttpResponse
def trigger_error(request):
division_by_zero = 1 / 0
return HttpResponse("This will never be reached")
ثم أضف المسار في urls.py وادخل على الرابط في المتصفح. يجب أن يظهر الخطأ في لوحة تحكم Sentry خلال ثواني.
بعد إرسال أول خطأ، ستشاهد في لوحة التحكم:
ZeroDivisionError أو IntegrityError.الـ Stack Trace في Sentry يعرض:
حاول التركيز على أول Frame يخص كودك أنت (وليس مكتبات الطرف الثالث). في Sentry يمكنك تمييز كودك على أنه In-App ليظهر بشكل أوضح.
للاستفادة القصوى من مراقبة أخطاء Sentry Python، يجب أن تتعامل مع Issues بشكل منظم:
module:payments أو severity:high لسهولة الفلترة.يمكنك أيضًا استخدام Breadcrumbs، وهي سجل للأحداث التي حدثت قبل الاستثناء (Logs، Requests أخرى، استدعاءات وظائف) لتفهم تسلسل الأحداث الذي أدى إلى الخطأ.
التنبيهات (Alerts) جزء مهم من المنظومة: لا تريد أن تمتلئ بريدك بالإشعارات لكل Exception بسيط، لكن في نفس الوقت تحتاج تنبيه فوري عند وجود خطأ حاد يؤثر على المستخدمين.
يمكنك ضبط هذه القواعد من تبويب Alerts داخل المشروع في Sentry، واستخدام Conditions مثل:
إلى جانب مراقبة الأخطاء، يقدم Sentry أيضًا Performance Monitoring الذي يسمح لك بـ:
لقد فعلنا تتبع الأداء مسبقًا بإعداد traces_sample_rate في sentry_sdk.init. يمكنك التحكم في:
staging وproduction فقط.يمكنك إنشاء Transaction يدويًا حول جزء معين من الكود تريد تحليله:
import sentry_sdk
with sentry_sdk.start_transaction(name="data_import_job"):
run_heavy_import()
سيسمح لك هذا برؤية زمن التنفيذ، وتقسيمه إلى Spans فرعية إذا استخدمت Integrations إضافية (مثل Requests أو SQLAlchemy).
للمزيد عن تحسين الأداء في العالم غير المتزامن، يمكن الرجوع إلى:
البرمجة غير المتزامنة في بايثون: تحسين الأداء باستخدام async و await.
أحيانًا تحتاج لإرسال معلومات إضافية تساعدك في تحليل الخطأ، مثل ID المستخدم في النظام الخارجي، أو حالة سلة الشراء. يمكن عمل ذلك عبر:
مثال في بايثون:
import sentry_sdk
sentry_sdk.set_context("cart", {
"items_count": 3,
"total_price": 120.5,
})
الـ Tags مفيدة للفصل بين أنواع الأخطاء:
sentry_sdk.set_tag("module", "checkout")
sentry_sdk.set_tag("region", "sa")
في Django، يمكن ربط مستخدم Auth الحالي تلقائيًا عند تفعيل send_default_pii=True. أو يمكنك ضبطه يدويًا:
from sentry_sdk import set_user
set_user({
"id": request.user.id,
"email": request.user.email
})
كن حذرًا من إرسال أي بيانات حساسة (Passwords، Tokens، أرقام بطاقات) إلى Sentry، حفاظًا على الخصوصية والالتزام بالسياسات.
لتحسين جودة كود Django وأمانه، يمكنك مراجعة:
أهم ممارسات الأمن السيبراني في بناء تطبيقات باستخدام جانقو.
Sentry لا يعمل في عزلة، بل يمكن دمجه مع:
هذا التكامل يساعدك على جعل مراقبة أخطاء Sentry Python جزءًا من دورة التطوير DevOps بالكامل، وليس مجرد نظام إشعارات منفصل.
استخدام Sentry مع تطبيقات بايثون وDjango يختصر الكثير من الوقت والجهد في:
ابدأ الآن بتجربة الخطة المجانية، قم بإعداد مشروع لـ Django أو بايثون، أضف الـ DSN، واختبر أول خطأ، ثم وسّع الإعدادات تدريجيًا (تنبيهات، Tags، Context، Performance) حتى يصبح Sentry جزءًا أساسيًا من بنية المراقبة في تطبيقاتك.
بهذه الخطوات، تتحول معالجة الأخطاء من رد فعل متأخر إلى نظام مراقبة استباقي يساعدك على تحسين استقرار التطبيق وتجربة المستخدم بشكل مستمر.
كيفية إعداد Sentry لتتبع الأخطاء والأداء في تطبيقات بايثون وDjango: تكامل، تصنيف الأخطاء، إعداد التنبيهات، وتحليل stack traces لحل المشاكل أسرع.
مساحة اعلانية