...

Настройка автоматического дампа через cron

Тема в разделе "ELMA365 On-Premises", создана пользователем sobolev, 2 май 2023.

  1. sobolev

    sobolev Техническая поддержка

    Введение
    Для полноценного бэкапа всех данных системы ELMA365 предусмотрен механизм создания дампа. Остановимся подробнее на последней рекомендуемой поставке в docker системы ELMA365. Дамп всех ключевых баз данных (Postgres, Mongo и S3) осуществляется командой указанием скрипта установки и применение опции --dump: sudo ./elma365-installer-docker.sh --dump

    Автоматизация

    Добиться автоматизации выполнения постоянных систематических дампов позволяет простой инструмент систем Linux - планировщик cron (пример описания cron). Cron позволяет достаточно гибко настроить выполнение команды дампа ELMA365 согласно необходимых политик для организации. Необходимо обратить внимание, на то что во время исполнения команды dump для ELMA365 сервисы системы временно выключаются и веб-часть системы недоступна. Если политики компании позволяют допускать периоды недоступности ELMA365 для пользователей, например ежедневно в 00:00, то cron может стать хорошим инструментом.

    Проблематика
    Создание дампов является достаточно простой операцией и требуют от администратора ELMA365 контроль нескольких важных параметров:
    1) Доступное свободное место на машине или заранее определение размещения выполненных данных дампа через конфигурацию config-elma365.txt
    2) Контроль запуска сервисов после выполнения дампа (во время дампа все сервисы, кроме сервисов СУБД, останавливаются) и после выполнения дампа обратно размещаются на узле.
    3) Администратор ELMA365 должен получать своевременную краткую информацию о состоянии ELMA365 после дампа, не допуская периодов простоя системы с начала рабочего дня пользователей. Достаточно хорошим способом является уведомления в популярных месседжерах вроде Telegram
    4) Для выяснения причин невозможности дампа необходимо хранить подробную информацию о диагностике и логах сервиса выполняющего дамп.

    Концепция
    Для решения указанных проблем, предлагаю тестовую версию скрипта bash для запуска автоматического дампа и передачей информации о результате администратору ELMA365, запускаемого в планировщике cron.

    Описание сценария
    Сценарий состоит из нескольких частей:
    1) Блок описания конфигурации (необходимо настроить под Вашу конфигурацию) - здесь администратору требуется указать основные настройки сценария: название машины, путь до каталога бэкапов, путь для каталога сохранения подробной информации, задержка проверки состояния системы ELMA365 после дампа (запуск сервисов после остановки дампов может потребовать разное время, данный параметр стоит настраивать исходя из быстродействия кластера - на машине с высокой производительность это может быть 200-300 секунд, на более медленных до 600), включение загрузки отчетов о состоянии ELMA365 на сайт nc.elma365.tech, включение сбора логов сервиса выполняющего дамп elma365db, шаблон названия локального файла с логами на серверной машине.
    2) Блок настройки отправки сообщения к Telegram (необходимо настроить под Вашу конфигурацию либо отключить): активация данной функции, указание токена телеграмм бота, указание id чата для бота для отправки в него краткого отчета.
    3) Блок описания функций (не требуется настраивать, но можно изменить логику скрипта под свои нужды)

    Требования
    1. (Обязательно) Поставка ELMA365 в docker
    2. (Опционально) Установленный curl для Linux (для возможности отправки сообщений в Telegram) и доступ до ресурса https://api.telegram.org/
    3. (Опционально) Настроенный бот Telegram (пример создания и настройки) и подключенный к созданному Вами чату (пример подключения бота к чату)
    4. (Опционально) Токен бота Telegram полученный при его создании и id чата. ID чата можно получить curl запросом к боту "curl https://api.telegram.org/bot<Токен Вашего бота Telegram>/getUpdates || jq '.result' | grep '"chat"' -A 2"

    Логика bash скрипта
    1) function Creating_log - создание файла подробного лога в каталоге и запись первых строк отчета.
    2) function Dump - фиксация серверного времени начала дампа, запуск дампа, фиксания время окончания дампа (обращаю внимание, что создание дампа это часть глобальной процедуры механики дампов в ELMA365: Запуск команды завершения модулей -> Ожидание остановки всех модулей -> Выполнение дампа -> Запуск команды создания модулей, сам процесс создания и проверки корректности запуска не входит в команду дампа).
    3) function Health_check_elma - сбор информации о состоянии модулей, состоянии занятого места на накопителе и выполнения диагностического отчета и логов сервиса, выполняющего дамп.
    4) function Send_message_bot_telegram - функция отправки сообщения боту в чат Telegram.

    Порядок настройки и включения скрипта в cron
    1. Настроить переменные в блоке описания конфигурации в файле скрипта AutoBackupKindElma365.sh
    2. Запустить скрипт вручную: sudo ./AutoBackupKindElma365.sh
    3. Удостовериться, что дамп корректно завершился и создался локальный файл логов в указанном каталоге. Проверить состояние системы.
    4. При включении оповещения в Telegram удостовериться, что сообщение пришло в чат.
    5. Запланировать выполнения скрипта в cron согласно Ваших требований

    Например:
    root@sobolev-elma365-std:~# crontab -l
    # Edit this file to introduce tasks to be run by cron.
    ....
    # m h dom mon dow command
    0 0 * * * sudo /root/AutoBackupKindElma365.sh

    Пример отображения отчета при очередном дампе в чате Telegram

    [​IMG]

    Вложения:

    Последнее редактирование: 2 май 2023
  2. adc

    adc Новичок

    в текущей реализации скрипта в процентах занятого места и в графе "свободно" легко получите пустоту (в ubuntu точно)
    решение использование awk
    Код:
    
    # Вывод файловой системы корня
    #echo $MEAN_SPACE >> $PATH_CURRENT_LOG
    echo 'Процент занятого места - ' $(df -x overlay -x tmpfs grep '/' -awk '{print $5}') >> $PATH_CURRENT_LOG
    echo 'Занято/свободно - '$(expr $(df -x overlay -x tmpfs grep '/' -awk '{print $3}') / 1024)' Мбайт / '$(expr $(df -x overlay -x tmpfs grep '/' -awk '{print $4}') / 1024)' Мбайт' >> $PATH_CURRENT_LOG
    Последнее редактирование: 15 май 2023
  3. e.baigushkina

    e.baigushkina Участник

    а такая настройка пройдет для microk8s ?
    или microk8s не имеет такого функционала?
  4. sobolev

    sobolev Техническая поддержка

    Добрый день!

    Благодарю за уточнение! Возможно, Вы правы - если не затруднит, прошу, пожалуйста, проверенный вариант Ваш тоже приложить - чтобы в будущем не использовали вновь пришедшие вариант с возможной ошибкой.
  5. sobolev

    sobolev Техническая поддержка

    Добрый день!

    Для microk8s требуется глобальная переработка команд скрипта - но функциональность там точно такая же - есть возможность запускать dump системы командой через bash. Вы можете это сделать самостоятельно, так как скрипт изначально разрабатывался для поставки в docker.
  6. adc

    adc Новичок

    Легко, возможно кому-то будет полезным

    Вложения:

  7. adc

    adc Новичок

    Напишите простейший скрипт, а ля

    Код:
    
    yes elma365ctl dump
    echo "y"
    echo "Дамп прошел теперь наш чудо скрипт подремлет 5 секунд."
    sleep 5s
    echo "Он подремал и теперь готов архивировать так как никогда не архивировал."

    DIRECTORY=/backup

    for SUBDIR in "$DIRECTORY"/*/; do
        SUBDIR_NAME=$(basename "$SUBDIR")
        OUTPUT_FILE="$DIRECTORY/$SUBDIR_NAME.tar"

        echo "Creating archive for $SUBDIR_NAME..."
        tar -cf $OUTPUT_FILE -C $DIRECTORY "$SUBDIR_NAME"
        echo "Archive created: $OUTPUT_FILE"
    done

    echo "Всё заархивировали теперь кидаем в хранилку"

    тут любая строка с копированием (можно в s3 например)

    echo "Всё улетело теперь прибьём ненужное" (можно не прибивать, а оставлять или задать переменную числа дней за которые пройдёт уборочка)

    find /backup/ -mindepth 1 -exec rm -rf {} +

    echo "Уборку закончили"

    echo "Всем спасибо за внимание"
    а там уже курлом в телегу отправить нужный результат не проблема, запилили и в крон это дело вставили
  8. PoddubnyiAlexey

    PoddubnyiAlexey Новичок

    У вас скрипт с ошибкой отрабатывает, вы не заремарили комментарий "Вывод файловой системы корня"

    Код:
    
    .....echo '- Состояние файловой системы после дампа:' >> $PATH_CURRENT_LOG
    MEAN_SPACE
    =$(sudo df -x overlay -x tmpfs grep '/' -w)
    Вывод файловой системы корня
    #echo $MEAN_SPACE >> $PATH_CURRENT_LOG
    echo 'Процент занятого места - ' $(df -x overlay -x tmpfs grep '/' -awk '{print $5}') >> $PATH_CURRENT_LOG
    echo 'Занято/свободно - '$(expr $(df -x overlay -x tmpfs grep '/' -awk '{print $3}') / 1024)' Мбайт / '$(expr $(df -x overlay -x tmpfs grep '/' -awk '{print $4}') / 1024)' Мбайт' >> $PATH_CURRENT_LOG....