Перейти к содержимому
Архитектура

Архитектура

Открыть в Markdown

Самостоятельно размещённая установка Status200 — это несколько контейнеров: один ingress, через который входит каждый запрос, один образ приложения, который делает всю работу, пробы, выполняющие проверки ваших мониторов, и три хранилища данных. Эта страница показывает, как они связаны, что делает каждый компонент и какие соединения пересекают границу вашей сети.

flowchart TB People["Люди и<br/>браузеры"] Senders["Отправители<br/>телеметрии:<br/>OpenTelemetry,<br/>Fluent Bit,<br/>syslog, агенты"] Targets["То, что вы<br/>мониторите:<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/>трассировки")] Valkey[("Valkey<br/>кэш и<br/>очереди")] end end People -->|"HTTPS"| Ingress Senders -->|"OTLP, HTTPS"| Ingress Ingress --> App Runner -->|"забирать<br/>задачи,<br/>отправлять<br/>результаты"| App Probe -->|"получать<br/>задания,<br/>отправлять<br/>результаты"| App Probe -->|"HTTP, TCP, ping,<br/>DNS, SNMP"| Targets App --> Postgres App --> ClickHouse App --> Valkey Targets ~~~ Probe

Самостоятельно размещённая установка Status200

Что здесь показано

  • Люди попадают в Status200 через ingress, который завершает TLS и направляет каждый запрос в приложение: Dashboard, страницы статуса, API и все эндпоинты приёма, на которые отправляется телеметрия.
  • Приложение читает и записывает своё состояние в PostgreSQL, хранит телеметрию в ClickHouse и использует Valkey (форк Redis 7.2 под лицензией BSD) как кэш и для очередей, которые обрабатывают его фоновые задачи.
  • Пробы могут работать внутри вашего кластера (рекомендуется) и/или в другом месте вашей сети. Они могут мониторить:
    • Внутренние/частные сервисы за вашим межсетевым экраном.
    • Внешние/публичные ресурсы в интернете.
  • Результаты проб отправляются в приложение, ставятся в очередь в Valkey и обрабатываются фоновыми задачами в ваши хранилища данных. Проба в другом месте вашей сети обращается к приложению через ingress, по вашему URL Status200.
  • Телеметрию (метрики, трассировки, логи и другое) принимает то же приложение, а хранится она в ClickHouse.
Примечание

Если вместо встроенных вы используете внешние PostgreSQL, Valkey (или Redis) либо ClickHouse, приложение подключается к вашим внешним эндпоинтам. Логическая схема остаётся прежней.

Компоненты

КомпонентСервис Docker ComposeЧарт HelmЧто делает
IngressingressnginxЗавершает TLS, обслуживает ваше имя хоста и домены страниц статуса и направляет каждый запрос в приложение.
ПриложениеappappDashboard, страницы статуса, эндпоинты API и приёма данных и, если вы их не вынесли отдельно, фоновые задачи.
WorkerЧасть appworker (по умолчанию выключен)Фоновые задачи в собственных подах, чтобы тяжёлая обработка очередей никогда не конкурировала с запросами к API.
Telemetry writerЧасть apptelemetryWriter (по умолчанию выключен)Слой фиксированного размера, который выполняет каждую вставку в ClickHouse, чтобы число вставок оставалось ограниченным, как бы ни масштабировались воркеры.
Пробаprobe-1probesВыполняет проверки мониторов и отправляет результаты обратно. Каждая встроенная проба — глобальная проба, которой могут пользоваться все проекты.
RunnerrunnerrunnerСобственный Runner экземпляра, который может выполнять исправления кода с помощью ИИ для любого проекта. Шаги runbook-ов выполняются на Runner'ах, которые вы устанавливаете там, где они должны работать.
Глобальный Runnerglobal-runnerglobalRunnerГлобальный Runner: выполняет шаги JavaScript всех проектов, которые не выбирают собственный Runner, каждый в песочнице с доступом только в интернет. У него собственный ключ и больше ничего от сервера.
PostgreSQLpostgrespostgresql или postgresOperator.cnpgПроекты, мониторы, инциденты, пользователи и все прочие настройки и состояния.
ClickHouseclickhouseclickhouse или clickhouseOperator.altinityЛоги, метрики, трассировки, исключения, профили и логи мониторов.
ValkeyvalkeyvalkeyКэш, очереди задач и краткоживущее состояние, например ожидающие квитанции push.

Все роли приложения — один и тот же образ: Docker Compose запускает их в одном контейнере app, а чарт Helm может запускать worker и telemetry writer как отдельные развёртывания. О том, как подобрать размер каждого слоя, см. Подбор размеров и планирование мощностей.

Соединения за пределы вашей сети

Три соединения устанавливаются, пока вы не измените настройку:

  • Раз в день приложение спрашивает API GitHub (api.github.com), не вышел ли более новый выпуск. Чтобы отключить это, задайте updateCheck.disabled: true в чарте Helm или DISABLE_UPDATE_CHECK=true в config.env в Docker Compose.
  • Регистрация с отмеченным пунктом «Уведомлять меня о патчах безопасности и новых выпусках» (так он отмечен изначально) отправляет на status200.ru имя и адрес электронной почты человека, указанные им компанию и номер телефона, а также адрес и версию вашей установки. В сети без доступа к интернету снимите эту отметку.
  • В Kubernetes пробы после собственного DNS вашего кластера обращаются к публичным резолверам 8.8.8.8 и 1.1.1.1. Задайте dnsConfig.nameservers равным [], чтобы все запросы оставались в вашем собственном DNS.

Всё остальное выходит наружу, только когда вы это включите, и для каждого есть страница с точными адресами, которые нужно разрешить:

Исходящее соединениеДля чегоПодробнее
Почта (SMTP или API SendGrid)Уведомления и приглашенияSMTP
TwilioSMS и телефонные звонкиИнтеграция с Twilio
Push-ретранслятор Status200 или ExpoМобильные push-уведомленияPush-уведомления
Slack и Microsoft TeamsУведомления и действия в рабочем пространствеИнтеграция со Slack
Поставщик LLM, например OpenAI, Anthropic, Microsoft Foundry или модель, которую вы запускаете самиStatus200 AIПоставщики LLM
status200.ruОнлайн-активация лицензии EnterpriseРедакция Enterprise

Соединениям в обратную сторону — SendGrid доставляет входящую почту, Slack и Microsoft Teams делают обратные вызовы — нужно, чтобы ingress был доступен из интернета. Какие частные адреса могут достигать приложение и пробы, решаете вы: см. Доступ к частной сети.

Логотип Status200 передаётся внутри каждого письма, которое отправляет Status200, поэтому он виден даже в сети без доступа к интернету, а при открытии письма у других хостов ничего не запрашивается. Изображения, которые вы загружаете сами, например ваш собственный логотип или логотип страницы статуса, показываются с вашего URL Status200, поэтому читатели этих писем должны иметь к нему доступ.

Дальнейшие шаги