Встроенная система уведомлений TrueNAS сообщает только факт успешного или неудачного завершения задачи резервного копирования. Вы получаете письмо «Задача завершена», но не знаете, заняло это 5 минут или 5 часов, передался ли гигабайт данных или ничего. Такой подход создает риски: можно пропустить медленную деградацию скорости репликации, указывающую на проблемы с дисками или сетью, или не заметить сбой Cloud Sync из-за исчерпания квоты в облаке, о котором система не сообщает явно. Этот гайд предлагает два решения: быструю настройку базовых Email-оповещений и создание продвинутой системы мониторинга с детализированными алертами в Telegram или Slack через Cron и shell-скрипты. Все инструкции проверены на актуальных версиях TrueNAS CORE и SCALE 2026 года.
Почему встроенных уведомлений TrueNAS недостаточно для мониторинга бэкапов
Интерфейс TrueNAS (GUI) отправляет оповещения только о факте успеха или сбоя задачи репликации или Cloud Sync. В уведомлении отсутствуют ключевые метрики: время начала и окончания операции, точное имя выполненной задачи, объем переданных или измененных данных. Это ограничивает возможность proactive monitoring - упреждающего реагирования на проблемы. Вы не можете быстро оценить эффективность бэкапа или выявить аномалии в его поведении до того, как они приведут к критическому сбою.
Что вы теряете без детального мониторинга
Без детализированных алертов вы рискуете столкнуться со сценариями, которые стандартная система не отследит. Например, репликация может начать выполняться в 10 раз дольше из-за деградации SSD или проблем с сетевой картой. TrueNAS отметит задачу как успешную, но вы пропустите важный сигнал. Другой пример: задача Cloud Sync может тихо завершиться с ошибкой из-за изменения политик доступа в облачном хранилище (например, S3), и в логах TrueNAS это будет, но в вашу почту придет лишь общее «сбой». При работе с десятком задач резервного копирования становится невозможно быстро определить, какая именно завершилась ошибкой, не углубляясь в логи. Принцип наблюдаемости (observability) инфраструктуры требует, чтобы мониторинг давал не просто бинарный статус, а контекст для анализа.
Базовый уровень: настройка Email-уведомлений через SMTP сервер TrueNAS
Этот метод дает быстрый старт и обеспечивает минимально необходимый уровень информирования. Он работает во всех актуальных версиях TrueNAS CORE и SCALE 2024-2026 гг. Настройка выполняется через веб-интерфейс в разделе System Settings -> Email.
Пошаговая инструкция для Gmail и Яндекс.Почты
Для популярных почтовых сервисов используйте следующие проверенные параметры. Для Gmail и Яндекса необходимо создать «Пароль для приложений» в настройках безопасности вашего аккаунта, а не использовать основной пароль.
| Параметр | Значение для Gmail | Значение для Яндекс.Почты |
|---|---|---|
| SMTP-сервер | smtp.gmail.com | smtp.yandex.ru |
| Порт | 587 | 465 |
| Шифрование | STARTTLS | SSL/TLS |
| Имя пользователя | Ваш полный email | Ваш полный email |
| Пароль | Пароль для приложений | Пароль для приложений |
| Адрес отправителя | Ваш email | Ваш email |
После заполнения полей нажмите Save, затем Send Test Mail, чтобы проверить отправку. Далее в разделе System Settings -> Alert Services убедитесь, что для сервиса Email указан правильный адрес получателя.
Тестирование и диагностика проблем с отправкой
Если тестовое письмо не приходит, проверьте соединение из командной строки TrueNAS. Подключитесь по SSH и выполните команду, используя, например, swaks (если установлен) или telnet для проверки порта:
telnet smtp.gmail.com 587
Частые ошибки и их решения:
- «Authentication Failed»: Убедитесь, что используется пароль для приложений, а не основной пароль аккаунта. Проверьте, не заблокирован ли доступ «ненадежным приложениям» в настройках безопасности почтового сервиса (для Gmail эту опцию нужно включить).
- «Connection refused»: Проверьте, не блокирует ли исходящие соединения на порты 587 или 465 межсетевой экран или провайдер. Убедитесь в правильности имени SMTP-сервера.
После успешной настройки добавьте адрес отправителя (ваш TrueNAS) в белый список или список контактов почтового клиента, чтобы письма не попадали в спам.
Продвинутый мониторинг: детальные алерты в Telegram и Slack через Cron и скрипты
Этот метод дает полный контроль над форматом и содержанием уведомлений. Архитектура решения: задача резервного копирования выполняется по расписанию → после ее завершения Cron запускает shell-скрипт → скрипт парсит статус и логи задачи, формирует сообщение с деталями и отправляет его через API мессенджера. Вы получаете информацию о времени выполнения, объеме переданных данных и точном статусе.
Создание Telegram-бота и получение ключа API
Первым шагом создайте бота для отправки сообщений:
- Откройте Telegram и найдите @BotFather.
- Отправьте команду
/newbotи следуйте инструкциям: укажите имя бота и его username (должен заканчиваться на bot, например, my_nas_monitor_bot). - После создания BotFather предоставит API-токен. Сохраните его в безопасном месте.
- Создайте канал или группу в Telegram, куда бот будет отправлять сообщения. Добавьте созданного бота в этот чат как участника.
- Чтобы получить chat_id, отправьте любое сообщение в чат. Затем выполните запрос в браузере, подставив ваш токен:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates. В ответе JSON найдите значениеidвнутри объектаchat.
Токен и chat_id - это конфиденциальные данные. Не храните их в скрипте открытым текстом.
Готовый shell-скрипт для мониторинга задач репликации
Создайте файл, например, /mnt/pool/scripts/check_replication.sh, и скопируйте в него приведенный ниже код. Этот скрипт находит последнюю выполненную задачу репликации, извлекает ее детали и отправляет сводку в Telegram.
#!/bin/bash
# Скрипт для проверки статуса последней задачи репликации и отправки уведомления в Telegram
# Конфигурация (вынесите в отдельный файл или переменные окружения для безопасности)
TELEGRAM_BOT_TOKEN="ВАШ_ТОКЕН_BOT"
TELEGRAM_CHAT_ID="ВАШ_CHAT_ID"
# Функция отправки сообщения в Telegram
send_telegram_message() {
local MESSAGE="$1"
curl -s -X POST \
-H 'Content-Type: application/json' \
-d "{\"chat_id\": \"$TELEGRAM_CHAT_ID\", \"text\": \"$MESSAGE\", \"parse_mode\": \"HTML\"}" \
"https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" > /dev/null
}
# 1. Получаем список задач репликации и находим ID последней выполненной
LAST_TASK_JSON=$(midclt call replication.query | jq '.[] | select(.state=="FINISHED") | select(.job!=null) | {id, job: .job.id, state, snapshot: .snapshot, end_time: .job.time_finished} | select(.end_time!=null)' | jq -s 'sort_by(.end_time) | last')
# Если задачи не найдены, выходим
if [ -z "$LAST_TASK_JSON" ] || [ "$LAST_TASK_JSON" = "null" ]; then
send_telegram_message "⚠️ Мониторинг TrueNAS\nНе найдено завершенных задач репликации."
exit 0
fi
# 2. Парсим данные из JSON
TASK_ID=$(echo "$LAST_TASK_JSON" | jq -r '.id')
JOB_ID=$(echo "$LAST_TASK_JSON" | jq -r '.job')
TASK_STATE=$(echo "$LAST_TASK_JSON" | jq -r '.state')
SNAPSHOT=$(echo "$LAST_TASK_JSON" | jq -r '.snapshot')
END_TIME=$(echo "$LAST_TASK_JSON" | jq -r '.end_time')
# 3. Получаем детали задачи по ее ID для определения имени и объема
TASK_DETAILS=$(midclt call replication.get_instance "$TASK_ID")
TASK_NAME=$(echo "$TASK_DETAILS" | jq -r '.name')
SOURCE_DATASET=$(echo "$TASK_DETAILS" | jq -r '.source_datasets[0]')
# 4. Пытаемся получить размер переданных данных из свойств снапшота (пример)
SNAPSHOT_SIZE="N/A"
if [ "$SNAPSHOT" != "null" ]; then
# Это упрощенный пример. Реальный размер изменений можно получить, сравнивая снапшоты.
SNAPSHOT_SIZE=$(zfs list -t snapshot -o used "$SOURCE_DATASET@$SNAPSHOT" 2>/dev/null | tail -n1)
fi
# 5. Формируем читаемое сообщение
if [ "$TASK_STATE" = "FINISHED" ]; then
STATUS_EMOJI="✅"
STATUS_TEXT="Успешно завершена"
else
STATUS_EMOJI="❌"
STATUS_TEXT="Завершена со сбоем"
fi
MESSAGE="$STATUS_EMOJI Мониторинг репликации TrueNAS
Задача: $TASK_NAME
Источник: $SOURCE_DATASET
Статус: $STATUS_TEXT
Снапшот: $SNAPSHOT
Время окончания: $END_TIME
Размер снапшота: $SNAPSHOT_SIZE"
# 6. Отправляем сообщение
send_telegram_message "$MESSAGE"
exit 0
Перед использованием установите утилиту jq для парсинга JSON, если она отсутствует: pkg install jq (TrueNAS CORE) или apt-get install jq (TrueNAS SCALE). Дайте скрипту права на выполнение: chmod +x /mnt/pool/scripts/check_replication.sh.
Адаптация скрипта для задач Cloud Sync
Логика для Cloud Sync похожа, но используются другие команды midclt. Основное изменение - в части получения списка задач. Замените строку получения LAST_TASK_JSON на вариант для Cloud Sync:
LAST_TASK_JSON=$(midclt call cloudsync.query | jq '.[] | select(.state=="SUCCESS" or .state=="FAILED") | {id, job: .job.id, state, direction, time_finished: .job.time_finished} | select(.time_finished!=null)' | jq -s 'sort_by(.time_finished) | last')
Дополнительно можно получить имя задачи (.description) и направление синхронизации (.direction). Вы можете создать универсальный скрипт или два отдельных для разных типов задач.
Настройка Cron задачи в TrueNAS для автоматического запуска скрипта
Чтобы скрипт запускался автоматически после завершения задач резервного копирования, создайте задание в планировщике:
- В веб-интерфейсе TrueNAS перейдите в Tasks -> Cron Jobs.
- Нажмите Add.
- Заполните поля:
- Description: «Мониторинг репликации».
- Command: Полный путь к вашему скрипту, например,
/mnt/pool/scripts/check_replication.sh. - User:
root. - Schedule: Рассчитайте время. Если ваша репликация запускается ежедневно в 02:00 и длится примерно час, установите время запуска Cron на 03:10. Используйте формат Minute Hour Day Month Weekday (например,
10 3 * * *для ежедневного запуска в 03:10).
- Нажмите Save.
Проверьте работу: сначала запустите скрипт вручную из командной строки, убедитесь, что сообщение приходит. Затем дождитесь срабатывания Cron. Для мониторинга нескольких задач можно создать несколько Cron-заданий с разным временем или один скрипт, который проверяет все задачи по очереди.
Сравнение методов: когда использовать Email, а когда - Telegram/Slack
Выбор метода зависит от ваших задач, инфраструктуры и предпочтений команды.
- Сложность настройки: Email через GUI TrueNAS - минимальная (5 минут). Telegram/Slack скрипты - средняя (требует создания бота, написания и отладки скрипта).
- Информативность: Email - низкая (только статус). Telegram/Slack - высокая (статус, время, объем данных, имя задачи, возможны ссылки на логи).
- Надежность доставки: Email - зависит от почтового сервиса и настроек спама. Telegram/Slack - высокая, сообщения доставляются практически мгновенно в push-канал.
- Интеграция в рабочие процессы: Email - подходит для аудита и лог-архива. Telegram/Slack - идеальны для оперативного реагирования команды в общих чатах, можно настроить форматирование, тегирование ответственных.
- Безопасность: Оба метода требуют безопасного хранения учетных данных (паролей SMTP, токенов ботов). Для критически важных систем рекомендуется использовать внутренний SMTP-сервер или корпоративный мессенджер с контролем доступа.
Рекомендация: Используйте комбинированный подход. Настройте базовые Email-уведомления в TrueNAS как обязательный канал для критических системных алертов (состояние дисков, сети). Для мониторинга конкретных бизнес-процессов, таких как репликация и Cloud Sync, внедрите детализированные алерты в Telegram или Slack. Это обеспечит и надежность, и удобство оперативной работы. Для комплексной автоматизации подобных задач вам может пригодиться наш практический гайд по автоматизации инфраструктуры.
Отладка и лучшие практики надежной системы мониторинга
Следуйте этим правилам, чтобы ваша система мониторинга была устойчивой и полезной.
- Тестируйте вручную. Перед добавлением в Cron всегда запускайте скрипт из командной строки, проверяйте его вывод и факт отправки сообщения.
- Добавьте логирование. Модифицируйте скрипт так, чтобы он записывал свои действия и ошибки в файл. Это критически важно для посмертного анализа, если что-то пойдет не так.
exec >> /var/log/nas_monitor.log 2>&1 echo "$(date): Скрипт мониторинга запущен" - Реализуйте health check. Настройте отдельную Cron-задачу, которая раз в день отправляет в ваш канал тестовое сообщение «Мониторинг TrueNAS активен». Отсутствие этого сообщения два дня подряд - сигнал о проблеме с самим скриптом или сервером.
- Настройте алерты на отсутствие уведомлений. Это продвинутая практика. Можно создать простой скрипт, который проверяет, появлялись ли в логах записи об успешной отправке уведомлений за последние N часов. Если нет - отправляет критическое оповещение по другому, более приоритетному каналу.
- Безопасно храните конфиденциальные данные. Не оставляйте токены и пароли в теле скрипта. Используйте переменные окружения (настройте в System Settings -> Advanced -> Environment Variables в TrueNAS SCALE) или вынесите настройки в отдельный конфигурационный файл с ограниченными правами доступа (chmod 600).
- Планируйте актуализацию. При обновлении TrueNAS проверяйте, не изменились ли API (
midclt call) или структура данных задач. Периодически пересматривайте логи и формат сообщений на предмет полезности.
Настройка детального мониторинга - это вклад в отказоустойчивость вашей инфраструктуры хранения. Комбинируя встроенные оповещения TrueNAS с кастомными скриптами, вы получаете полную наблюдаемость над процессами резервного копирования. Это позволяет не просто реагировать на сбои, а proactively управлять здоровьем системы. Для более глубокой интеграции мониторинга и автоматизации администрирования TrueNAS извне изучите возможности REST API TrueNAS SCALE. Если же вы только планируете стратегию резервного копирования, основы настройки репликации подробно разобраны в отдельном руководстве.