Как развернуть свой собственный статус-сервис с 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/datadocker-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).
- 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 и кастомные стили.