انتقل إلى المحتوى الرئيسي

خط الأنابيب المدفوع بالأحداث

يعالج AuroraSOC الأحداث الأمنية عبر مسار متعدد المراحل يعتمد على الأحداث، ويستخدم ثلاثة أنظمة مراسلة متكاملة. الهدف من هذا التصميم هو ضمان الموثوقية، والقدرة على التوسع، والحفاظ على ترتيب المعالجة.

نظرة عامة على المسار

في النشر الافتراضي يعتمد AuroraSOC على Python API وPython MQTT consumer لتطبيع الأحداث والتحقق منها قبل نشرها إلى Redis Streams. فعّل --profile rust-core فقط إذا كنت تريد المسار السريع الاختياري للأحمال العالية أو لأعمال الاعتماد العتادي.

لماذا ثلاثة أنظمة مراسلة؟

لكل نظام دور مختلف:

النظامالغرضالنمطالمتانة
Redis Streamsناقل الأحداث الداخليConsumer groupsIn-memory + AOF
NATS JetStreamالفيدرالية بين المواقعPub/Sub + persistenceDisk-backed
MQTTتواصل أجهزة IoTPub/Sub + QoSتعتمد على الوسيط

Redis Streams: الحافلة الداخلية

Redis Streams هو ناقل الأحداث الأساسي داخل كل نشر منفرد لـ AuroraSOC:

لماذا Redis Streams؟

  • Consumer groups لتوزيع الحمل ومعالجة كل رسالة مرة واحدة عمليًا.
  • Message acknowledgment للسماح بإعادة معالجة الرسائل الفاشلة.
  • Stream trimming لتنظيف الرسائل القديمة تلقائيًا.
  • زمن وصول منخفض جدًا مناسب للتنبيهات الفورية.
  • بنية موجودة أصلًا لأن Redis مستخدم أيضًا في caching.

بنية عامل مهام الوكلاء

يشغل AuroraSOC عاملًا مخصصًا في aurorasoc/workers/agent_task_worker.py لتنفيذ المهام المصطفة ونشر النتائج المرتبطة.

مجموعات المستهلكين المستخدمة في الإنتاج:

الـ streamمجموعة المستهلكينالمستهلك الأساسي
aurora:agent:tasksaurora-agentsAgentTaskWorker
aurora:agent:resultsapi-agent-resultsFastAPI result correlator
aurora:alertsapi-ws-alertsWebSocket alert broadcaster
aurora:auditapi-ws-thoughtsWebSocket reasoning broadcaster

مقاييس تأخر التدفقات

يجب على Prometheus متابعة التأخر والإنتاجية لمسار task/result:

المقياسالوصفاقتراح التنبيه
aurora_agent_tasks_pending_totalالرسائل المعلقة في مجموعة aurora:agent:tasksتحذير إذا تجاوزت 200 لمدة 5 دقائق
aurora_agent_task_retry_totalعدد المهام التي أعيدت إلى الطابورتحذير عند النمو المستمر
aurora_agent_dead_letter_totalعدد المهام المنقولة إلى dead letterتنبيه فوري عند أي ارتفاع غير صفري
aurora_agent_result_correlation_latency_msزمن Publish إلى future resolutionتحذير إذا تجاوز p95 حاجز 5000 ms
aurora_agent_results_unmatched_totalنتائج لا تملك future منتظرًاتحتاج تحقيقًا إذا استمرت بالارتفاع

NATS JetStream: الفيدرالية بين المواقع

للمؤسسات التي تملك أكثر من نشر واحد لـ AuroraSOC:

يحتوي stream المسمى AURORA على الموضوعات التالية:

  • AURORA.alerts لاتحاد التنبيهات.
  • AURORA.ioc_sharing لمشاركة IOCs.
  • AURORA.agent_results لمشاركة نتائج التحقيق.
  • AURORA.audit لمسار التدقيق بين المواقع.

لماذا NATS JetStream؟

  • Persistent delivery بحيث تبقى الرسائل بعد إعادة التشغيل.
  • Exactly-once semantics تقريبية عبر acknowledgment وإزالة التكرار.
  • توزيع جغرافي يناسب البيئات متعددة المواقع.
  • خفيف الموارد مقارنة بخيارات أثقل.

MQTT: اتصال أجهزة IoT الطرفية

يربط MQTT أجهزة IoT محدودة الموارد بالنظام:

لماذا MQTT؟

  • Overhead منخفض مناسب للأجهزة المقيدة.
  • QoS levels للتسليم الموثوق رغم الاتصال المتقطع.
  • Topic wildcards لالتقاط جميع telemetry الخاصة بالأجهزة.
  • معيار صناعي واسع الانتشار في عالم IoT.
  • TLS support لتأمين القناة بين الجهاز والوسيط.

ضمانات المعالجة

الضمانآلية التنفيذ
At-least-once deliveryacknowledgment وإعادة التسليم عند انتهاء المهلة
Orderingترتيب كل stream داخل Redis Streams
Deduplicationإزالة تكرار مبنية على SHA-256 داخل scheduler بنافذة 5 دقائق
Backpressureconsumer groups توفر ضغطًا عكسيًا طبيعيًا
Dead letterنقل المهام الفاشلة بعد 3 retries إلى aurora:agent:dead_letter
مبدأ التصميم

يتبع AuroraSOC فلسفة "نقاط نهاية ذكية وأنابيب بسيطة". أنظمة المراسلة هنا مسؤولة عن النقل فقط، بينما منطق الأعمال الحقيقي يعيش في API والوكلاء والـ scheduler.

مثال كامل لتدفق التنبيه

وعند تفعيل --profile rust-core تستطيع خدمة Rust تنفيذ خطوة التطبيع السريعة قبل النشر إلى Redis Streams نفسها الموضحة أعلاه.