image

Автор: dcontm 02 марта 2020

Теги: Django Ubuntu Deploy

Flower - система мониторинга Celery

 

Предисловие

 

Целью  данного руководства является установка и настройка Flower на боевом сервере. Предпогалается, что  некоторые функции вашего Django-приложения обслуживает полностью функционирующий экземпляр Celery и вам необходима возможность отслеживать его работу. Мы установим Flower на тот же сервер, где расположено наше веб-приложение, настроим аутентификацию двумя разными способами, сконфигурируем Nginx для нашей задачи, обеспечим автоматический перезапуск при перегагрузке при помощи демона Supervisor. Статья имеет следующую структуру:

  1. Введение
  2. Установка Flower
  3. Настройка Supervisor для автоматического запуска  Flower
  4. Конфигурация Nginx (1 способ)
  5. Конфигурация Nginx (2 способ).
  6. Настрока Google OAuth 2.0 аутентификации.

 

Введение

 

Flower - real-time система мониторинга для Celery. C его помощью можно контролировать все составляющие звенья экосистемы Celery. В соответсвии с официальной документацией Flower приведем неполный список его возможностей:

  • Мониторинг в реальном времени с помощью Celery Events
    • Ход выполнения и история
    • Возможность показать детали задачи (аргументы, время запуска, время выполнения и многое другое)
    • Графики и статистика
  • Дистанционное управление
    • Завершение работы и перезапуск рабочих экземпляров
    • Управление размером рабочего пула и настройками автомасштабирования
    • Применять ограничения по времени и скорости
    • Отмена или прекращение задач

Как вы уже поняли - Flower прекрасный вспомагательный инструмент при работе с Celery. Больше информации вы можете найти тут.

 

Установка Flower

 

Все довольно просто. Установим Flower c  помощью pip:

$ pip install flower

Запустим сервер с целью удостоверится, что все работает. Запуск призводим из того же каталога, где расположен файл manage.py:

$ flower -A project --port = 5555

Теперь, при условии что порт 5555 открыт, вы можете проверить что Flower успешно запустился по адресу http://<ваш домен>:5555. После этого вы можете остановить сервер комбинацией клавиш Сtrl-C.

 

Настройка Supervisor для автоматического запуска  Flower

 

Несколько слов о Supervisor. Supervisor - это клиент-серверная система, которая позволяет контролировать ряд процессов в Unix-подобных системах. Состоит из сервера supervisord - он принимает и обрабатывает запросы от клиентов, supervisorctl - инструмент командной стоки(CLI), также имеется возможность запуска HTTP сервера для доступа через веб-интерфейс к supervisord. Supervisor запускается как основной процесс, а управляемые им процессы других приложений и служб выступают в роли субпроцессов.

Разобравшись, что из себя представляет Supervisor, настроим конфигурационный файл для запуска Flower под его управлением:

$ sudo touch /etc/supervisor/conf.d/my_flower.conf
$ sudo nano /etc/supervisor/conf.d/my_flower.conf

Заранее оговорюсь, что строку c директивой command мы несколько раз изменим в ходе статьи в зависимости от выбранного способа расположения или вида аутентификации. И так добавим в файл my_flower.conf следующее содержимое:

/etc/supervisor/conf.d/my_flower.conf

[program:my_flower]
command=/home/my_user/my_project/venv/bin/flower -A project --port=5555 --basic_auth=user1:password1
directory=/home/my_user/my_project/project
user=my_user
numprocs=1

stdout_logfile=/var/log/supervisor/my_flower.log
stderr_logfile=/var/log/supervisor/my_flower_err.log

autostart=true
autorestart=true

startsecs=15
stopwaitsecs = 600
killasgroup=true
priority=998

Отмечу, что при данной конфигурации, файлы stdout и stderr должны быть созданы вручную, также мы указали базовый способ аутентификации. Чтобы узнать подробнее о настройках конфигурации Supervisor посетите эту страницу. Сохраните и закройте файл.

Теперь мы можем запустить сервер supervisord:

$ sudo supervisord

После выполнения этой команды мы имеем запущенный сервер supervisord и считанные файлы конфигурации. Запустим Flower с помощью CLI supervisorctl:

$ sudo supervisorctl start my_flower

Проверьте функционирует ли Flower. Так же вам становятся доступны такие команды как:
supervisorctl stop, supervisorctl restart, supervisorctl status.

 

Конфигурация Nginx (1 способ)

Первый вариант конфигурации Nginx описан в официальной документации Flower. В данном случае Flower будет располагаться на поддомене, т.е. адрес расположения будет выглядеть так  http://flower.my_domain. На мои скромный взляд это отличный вариант, при этом есть одно исключение - если у вас настроен SSL сертификат, но при этом он не распространяется на поддомены. Если это не ваш случай, то стоит остановится на такой конфигурации.Обратите внимание - вам необходимо будет добавить дополнительную А-запись в личном кабинете поставщика услуг. Откроем файл конфигурации Nginx для вашего веб-приложения:

$ sudo nano /etc/nginx/sites-available/my_project

Добавим дополнительную секцию server :

server {
    listen 80;
    server_name flower.example.com;
    charset utf-8;

    location / {
        proxy_pass http://localhost:5555;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Закроем и сохраним файл конфигурации. Не забудьте перезапустить Nginx:

$ sudo systemctl restart nginx

 

Конфигурация Nginx (2 способ)

Второй способ подразумевает размещение Flower  по адресу  http://my_domain/flower. Для этого изменим директиву command в файле конфигурации Supervisor. Откроем этот файл:

$ sudo nano /etc/supervisor/conf.d/my_flower.conf

Добавим в конец существующей строки параметр --url-prefix="flower:

command=/home/my_user/my_project/venv/bin/flower -A project --port=5555 --basic_auth=user1:password1 --url-prefix="flower"

Следующим шагом будет изменение файла конфигурации Nginx:

$ sudo nano /etc/nginx/sites-available/my_project

Вместо добавления новой секции server, в уже имеющуюся секцию добавим дополнительльную location такого вида:

location ~ ^/flower/? {
    proxy_pass http://localhost:5555;
    rewrite ^/flower/?(.*)$ /$1 break;
}

Закроем и сохраним файл конфигурации. Не забудьте перезапустить Nginx:

$ sudo systemctl restart nginx

 

Настрока Google OAuth 2.0 аутентификации

 

Первым шагом будет создание нового проекта в консоле гугл разработчика и получение ключей:

  • Перейдем в консоль разработчика Google
  • Создадим новый проект

  • Перейдем во вкладку "Учетные данные" и нажмем кпопку "Создать учетные данные". На этом шаге вам придется настроить "Окно запроса доступа". Обратите внимание на пункт с логотипом - не загружайте его сейчас (это требует длительной проверки на стороне Google).

  • Завершите создание идентификатора клиента OAuth.

  • Скопируйте ваши ключи,

На следующем этапе вам нужно изменить значение переменной command в конфигурационном файле Supervisor. Откроем и скоректируем запись:

 $ sudo nano /etc/supervisor/conf.d/my_flower.conf

Для первого варианта конфигурации Nginx переменная command будет выглядить так:

command=/home/my_user/my_project/venv/bin/flower -A project --port=5555 --auth="ваша_почта@gmail.com" --oauth2_key="Идентификатор клиента" --oauth2_secret="Секретный код клиента" --oauth2_redirect_uri=http://ваш-домен/flower/login

Для второго варианта в том же виде, но с добавление --url-prefix:

command=/home/my_user/my_project/venv/bin/flower -A project --port=5555 --auth="ваша_почта@gmail.com" --oauth2_key="Идентификатор клиента" --oauth2_secret="Секретный код клиента" --oauth2_redirect_uri=http://ваш-домен/flower/login --url-prefix="flower"

Не забываем перезапускать процесс после изменения конфигурации:

$ sudo supervisorctl restart my_flower

 

Резюме

 

В этом руководстве мы пошагово рассмотрели процесс установки системы мониторига Flower для Django-проекта, используещего Сelery (довольно частое явление), а также настроили аутентификацию для Flower,используя Google Oauth. Я, в свою очередь надеюсь, что данный материал окажется полезным для вас и поможет сэкономить немного времени.

2  0  2100 

Только авторизированные пользователи могут оставлять комментарии
Войти через VK

Коментарии 2
avatar
Дмитрий

9 месяцев назад | изменено

Привет!!!

0  1 
avatar

10 месяцев назад

Простой комментарий!

2  1