Uptime Kuma — отличный инструмент для мониторинга доступности сервисов, но в нем нет встроенной поддержки systemd. В этом посте я покажу, как с помощью простого bash-скрипта и Push отслеживать статус systemd сервисов и получать оповещения об измнении их статуса.
Настраиваем Uptime Link to heading
- Переходим в Uptime Kuma и логинимся
- Добавляем Группу (чтоб статистика была общая) Нажимаем +Add New monitor
- Выбираем тип мониторинга Group
Настройки для Group такие: Link to heading
- Friendly Name: Server (Можете выбрать удобное вам)
- Heartbeat Interval: 300
- Retries: 2
- Heartbeat Retry Interval: 30
- Resend Notification if Down X times consecutively: 5
- Нажимаем Save
Добавляем сервис из systemctl Link to heading
- Добавляем сервис. Нажимаем +Add New monitor
- Выбираем Monitoring Type: Push
- Friendly Name: rclone-yandex
- Push URL: Копируем в буфер и записываем, он нам позже пригодится.
- Heartbeat Interval: 300
- Retries: 2
- Heartbeat Retry Interval: 30
- Resend Notification if Down X times consecutively: 5
- Monitoring Group: Выбираем Server, или то что вы указали в Friendly Name на предыдущем шаге.
- Нажимаем Save
Повторяем Link to heading
Повторяем шаг для всех нужных вам сервисов. Можно через кнопку Clone в уже готовом сервисе. Так будет проще. У меня получились: unbound, rclone-yandex, qbittorrent,vaultwarden.
Создаем скрипт для отправки статуса сервисов Link to heading
- Создаем файл:
/etc/sendstatus.sh
nano /etc/sendstatus.sh
- Копируем текст в файл:
#!/bin/bash
# Название сервисов и их Push URL до символа ?
# Например ["qbittorrent"]=http://10.1.0.12:3001/api/push/Qwerty
declare -A SERVICES=(
["qbittorrent"]="http://10.1.0.12:3001/api/push/zCDfxf232fds"
["vaultwarden"]="http://10.1.0.12:3001/api/push/djfhDf23e12"
["unbound"]="http://10.1.0.12:3001/api/push/df234SDd98Kdx"
["rclone-yandex"]="http://10.1.0.12:3001/api/push/Df23cxsd2"
)
# Перебираем сервисы и отправляем статус в Uptime
for SERVICE in "${!SERVICES[@]}"; do
URL="${SERVICES[$SERVICE]}"
if systemctl is-active --quiet "$SERVICE"; then
# Сервис работает — отправляем UP
curl -fsS -X GET "$URL?status=up&msg=$SERVICE%20is%20active" > /dev/null
else
# Сервис упал — отправляем DOWN
curl -fsS -X GET "$URL?status=down&msg=$SERVICE%20is%20inactive" > /dev/null
fi
done
В скрипте перечисляем сервисы и их
Push URL
в секцииSERVICES
. Т.е у вас должен быть сервис с названием qbittorent, vaultwarden, unbound, rclone-yandex и т.д. Через = указываем Push URL до?status=up&msg=OK&ping=
так как актуальный статус мы будем передавать самим скриптом. Чтобы проверить что у вас сервис присутвует можно выполнить комманду:systemctl list-unit-files | grep rclone
. Т.еsystemctl list-unit-files | grep <название сервиса>
Сохраняем файл
/etc/sendstatus.sh
Проверяем работу скрипта:
bash /etc/sendstatus.sh
- Сервисы в Uptime должны сменить статус на UP
- Делаем файл скрипта исполняемым:
chmod +x /etc/sendstatus.sh
- Добавляем в crontab
crontab -e
- Добавляем строку для отправки статуса сервисов каждые 4 минуты
*/4 * * * * /etc/sendstatus.sh
- Сохраняем и выходим из редактора