Серверні сповіщення прямо в Telegram: налаштовуємо моніторинг бекапів і дисків за 5 хвилин
🇬🇧 Read this article in English
Панелі моніторингу на кшталт Grafana чи красивий дашборд Homepage — це чудово. Але у них є один фундаментальний недолік: вони пасивні. Ніхто не сидить перед екраном моніторингу о 3-й годині ночі, щоб перевірити, чи успішно пройшов бекап баз даних і чи не переповнився випадково SSD-накопичувач.
Справжній спокій системного адміністратора та власника Homelab починається тоді, коли сервери самі надсилають миттєві активні сповіщення на смартфон.
Сьогодні ми розберемо найпростіший, найнадійніший та найпопулярніший спосіб організації пуш-сповіщень: створення власного Telegram-бота без єдиного рядка складного коду за допомогою простої утиліти curl. Також ми інтегруємо його в нічні бекапи та налаштуємо автоматичний моніторинг вільного місця на дисках.
Крок 1. Створюємо Telegram-бота за 2 хвилини
Для надсилання повідомлень нам потрібні два значення: Token бота та ваш особистий Chat ID.
1. Отримання токена бота
- Відкрийте Telegram і знайдіть офіційного бота @BotFather.
- Надішліть команду
/newbot. - Вкажіть ім’я бота (наприклад,
My Homelab Alert) та його юзернейм (має закінчуватися наbot, наприкладsedunlab_alert_bot). - BotFather поверне унікальний API Token вигляду
123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ. Збережіть його!
2. Отримання вашого Chat ID
- Знайдіть у Telegram свого щойно створеного бота і натисніть Start (надішліть йому будь-яке повідомлення, наприклад «Привіт»).
- Тепер перейдіть у пошуку до бота @userinfobot і натисніть Start.
- Бот покаже ваш числовий Id (наприклад,
987654321).
Крок 2. Тестовий запит через термінал
Перевіримо працездатність однією командою curl прямо з термінала вашого сервера або комп’ютера:
1
2
3
4
5
6
7
8
BOT_TOKEN="ВАШ_ТОКЕН_БОТА"
CHAT_ID="ВАШ_CHAT_ID"
MESSAGE="🚀 Тестове сповіщення з мого домашнього сервера!"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID" \
-d "text=$MESSAGE" \
-d "parse_mode=HTML"
Через частку секунди на ваш смартфон надійде сповіщення!
Крок 3. Створюємо універсальний скрипт сповіщень
Щоб не прописувати токени у кожному скрипті бекапу чи кроні, зробимо єдину системну утиліту /usr/local/bin/tg-notify:
1
sudo nano /usr/local/bin/tg-notify
Вставте такий код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
# Скрипт надсилання сповіщень у Telegram
BOT_TOKEN="ВАШ_ТОКЕН_БОТА"
CHAT_ID="ВАШ_CHAT_ID"
MESSAGE="$1"
if [ -z "$MESSAGE" ]; then
echo "Використання: tg-notify 'Текст повідомлення'"
exit 1
fi
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}" \
-d "text=${MESSAGE}" \
-d "parse_mode=HTML" > /dev/null
Зробимо скрипт виконуваним для всієї системи:
1
sudo chmod +x /usr/local/bin/tg-notify
Тепер із будь-якої точки системи ви можете надіслати повідомлення однією простою командою:
1
tg-notify "⚠️ <b>Увага!</b> Сервіс перезавантажено."
Практичний приклад 1: Сповіщення про успіх або помилку бекапу
Пам’ятаєте наш скрипт бекапу для Vaultwarden чи Restic? Додамо до нього розумне інформування з кодами завершення:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
BACKUP_DIR="/opt/vaultwarden/backups"
DATA_DIR="/opt/vaultwarden/data"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# Створюємо резервну копію SQLite
if sqlite3 "$DATA_DIR/db.sqlite3" ".backup '$BACKUP_DIR/db_$TIMESTAMP.sqlite3'"; then
SIZE=$(du -sh "$BACKUP_DIR/db_$TIMESTAMP.sqlite3" | cut -f1)
tg-notify "✅ <b>Vaultwarden Backup:</b> Успішно створено копію розміром <code>$SIZE</code> ($TIMESTAMP)."
else
tg-notify "❌ <b>Vaultwarden Backup:</b> ПОМИЛКА створення бекапу! Перевірте сервер негайно."
exit 1
fi
Тепер щоранку ви бачитимете приємне повідомлення із зеленим прапорцем і точним розміром бекапу, а в разі непередбачуваної помилки миттєво дізнаєтесь про інцидент.
Практичний приклад 2: Автоматичний контроль вільного місця на диску
Дуже часта причина падіння баз даних чи зависання Docker — це забитий на 100% системний диск через надлишок логів.
Створимо простий сторожовий скрипт /opt/scripts/check-disk.sh:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
# Перевірка вільного місця на кореневому диску
THRESHOLD=85
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
HOSTNAME=$(hostname)
tg-notify "🚨 <b>Критично мало місця!</b>%0AСервер: <code>$HOSTNAME</code>%0AДиск заповнено на: <b>$CURRENT%</b> (Поріг: $THRESHOLD%)"
fi
Зробіть його виконуваним (chmod +x /opt/scripts/check-disk.sh) та додайте у планувальник crontab -e для перевірки кожні 6 годин:
1
0 */6 * * * /bin/bash /opt/scripts/check-disk.sh
Альтернатива для пуристів: Self-Hosted сервіс Ntfy
Якщо ви принципово не хочете залежати від хмари Telegram і віддаєте перевагу локальним Open Source рішенням, чудовою альтернативою є ntfy (написаний на Go):
1
2
3
4
5
6
7
8
9
10
11
# docker-compose.yml для ntfy
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
restart: unless-stopped
ports:
- "8095:80"
volumes:
- ./cache:/var/cache/ntfy
command: serve
Він має безкоштовні клієнти для Android та iOS, підтримує Web Push у браузерах і приймає сповіщення звичайним curl -d "Повідомлення" http://ntfy.home.myhomelab.org/alerts.
Висновок
Налаштування оперативних сповіщень займає не більше п’яти хвилин, проте заощаджує години нервів та захищає від раптової втрати важливих даних. Інтегруйте такі мікроповідомлення у свої нічні задачі, скрипти бекапів та моніторинг ресурсів — і ваша домашня лабораторія працюватиме під вашим повним контролем!
