وبهوک، خروجی لاگ و ردیابی
رویدادهای تیم را به آدرس خودتان بفرستید، لاگها را به ابزار خودتان منتقل کنید و مسیر یک درخواست را قدمبهقدم ببینید.
وبهوک#
وبهوک یک آدرس 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