Главное Авторские колонки Вакансии Вопросы
129 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Статус Страницы - не все так просто

Появление началось с личной потребности в надежной Статус Странице, которая бы поддерживала русский язык и API-интеграцию, без необходимости собственного хостинга. Когда рынок не предложил готовых решений, я решил создать свой сервис.
Мнение автора может не совпадать с мнением редакции

Пару лет назад мне понадобилась Статус Страница (statuspage) для проекта. Требования были стандартными, но важными:

  1. Несколько страниц, компоненты, статусы и подписчики.
  2. Готовый облачный сервис без необходимости самостоятельного хостинга.
  3. Поддержка русского языка.
  4. Интеграция по API.

Я проанализировал рынок и быстро понял, что подходящих решений практически нет. Существующие западные сервисы не поддерживали русский язык, а из-за санкций возникли сложности с оплатой и доступом. Open-source решения не подходили, так как требовали самостоятельного хостинга и имели те же проблемы с локализацией.

Так я приступил к созданию собственного сервиса для развертывания Статус Страниц. Изначально я думал управиться за пару недель, но, как это часто бывает, всё оказалось сложнее.


Компактный шаблон для status.pingera.ru

Меня зовут Сергей Пронин, и в этой статье я расскажу о процессе разработки и о том, как родился сервис Pingera.

Первые сложности

Казалось бы, статус-пейдж — это просто список сервисов и их статусов для отображения пользователю. Но в процессе разработки выделилось три основных компонента:

  1. Backend: база данных и API.
  2. Frontend админки: для настройки компонентов, создания инцидентов и управления.
  3. Frontend публичных страниц: для отображения сервисов и статусов конечным пользователям.

API и авторизация

Наши Статус Страницы должны быть публичными, то есть доступными любому пользователю в интернете. При этом некоторые запросы к API требуют авторизации, а другие — нет. Это сразу добавило сложности: например, если страница не опубликована, мы не возвращаем список сервисов или инцидентов.

Инциденты

Логика инцидентов оказалась на удивление сложной. У каждого инцидента есть несколько ключевых параметров:

  1. Статус: от «открыт» до «закрыт» с промежуточными этапами, такими как «поиск решения».
  2. Критичность: не все инциденты одинаково опасны.
  3. Связанные сервисы (компоненты): их статусы могут меняться в течение жизни инцидента.
  4. Оповещение подписчиков.
  5. Обновление инцидентов.

Всё это должно поддерживать полный цикл CRUD (создание, чтение, обновление, удаление) для пользователей. Проработка и кодирование этой логики для двух фронтендов и бэкенда заняла значительное время. После завершения работы над бэкендом разработка UI пошла намного быстрее.

Подписчики

Подписчики — это пользователи, которые хотят получать уведомления об инцидентах в ваших сервисах. Для предотвращения спама обязательна верификация, например, по электронной почте. Отправка уведомлений реализована асинхронно, чтобы создание инцидента не задерживалось ожиданием ответа от API.

Домены

Все Статус Страницы в Pingera доступны по субдоменам (например, status.pingera.ru). Это достаточно легко настроить через wildcard-сертификат в Nginx.

Однако с опцией Bring Your Own Domain (использование собственного домена, например, status.mycompany.ru) всё оказалось сложнее. Изначально мы писали собственные скрипты для добавления сертификатов и доменов в Nginx, но быстро поняли, что дублируем функциональность Ingress в Kubernetes с cert-manager (для сертификатов Let’s Encrypt). Так мы перешли на развёртывание всего проекта в Kubernetes.

Теперь, когда пользователь настраивает свой домен в админке, мы автоматически создаём Ingress-объект. Это обеспечивает мгновенное получение TLS-сертификата с автоматическим обновлением для всех страниц.

Где мы сейчас

Из относительно простого pet-проекта Pingera вырос в полноценный сервис, позволяющий создавать Статус Страницы с гибкой настройкой внешнего вида (CSS, различные шаблоны), структуры и обширной логикой. Кроме того, мы добавили мониторинг. Сейчас мы умеем мониторить веб-сайты, API, TCP-соединения и SSL-сертификаты. Синтетические проверки находятся на стадии разработки.

Мы не стремимся заменить полноценные системы мониторинга. Наша цель — фокусироваться на внешнем периметре. Серверы, с которых запускаются проверки, расположены как в России, так и по всему миру. Мы помогаем обнаруживать проблемы извне, если по какой-то причине ваш внутренний мониторинг их не видит или недоступен. А Статус Страницы Pingera позволяют вам открыто и честно информировать пользователей о любых проблемах и инцидентах.

У нас есть бесплатный тариф без необходимости привязки банковской карты. Вам не нужно быть инженером, чтобы создать Статус Страницу или настроить мониторинг веб-сайта с Pingera.

+1
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Выбрать файл
Не пропустите публикацию!
Pingera
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.