انتقل إلى المحتوى
use-cases / tail-prod-logs-to-a-url / hero
PIPE · بثّ سجلات مباشر

تتبّع سجلات الإنتاج عبر رابط يستطيع الجميع طلبه بـ curl

تحدث حادثة. ثلاثة مهندسين يريدون نفس السجلات في الوقت نفسه. مرسِل واحد يُمرّر tail -F إلى رابط Hoody Pipe. كل من يملك الرابط يُشغّل curl ويرى البايتات تمرّ مباشرةً. لا حصن، لا تثبيت وكيل، لا مقعد لوحة تحكم.

اقرأ توثيق Pipe
use-cases / tail-prod-logs-to-a-url / mechanism

مرسِل واحد. عدّة curl. لا وكيل.

على حاوية الإنتاج، سطر واحد يُمرِّر tail مباشرة إلى رابط Hoody Pipe. المستقبِلون يطلبون نفس المسار بـ GET. الأنبوب لا يحتفظ بشيء — البايتات تتدفّق عبره. أوّل مستقبِل يتّصل يفكّ حصار المرسِل؛ يستطيع حتى 256 قارئاً الانضمام إلى نفس المسار.

prod-app-7 · /var/log/app
PUT · المرسِل
# في الحاوية الإنتاج — سطر واحد.
# tail -F يتبع الأسطر الجديدة إلى الأبد؛ curl -T - يضع stdin
# مباشرة إلى مسار pipe. ?n=4 يقول "انتظر 4 قارئين".

tail -F /var/log/app/*.log \
  | curl -T - \
      "https://prod-pipe.containers.hoody.com/api/v1/pipe/live?n=4"

# [INFO] انتظار 4 جهات استقبال للاتصال...
# [INFO] البث إلى 4 جهات استقبال...
الأنبوب لا يحتفظ بشيء · البايتات تتدفّق عبره
أي حاسوب محمول · بدون SSH
GET · القرّاء
# أي مهندس لديه الرابط — نفس الأمر، نفس المسار.
# جسم الاستجابة هو stdout الحي للمرسل.
# حتى 256 قارئ يمكنهم الانضمام. تقدم SSE متاح أيضاً.

curl "https://prod-pipe.containers.hoody.com/api/v1/pipe/live?n=4"

# 200 GET /v1/orders/8421 · 18ms
# POST /v1/checkout user=u_28f payload=ok
# 500 POST /v1/checkout · stripe timeout
# retrying charge attempt=2/3

قطعتان من واجهة Pipe الموثّقة: PUT /api/v1/pipe/[path] على المرسِل، GET /api/v1/pipe/[path] على كل قارئ، كلاهما مفهرس بنفس قيمة n. الخادم يُمرِّر نوع المحتوى من المرسِل، يحتفظ بالاتّصال حتى TTL مدّتها 5 دقائق بانتظار القرّاء، ويُطبّق ضغطاً عكسياً إن كان أحد القرّاء بطيئاً.

use-cases / tail-prod-logs-to-a-url / powers

ما يمنحك إيّاه الأنبوب ولا تمنحه لوحة التحكم

رابط السجلات يتصرّف بشكل مختلف عن مقعد Datadog. يُقرأ بالرابط لا بتسجيل الدخول. يختفي حين يتوقّف المرسِل. ويتّسع لقناة حادثة كاملة.

متعدّد المستخدمين افتراضياً

حتى 256 طلب curl على بثّ واحد

n=N موثّق في واجهة Pipe: كل قارئ ينضم إلى نفس المسار بنفس قيمة n يستقبل نسخة فان-آوت متطابقة. مهندسو SRE والمناوبون والمؤسّس الذي يراقب من هاتفه — جميعهم يتتبّعون البثّ نفسه دفعةً واحدة.

أصلي على HTTP

لا وكيل. لا مُحوِّل. فقط curl.

ليس هناك ما يجب تثبيته على جانب القرّاء. أي شيء يتحدّث HTTP — curl، fetch، تبويب متصفّح، قناة حادثة في Slack تعرض الرابط — هو متتبِّع سجلات صالح. البايتات هي جسم الاستجابة.

زائل

ctrl-C وينتهي الأنبوب

حين ينقطع المرسِل، يختفي الأنبوب. لا احتفاظ يجب ضبطه، لا حجم سجلات يجب تنظيفه، لا نقطة نهاية متبقّية مكشوفة على الإنترنت. الرابط كان مساراً، لا مكاناً — والمسار يُغلق حين تنتهي الحادثة.

use-cases / tail-prod-logs-to-a-url / capacity

الأرقام خلف الرابط

من مواصفات Pipe API. حدود وسلوكيات تجعل الرابط يُحسّ كبنية تحتية لا كلعبة.

  1. قرّاء لكل مسار256

    السقف الموثّق لقيمة n. قناة الحادثة لديك لن تنفد منها المقاعد.

  2. بايت مُخزّن0

    الأنبوب يبثّ مباشرةً من طرف إلى طرف. لا قرص وسيط، لا احتفاظ يجب إدارته.

  3. زمن انتظار TTL5 دقائق

    يستطيع المستقبِلون الاتّصال قبل المرسِل؛ الخادم يحتفظ بالخانة حتى 5 دقائق.

المصدر: Hoody Pipe API — الحدود موثّقة لـ /api/v1/pipe/[path]، ومُعامل n، وزمن TTL لأنبوب غير مُؤسَّس.

use-cases / tail-prod-logs-to-a-url / punchline

السجلات لم تعد مكاناً. أصبحت مساراً.

لا حصن · لا مقعد · لا مُحوِّلرابط واحد · حتى 256 طلب curl
بالأمسssh bastion → tail -f /var/log/app.log
اليومhttps://prod-pipe.../api/v1/pipe/live
اقرأ Pipe API
use-cases / tail-prod-logs-to-a-url / replaces

ما يستبدله هذا

مجموعة الأدوات والطقوس التي تستدعيها حالياً لتجمع ثلاثة مهندسين يحدّقون في نفس سجلّ الإنتاج. كلّ واحدة تتقاضى ثمناً عن المقعد أو الوكيل أو لوحة التحكم. الأنبوب رابط واحد.

  • مقاعد Datadog Logsترخيص لكل مستخدم لرؤية نفس البايتات
  • حصن SSH + tail -fقفز، ssh، إيجاد ملف السجلّ، التكرار لكل مهندس
  • محوِّلات Loggly / Logtailتثبيت وكيل، إعداد، فاتورة احتفاظ
  • لوحات ELK / Splunkحزمة ثقيلة لاستضافة tail واحد
  • مشاركة شاشة Slack لـ tail -fشخص واحد يتتبّع، الباقون يحدّقون
  • مجموعات سجلّات مزوّد السحابةمقعد كونسول إضافة إلى IAM لكل قارئ
use-cases / tail-prod-logs-to-a-url / cta

تنتهي الحادثة. تضغط ctrl-C على المرسِل. يختفي الأنبوب. لا شيء يجب تنظيفه.

اقرأ Pipe API
use-cases / tail-prod-logs-to-a-url / related

اقرأ الآخرين