Уведомления об ошибках в telegram
Posted: Wed Jan 10, 2018 3:00 pm
Если требуется вывод ошибок или сообщений о событиях vestacp в мессенджер, почти любой, предлагаю решение на основе ntfy.
1. Ставим утилиту ntfy, написан на питоне, ставится на любую ОС, где есть питон:
2. Настраиваем backends для ntfy умолчанию, я использовал telegram. Файл ~/config/ntfy/ntfy.yml
3. Создаем бота в телеграмме, через BotFather.
4. Ставим плагин для ntfy, см. документацию на сайте:
5. Конфигурируем плагин, для telegram достаточно отправить любое сообщение:
Заполняем поля, нужно указать ключ API для ранее созданого бота и пароль ответ. Готово. Проверьте, что сообщения доходят до бота.
6. Теперь магия, мне нужны были только уведомления об ошибках, поэтому изменил только одну строку, файл /usr/local/vesta/func/main.sh, строка # Log event function.
Меняем на:
Готово. Ошибки будут падать в вашего бота и вовремя уведомлять о проблемах. Решение на продакшен не тянет, но для своих нужд мне хватает. По аналогии ntfy send можно добавить уведомления для любого функционала vestacp или в свои скрипты. ntfy поддерживает почти все самые популярные каналы уведомлений slack, pushbullet, xmpp и прочее. Например уведомление об успехе бэкапов я делаю так, файл /usr/local/vesta/bin/v-backup-user, на строках в самом низу:
В телеграме:
Не знал куда закинуть решение, в какую тему. Переводить лениво. Оставил тут.
1. Ставим утилиту ntfy, написан на питоне, ставится на любую ОС, где есть питон:
Code: Select all
pip install ntfy
Code: Select all
backends:
- telegram
4. Ставим плагин для ntfy, см. документацию на сайте:
Code: Select all
pip install ntfy[telegram]
Code: Select all
ntfy -b telegram send "Telegram configured for ntfy"
6. Теперь магия, мне нужны были только уведомления об ошибках, поэтому изменил только одну строку, файл /usr/local/vesta/func/main.sh, строка # Log event function.
Code: Select all
# Log event function
log_event() {
if [ -z "$time" ]; then
LOG_TIME="$(date +'%F %T') $(basename $0)"
else
LOG_TIME="$date $time $(basename $0)"
fi
if [ "$1" -eq 0 ]; then
echo "$LOG_TIME $2" >> $VESTA/log/system.log
else
echo "$LOG_TIME $2 [Error $1]" >> $VESTA/log/error.log
fi
}
Code: Select all
# Log event function
log_event() {
if [ -z "$time" ]; then
LOG_TIME="$(date +'%F %T') $(basename $0)"
else
LOG_TIME="$date $time $(basename $0)"
fi
if [ "$1" -eq 0 ]; then
echo "$LOG_TIME $2" >> $VESTA/log/system.log
else
echo "$LOG_TIME $2 [Error $1]" >> $VESTA/log/error.log
ntfy send "$LOG_TIME $2 [Error $1]"
fi
}
Code: Select all
# Send notification
if [ -e "$BACKUP/$user.log" ]; then
cd $BACKUP
subj="$user → backup has been completed"
email=$(get_user_value '$CONTACT')
cat $BACKUP/$user.log |$SENDMAIL -s "$subj" $email $notify
# NTFY about creation backup for user
tlg=$(tail -n 5 $BACKUP/$user.log)
ntfy send "$subj"$'\n\n'"$tlg"
rm $BACKUP/$user.log
fi
Не знал куда закинуть решение, в какую тему. Переводить лениво. Оставил тут.