رفتن به محتوا
معماری

معماری

یک نصب خودمیزبان Status200 از چند کانتینر تشکیل می‌شود: یک ingress که هر درخواستی از آن وارد می‌شود، یک ایمیج برنامه که کار را انجام می‌دهد، پراب‌هایی که بررسی‌های مانیتورهای شما را اجرا می‌کنند، و سه مخزن داده. این صفحه نشان می‌دهد این‌ها چطور کنار هم قرار می‌گیرند، هر کدام چه می‌کند و کدام اتصال‌ها از مرز شبکهٔ شما عبور می‌کنند.

flowchart TB People["افراد و<br/>مرورگرها"] Senders["فرستندگان<br/>تله‌متری:<br/>OpenTelemetry،<br/>Fluent Bit،<br/>syslog،<br/>عامل‌ها"] Targets["آنچه پایش<br/>می‌کنید:<br/>داخلی و عمومی"] subgraph Install["شبکهٔ شما"] direction TB Ingress["Ingress<br/>(Nginx، TLS)"] App["برنامه<br/>داشبوردها،<br/>صفحه‌های<br/>وضعیت،<br/>API، دریافت<br/>داده، کارهای<br/>پس‌زمینه"] Runner["Runner"] Probe["پراب‌ها"] subgraph Data["مخزن‌های داده"] direction LR Postgres[("PostgreSQL<br/>پیکربندی<br/>و وضعیت")] ClickHouse[("ClickHouse<br/>لاگ‌ها،<br/>متریک‌ها،<br/>ردها")] Valkey[("Valkey<br/>کش و<br/>صف‌ها")] end end People -->|"HTTPS"| Ingress Senders -->|"OTLP, HTTPS"| Ingress Ingress --> App Runner -->|"برداشتن کارها،<br/>فرستادن نتایج"| App Probe -->|"گرفتن کار،<br/>فرستادن نتایج"| App Probe -->|"HTTP، TCP، ping،<br/>DNS، SNMP"| Targets App --> Postgres App --> ClickHouse App --> Valkey Targets ~~~ Probe

یک نصب خودمیزبان Status200

این نمودار چه نشان می‌دهد

  • افراد از راه ingress به Status200 می‌رسند، که TLS را پایان می‌دهد و هر درخواست را به برنامه می‌فرستد: Dashboard، صفحه‌های وضعیت، API، و هر نقطهٔ دریافتی که تله‌متری به آن فرستاده می‌شود.
  • برنامه وضعیت خود را در PostgreSQL می‌خواند و می‌نویسد، تله‌متری را در ClickHouse نگه می‌دارد، و از Valkey (انشعاب دارای مجوز BSD از Redis 7.2) برای کش و برای صف‌هایی که کارهای پس‌زمینه‌اش پردازش می‌کنند استفاده می‌کند.
  • پراب‌ها می‌توانند درون کلاستر شما (توصیه می‌شود) و/یا جای دیگری در شبکهٔ شما اجرا شوند. آن‌ها می‌توانند این‌ها را پایش کنند:
    • سرویس‌های داخلی/خصوصی پشت دیوار آتش شما.
    • منابع خارجی/عمومی در اینترنت.
  • نتایج پراب‌ها به برنامه فرستاده می‌شوند، در Valkey به صف می‌روند و کارهای پس‌زمینه آن‌ها را پردازش می‌کنند و در مخزن‌های داده‌تان می‌نویسند. پرابی که جای دیگری در شبکهٔ شماست، از راه ingress و با نشانی Status200 شما به برنامه می‌رسد.
  • تله‌متری (متریک‌ها، ردها، لاگ‌ها و بیشتر) را همان برنامه دریافت می‌کند و در ClickHouse ذخیره می‌شود.
نکته

اگر به‌جای نمونه‌های داخلی از PostgreSQL، Valkey (یا Redis) یا ClickHouse خارجی استفاده کنید، برنامه به‌جای آن‌ها به نقطه‌های پایانی خارجی شما وصل می‌شود. جریان منطقی همان می‌ماند.

اجزا

جزءسرویس Docker Composeچارت Helmچه می‌کند
IngressingressnginxTLS را پایان می‌دهد، نام میزبان و دامنه‌های صفحه‌های وضعیت شما را سرو می‌کند و هر درخواست را به برنامه می‌فرستد.
برنامهappappDashboard، صفحه‌های وضعیت، نقطه‌های پایانی API و دریافت داده، و اگر جدایشان نکنید، کارهای پس‌زمینه.
Workerبخشی از appworker (به‌طور پیش‌فرض خاموش)کارهای پس‌زمینه در پادهای جداگانهٔ خودشان، تا پردازش سنگین صف هرگز با درخواست‌های API رقابت نکند.
Telemetry writerبخشی از apptelemetryWriter (به‌طور پیش‌فرض خاموش)لایه‌ای با اندازهٔ ثابت که هر درج در ClickHouse را انجام می‌دهد، تا درج‌ها هر قدر هم workerها مقیاس بگیرند محدود بمانند.
پرابprobe-1probesبررسی‌های مانیتور را اجرا می‌کند و نتایج را برمی‌گرداند. هر پراب همراه، یک پراب سراسری است که همهٔ پروژه‌ها می‌توانند از آن استفاده کنند.
RunnerrunnerrunnerRunner خودِ نمونه، که می‌تواند اصلاح کد با هوش مصنوعی را برای هر پروژه اجرا کند. گام‌های رانبوک روی Runnerهایی اجرا می‌شوند که خودتان همان جایی نصب می‌کنید که باید اجرا شوند.
Runner سراسریglobal-runnerglobalRunnerیک Runner سراسری: گام‌های JavaScript هر پروژه‌ای را که Runner خودش را انتخاب نکند اجرا می‌کند، هر کدام در سندباکسی که فقط به اینترنت می‌رسد. کلید خودش را دارد و هیچ چیز دیگری از سرور ندارد.
PostgreSQLpostgrespostgresql، یا postgresOperator.cnpgپروژه‌ها، مانیتورها، حادثه‌ها، کاربران و هر تنظیم و وضعیت دیگر.
ClickHouseclickhouseclickhouse، یا clickhouseOperator.altinityلاگ‌ها، متریک‌ها، ردها، استثناها، پروفایل‌ها و لاگ‌های مانیتور.
Valkeyvalkeyvalkeyکش، صف‌های کار و وضعیت کوتاه‌مدت، مانند رسیدهای پوش در انتظار.

همهٔ نقش‌های برنامه یک ایمیج‌اند: Docker Compose آن‌ها را در یک کانتینر app اجرا می‌کند، و چارت Helm می‌تواند worker و telemetry writer را به‌صورت استقرارهای جداگانه اجرا کند. برای تعیین اندازهٔ هر لایه، اندازه‌گذاری و برنامه‌ریزی ظرفیت را ببینید.

اتصال‌های رو به بیرون از شبکهٔ شما

سه اتصال برقرار می‌شوند، مگر اینکه تنظیمی را تغییر دهید:

  • برنامه روزی یک بار از API سرویس GitHub (api.github.com) می‌پرسد که آیا نسخهٔ تازه‌تری منتشر شده است. برای خاموش کردن آن، در چارت Helm مقدار updateCheck.disabled: true را، یا در Docker Compose مقدار DISABLE_UPDATE_CHECK=true را در config.env تنظیم کنید.
  • ثبت‌نام با گزینهٔ «مرا از وصله‌های امنیتی و نسخه‌های جدید مطلع کن» در حالت تیک‌خورده، که در ابتدا همین‌طور است، نام و ایمیل آن شخص، هر شرکت و شماره تلفنی که داده باشد، و نشانی و نسخهٔ نصب شما را به status200.ru می‌فرستد. در شبکه‌ای بدون دسترسی به اینترنت، تیک آن را بردارید.
  • در Kubernetes، پراب‌ها پس از DNS خود کلاستر شما به سرورهای نام عمومی 8.8.8.8 و 1.1.1.1 روی می‌آورند. مقدار dnsConfig.nameservers را [] بگذارید تا همهٔ جست‌وجوها روی DNS خود شما بمانند.

هر چیز دیگری فقط وقتی به بیرون وصل می‌شود که آن را روشن کنید، و هر کدام صفحه‌ای دارد که نشانی‌های دقیقی را که باید مجاز کنید نام می‌برد:

اتصال خروجیبرای چهبیشتر بخوانید
ایمیل (SMTP، یا API سرویس SendGrid)اعلان‌ها و دعوت‌نامه‌هاSMTP
Twilioپیامک و تماس تلفنییکپارچه‌سازی Twilio
رلهٔ پوش Status200، یا Expoاعلان‌های پوش موبایلاعلان‌های پوش
Slack و Microsoft Teamsاعلان‌ها و کنش‌های فضای کارییکپارچه‌سازی Slack
یک ارائه‌دهندهٔ LLM، مانند OpenAI، Anthropic، Microsoft Foundry یا مدلی که خودتان اجرا می‌کنیدStatus200 AIارائه‌دهندگان LLM
status200.ruفعال‌سازی آنلاین مجوز Enterpriseنسخه سازمانی

اتصال‌های جهت مخالف - SendGrid که ایمیل ورودی را تحویل می‌دهد، و Slack و Microsoft Teams که فراخوانی برگشتی انجام می‌دهند - نیاز دارند که ingress از اینترنت در دسترس باشد. اینکه برنامه و پراب‌ها به کدام نشانی‌های خصوصی برسند با شماست: دسترسی به شبکه خصوصی را ببینید.

لوگوی Status200 درون هر ایمیلی که Status200 می‌فرستد جای دارد، پس حتی در شبکه‌ای بدون دسترسی به اینترنت هم نشان داده می‌شود، و باز کردن یک ایمیل چیزی از میزبان دیگری نمی‌خواهد. تصویرهایی که خودتان بارگذاری می‌کنید، مانند لوگوی خودتان یا لوگوی یک صفحه وضعیت، از نشانی Status200 شما نشان داده می‌شوند، پس کسانی که این ایمیل‌ها را می‌خوانند باید بتوانند به آن برسند.

گام‌های بعدی