January 11

Как развернуть свой собственный статус-сервис с Uptime Kuma

В этой статье я покажу, как развернуть свой собственный сервис для мониторинга сайтов и приложений с помощью Uptime Kuma. Мы установим сервис через Docker, настроим проверки для сайтов и API, подключим уведомления и сделаем публичную статус-страницу, чтобы ваши пользователи или команда всегда знали, что работает, а что нет.

Сайт проекта: https://github.com/louislam/uptime-kuma


Что такое Uptime Kuma

Uptime Kuma - это инструмент для мониторинга ваших сайтов и сервисов. Он показывает, работают ли ваши приложения и API и сразу уведомляет, если что-то упало.

С его помощью можно проверять доступность сайтов по HTTP(S), следить за TCP-соединениями и портами, WebSocket или просто пинговать сервер. Также он фиксирует скорость отклика чтобы понимать насколько быстро работают сервисы.

Главное преимущество это удобный веб-интерфейс. Он сохраняет историю проверок, показывает процент uptime и позволяет делать как публичные, так и приватные статус-страницы. Также можно настроить уведомления через Telegram, Discord, Slack, Email и другие каналы.


Запуск через Docker

Разворачивать Uptime Kuma мы будем через Docker - это самый простой способ.

Сначала создаём отдельную папку для проекта:

mkdir status
cd status

Дальше создаём файл docker-compose.yml:

version: '3.8'

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data

Запускаем контейнер командой:

docker-compose up -d

Теперь веб-интерфейс доступен по адресу http://localhost:3001. Файл ./data хранит всю историю проверок и настройки, поэтому можно безопасно перезапускать контейнер.


Регистрация админского аккаунта

После того как вы запустили Uptime Kuma через Docker, первым делом нужно создать администратора.

На стартовой странице вводим логин и пароль. После подтверждения регистрации вы попадёте в основной интерфейс.

Создание монитора

После того как вы зарегистрировались, вас автоматически перекидывает на панель управления. Здесь отображаются все ваши мониторы, статус сервисов и т.п

Наc интересует кнопка Add New Monitor, которая позволяет создать новый монитор. Монитор - это настройка проверки конкретного сервиса: сайт, API, сервер или база данных. После создания монитор будет регулярно проверять доступность сервиса и уведомлять вас при сбоях.

Выбор типа монитора

Когда вы нажимаете Add New Monitor, первым делом нужно выбрать Monitor Type. Uptime Kuma предлагает несколько категорий:

  • HTTP(s) - проверка веб-сайтов и API через HTTP или HTTPS.
  • TCP Port - проверка доступности конкретного порта на сервере.
  • Ping - классический пинг сервера (ICMP).
  • HTTP(s) - Keyword - проверка наличия определённого текста на странице.
  • HTTP(s) - Json Query - проверка значений в JSON ответе.
  • gRPC(s) - Keyword - проверка gRPC сервисов.
  • DNS - проверка DNS записей.
  • Docker Container - проверка состояния контейнера Docker.

Есть также Specific Monitor Type, например базы данных (MySQL, PostgreSQL, MongoDB), игровые серверы (Steam, GameDig) и очереди сообщений (MQTT, Kafka).

Настройка HTTP(s) монитора

Давайте рассмотрим создание простого HTTP(s) монитора для веб-сайта.

Общие поля:

  • Friendly Name - имя мониторинга, например Website. Оно будет отображаться в панели и статус-страницах.
  • URL - адрес сайта, который проверяем, например https://teacoder.ru.
  • Heartbeat Interval - как часто проверять сервис. По умолчанию 60 секунд.
  • Retries - количество попыток до того, как сервис считается упавшим. Например, 0 отключает повторные попытки.
  • Heartbeat Retry Interval - интервал между повторными попытками, если первая проверка не прошла.
  • Request Timeout - время ожидания ответа от сервиса, по умолчанию 48 секунд.
  • Resend Notification if Down X times consecutively - повторная отправка уведомления, если сервис падает несколько раз подряд.

Расширенные настройки:

  • Certificate Expiry Notification - уведомление о скором окончании срока действия TLS/SSL сертификата.
  • Ignore TLS/SSL error for HTTPS websites - игнорировать ошибки сертификатов, если нужно проверять сайт с самоподписанным сертификатом.
  • Upside Down Mode - инвертирует статус: если сервис доступен, он будет отображаться как DOWN.
  • Max. Redirects - максимальное количество редиректов для HTTP-запроса, по умолчанию 10.
  • Accepted Status Codes - какие HTTP-коды считаются успешными (например, 200-299).

HTTP Options:

  • Method - GET, POST, PUT и т.д.
  • Body Encoding - JSON или XML.
  • Body - тело запроса для POST-запросов.
  • Headers - дополнительные HTTP-заголовки, например для авторизации.
  • Authentication - метод авторизации, если сайт защищён (Basic Auth, OAuth, NTLM, mTLS).

После заполнения этих полей нажимаем Save, и монитор сразу начинает проверять выбранный сервис. В панели управления монитором вы увидите график доступности и статус сервиса.

Настройка уведомлений

После того как мы создали первый монитор и он начал отслеживать сервис, важно настроить уведомления, чтобы узнавать о сбоях вовремя. В Uptime Kuma можно настроить уведомления через множество каналов: Telegram, Discord, Slack, Email, Webhook и другие. Я буду показывать на примере Telegram.

Создаём Telegram-бота

  • Откройте Telegram и найдите BotFather.
  • Нажмите /start, затем /newbot, чтобы создать нового бота.
  • Укажите имя бота и username.
  • После создания BotFather даст вам API ключ - сохраните его, он понадобится для настройки в Uptime Kuma.

Настройка уведомлений в Uptime Kuma

Далее откройте панель управления и перейдите в Settings → Notification. В этом разделе отображаются все существующие уведомления. Нажмите Setup Notification, чтобы добавить уведомление, и в поле Notification Type выберите Telegram.

Заполняем поля

Далее заполняем поля для уведомления. В поле Friendly Name можно указать любое имя, например Telegram Alerts. В поле Bot Token вставляем токен, который выдал BotFather. В Chat ID указываем идентификатор чата, куда бот будет отправлять уведомления - если это личный чат с ботом, используйте свой ID, если группа - ID группы. Чтобы узнать свой Chat ID, можно написать боту @userinfobot.

Внизу формы отметьте Default enabled и Apply on all existing monitors, чтобы уведомление сразу стало активным для всех мониторов. После сохранения уведомление будет работать автоматически, и бот сможет присылать сообщения о падениях и восстановлении сервисов.

Создание публичной статус-страницы

Теперь можно сделать публичную статус-страницу, чтобы пользователи видели, какие сервисы работают, а какие нет. Для этого в верхнем меню панели управления перейдите в Status Pages и нажмите New Status Page

В поле Name укажите любое имя страницы, например Services, а в Slug уникальный идентификатор для URL, например services. После сохранения страница будет доступна по адресу http://localhost:3001/status/services

На этом этапе страница уже создана, но она ещё не содержит мониторов. Чтобы добавить монитор на страницу, нажмите Add a monitor и выберите какие мониторы вы хотите добавить, я выбираю Website. Далее автоматически создастся группа с названием Services, в которую попадёт новый монитор. Вы также можете создавать свои группы и распределять мониторы по ним.

Заключение

Ну что же, я рассказал вам про основные моменты работы с Uptime Kuma: запуск через Docker, создание мониторов, уведомления и публичные статус-страницы.

Помимо этого, в панели есть разделы Reverse Proxy, Tags, Monitor History, Docker Hosts, Security, API Keys, Proxies и Backup, которые позволяют гибко управлять безопасностью и интеграциями. А для статус-страниц есть мелочи по типу: Footer Text, тема страницы, теги, Google Analytics и кастомные стили.

Спасибо, что прочитали статью, надеюсь она вам помогла!