رفتن به محتوا
cloudhostمستندات
حساب و هزینه

وب‌هوک، خروجی لاگ و ردیابی

رویدادهای تیم را به آدرس خودتان بفرستید، لاگ‌ها را به ابزار خودتان منتقل کنید و مسیر یک درخواست را قدم‌به‌قدم ببینید.

وب‌هوک#

وب‌هوک یک آدرس https است که برای رویدادهایی که انتخاب می‌کنید یک درخواست POST امضاشده می‌گیرد. می‌توانید آن را برای کل تیم یا برای یک پروژه ایجاد کنید. این قابلیت پلن حرفه‌ای است: پلن رایگان ۱ وب‌هوک و حرفه‌ای ۲۰ وب‌هوک دارد. آدرس باید به یک آدرس عمومی برسد؛ آدرسهای خصوصی و داخلی رد می‌شوند و ریدایرکت دنبال نمی‌شود.

رویدادکی
deployment.created · deployment.readyاستقراری شروع شد؛ استقرار زنده شد
deployment.failed · build.failedاستقرار پروداکشن یا بیلد ناموفق بود
deployment.promoted · deployment.rolled_backپیش‌نمایشی به پروداکشن ارتقا یافت؛ پروداکشن به نسخهٔ قبل برگشت
alert.fired · alert.resolvedهشدار فعال یا برطرف شد
budget.reached · invoice.issuedبودجهٔ ماهانه پر شد؛ فاکتور صادر شد
member.added · member.removedعضوی به تیم پیوست یا حذف شد
domain.verified · support.replyدامنه تایید شد؛ پشتیبانی پاسخ داد

هر درخواست این سرایند را دارد: Webhook-Signature: t=<زمان>,v1=<امضا>. امضا HMAC-SHA256 رشتهٔ <زمان>.<بدنهٔ خام> با رمز وب‌هوک است. بدنهٔ خام را بررسی کنید، با مقایسهٔ زمان‌ثابت، و درخواستی را که t آن بیش از ۵ دقیقه با ساعت شما فاصله دارد رد کنید تا بازپخش نشود. رمز فقط هنگام ایجاد یا تعویض نشان داده می‌شود.

بررسی امضا
const sig = Object.fromEntries(req.headers["webhook-signature"].split(",").map((p) => p.split("=")));
const want = crypto.createHmac("sha256", secret).update(`${sig.t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(sig.t)) < 300;
if (!fresh || !crypto.timingSafeEqual(Buffer.from(want), Buffer.from(sig.v1))) return res.writeHead(400).end();

هر پاسخ 2xx در ۱۰ ثانیه یعنی موفق. در غیر این صورت ۵ بار دیگر تلاش می‌شود: پس از ۳۰ ثانیه، ۲ دقیقه، ۱۰ دقیقه، ۱ ساعت و ۶ ساعت. اگر ۵ ارسال پیاپی با همهٔ تلاش‌ها شکست بخورد، وب‌هوک غیرفعال می‌شود و مالک و مدیرها خبردار می‌شوند؛ با webhooks enable دوباره روشنش کنید. هر ارسال با درخواست و پاسخ (کوتاه‌شده) ۳۰ روز در گزارش می‌ماند و می‌شود دوباره فرستاد.

نمونه
cloudhost webhooks add https://example.com/hooks/deploys --events deployment.ready,deployment.failed --project shop
cloudhost webhooks test 4f3a9c2e
cloudhost webhooks deliveries 4f3a9c2e --status failed
cloudhost webhooks redeliver 4f3a9c2e 812

خروجی لاگ#

لاگ‌های یک پروژه یا کل تیم را به آدرس خودتان بفرستید (پلن حرفه‌ای): https با NDJSON (هر خط یک آبجکت JSON، فشرده با gzip) یا syslog روی TLS (syslog+tls://میزبان:6514). می‌توانید بر اساس منبع (request، console، cron، fetch) و سطح (debug، info، warn، error) فیلتر کنید و درصدی از خط‌ها را نمونه‌برداری کنید. درخواست‌های HTTPS با Log-Signature امضا می‌شوند، مثل وب‌هوک؛ می‌توانید تا ۵ سرایند مثل Authorization هم اضافه کنید (دیگر نمایش داده نمی‌شوند).

دسته‌ها حداکثر ۵۰۰ خط یا ۱ مگابایت‌اند. اگر مقصد پاسخ ندهد، ارسال با فاصلهٔ فزاینده (۵ ثانیه تا ۵ دقیقه) تکرار می‌شود و جای خواندن حفظ می‌شود تا خطی جا نیفتد. پس از ۳۰ شکست پیاپی خروجی غیرفعال می‌شود و تیم خبردار می‌شود. صفحهٔ سلامت، وضعیت، شمار خط‌ها و آخرین ارسال‌ها را نشان می‌دهد.

نمونه
cloudhost drains add "errors" --kind https --url https://logs.example.com/ingest --levels warn,error \
  --header "Authorization:Bearer $TOKEN"
cloudhost drains add "all logs" --kind syslog --url syslog+tls://logs.example.com:6514 --project shop
cloudhost drains show 7b1d0e55

ردیابی درخواست‌ها#

یک ردیابی مسیر یک درخواست است: فانکشن، پرس‌وجوهای دیتابیس، دستورهای کش و فراخوانی‌های fetch، هر کدام با زمان شروع و مدت. در «مشاهده‌پذیری ← ردیابی‌ها» فهرست را با فیلتر وضعیت، خطا، کندی و مسیر می‌بینید و با باز کردن یکی، نمودار آبشاری spanها را. ردیابی‌ها در پلن رایگان ۲۴ ساعت و در حرفه‌ای ۷ روز نگه داشته می‌شوند.

هر درخواست به برنامه یا فانکشن یک شناسهٔ ردیابی می‌گیرد که در هدر X-Trace-Id پاسخ برمی‌گردد؛ اگر درخواست یک هدر traceparent معتبر (استاندارد W3C) داشته باشد، همان ردیابی ادامه پیدا می‌کند. کد شما هم traceparent درخواست را می‌گیرد تا اگر خواست آن را در fetchهای خودش بفرستد. فراخوانی‌های env.DB، env.CACHE، env.BUCKET و fetch بیرونی خودبه‌خود span می‌شوند: پرس‌وجو با فعل و جدولش (SELECT cart_items)، کش با نام دستور و fetch با روش و میزبان. مقدارها، کلیدها، بدنه‌ها، هدرها و رشتهٔ پرس‌وجو هرگز ثبت نمی‌شوند.

همهٔ درخواست‌ها نگه داشته نمی‌شوند. در هر پروژه چند درخواست اول همیشه ثبت می‌شوند (تا وقتی سایت را امتحان می‌کنید همه را ببینید) و بعد نمونه‌ای به اندازهٔ پلن: در رایگان حدود یکی در هر ۱۰ ثانیه و در حرفه‌ای یکی در ثانیه. هر درخواست ناموفق (۵xx) یا کند (بیش از ۱ ثانیه) هم تا سقفی نگه داشته می‌شود. ورودی لاگِ یک درخواستِ ثبت‌شده به ردیابی‌اش لینک دارد.

نمونه
cloudhost traces list --project shop --status 5xx
cloudhost traces show 0123456789abcdef0123456789abcdef