DIY мультирегиональный мониторинг времени безотказной работы с Fly.io и Uptime Kuma

Недавно произошли две вещи, которые привели к написанию этого поста:

  • У Heroku возникла проблема с DNS (инцидент #2453, и многие сайты упали.
  • Heroku объявила о своей следующей главе (спойлер: больше никаких бесплатных cookies дино).

Меня затронуло и то, и другое (ну, второе еще не вступило в силу). И я счел это стечение обстоятельств отличной возможностью попробовать что-то новое.

Представляем Uptime Kuma

Первое событие заставило меня задуматься о создании мониторинга времени работы (с поддержкой проверки DNS), и в моей голове всплыл OSS-проект — Uptime Kuma.

Uptime Kuma называет себя «причудливым инструментом мониторинга». И я абсолютно согласен с этим. У него отличный набор функций и удобный пользовательский интерфейс. Вот моя приборная панель:

Полный список функций можно найти в репозитории; меня интересовали только базовые проверки HTTP и DNS. Что касается уведомлений, существуют десятки интеграций. Я выбрал Slack для простоты и планирую позже добавить интеграцию Telegram для личных проектов.

Что насчет развертывания? Существует официальный образ Docker (louislam/uptime-kuma), поэтому все, что вам нужно, — это платформа, способная создавать контейнеры Docker и заботиться о них. Heroku мог бы стать кандидатом, но я предпочитаю не платить за домашние/исследовательские проекты. Поэтому я обратился к альтернативам.

Развертывание Uptime Kuma на Fly

Fly.io — это современная платформа развертывания, ориентированная на мультирегиональную доступность («близко к вашим пользователям», говорится на их главной странице). Под словом «современная» я подразумеваю предоставление отличного опыта для разработчиков: CLI-первый, разумные настройки по умолчанию и конфигурация, а также щедрый бесплатный уровень.

Вы можете развернуть образ Docker на Fly с помощью одной команды:

flyctl launch --image louislam/uptime-kuma:1
Войти в полноэкранный режим Выйти из полноэкранного режима

Для некоторых приложений этого может быть достаточно, но для Uptime Kuma нам нужно постоянное хранилище, чтобы сохранить конфигурацию и настройки приложения (например, имя пользователя и пароль администратора). Для этого мы можем использовать тома.

Давайте сначала создадим приложение для генерации файла по умолчанию fly.toml:

fly create
# answer the questions, don't install PostgreSQL 🙂 
Вход в полноэкранный режим Выйти из полноэкранного режима

В полученном файле fly.toml обновите служебный порт (по умолчанию Uptime Kuma использует 3001):

[[services]]
  http_checks = []
  internal_port = 3001
Войти в полноэкранный режим Выйти из полноэкранного режима

И добавьте секцию монтирования:

[mounts]
  source="kuma_data" # choose whatever name you want
  destination="/app/data"
Войти в полноэкранный режим Выйдите из полноэкранного режима

Теперь нам нужно создать том вручную:

fly volumes create kuma_data --region lhr --size 1
Войти в полноэкранный режим Выйдите из полноэкранного режима

Мы используем минимально возможный размер (1 ГБ), что слишком много для Uptime Kuma, но fly не позволяет передавать плавающие значения 🤷♂️

Теперь мы готовы развернуть наше приложение!

fly deploy
Вход в полноэкранный режим Выход из полноэкранного режима

После развертывания приложения вы можете открыть его и настроить мониторы:

fly open
Войти в полноэкранный режим Выйти из полноэкранного режима

Выход на мультирегиональный уровень

Я решил пойти дальше и превратить мой DIY-мониторинг в высокодоступное решение, создав второй экземпляр приложения в другом регионе.

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

Если мы хотим развернуть больше экземпляров, мы должны создать новые тома. Давайте создадим один из них в Чикаго:

fly volumes create kuma_data --region lhr --size 0.1
Войти в полноэкранный режим Выход из полноэкранного режима

Мы можем проверить состояние наших томов, выполнив следующую команду:

$ fly volumes list

ID        STATE    NAME      SIZE  REGION  ATTACHED VM
vol_xxxx  created  kuma_data 1GB   lhr     abc123    
vol_yyyy  created  kuma_data 1GB   yyz     
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь нам нужно добавить новый регион в наше приложение. Сначала я попытался следовать документации и добавить новый регион в пул, но потерпел неудачу:

$ fly regions add yyz

Error App 'uptime_kuma' uses volumes to control regions. Add or remove volumes to change region placement.
Войти в полноэкранный режим Выход из полноэкранного режима

Само сообщение об ошибке не очень помогло (я создал том, что не так?), но оно привело меня к обсуждению в сообществе, где объясняется, что вам не нужно добавлять регионы вручную при использовании томов. Все, что вам нужно, это изменить масштаб приложения, и Fly выберет подходящий регион на основе свободного объема:

fly scale count 2
Войти в полноэкранный режим Выйти из полноэкранного режима

Потрясающе! Теперь у нас есть два приложения. Но они независимы; как мы можем синхронизировать конфигурацию?

Чтобы справиться с синхронизацией конфигурации, я решил использовать встроенные функции резервного копирования Uptime Kuma: экспорт в одном регионе и импорт в другой.

Оказалось, что нет способа получить доступ к приложению, развернутому в конкретном регионе, Fly сам заботится о маршрутизации на основе геолокации, и у вас нет никакого контроля над этим. Решение? VPN!

Итак, вот пошаговая инструкция о том, как «синхронизировать» экземпляры Uptime Kuma:

  • Откройте приложение, ближайшее к вашему текущему местоположению: fly open.
  • Скачайте резервную копию конфигурации.
  • Подключитесь к VPN-серверу, расположенному ближе ко второму местоположению, и снова запустите fly open.
  • Во время первого запуска свежий экземпляр Uptime Kuma предложит вам снова ввести данные для входа в систему администратора — используйте те же, что и для первого приложения.
  • Перейдите в раздел «Резервные копии», выберите опцию «Перезаписать» и загрузите дамп первого приложения. Вот и все!

Мне понадобилось около ~30 минут, чтобы запустить мультирегиональную систему мониторинга на Fly.io, и я надеюсь, что она будет работать годами, пока Fly не запустит свою следующую главу, вынуждая меня искать альтернативу 🙂 .

Оцените статью
devanswers.ru
Добавить комментарий