Автор: dcontm 02 марта 2020
Flower - система мониторинга Celery
Предисловие
Целью данного руководства является установка и настройка Flower на боевом сервере. Предпогалается, что некоторые функции вашего Django-приложения обслуживает полностью функционирующий экземпляр Celery и вам необходима возможность отслеживать его работу. Мы установим Flower на тот же сервер, где расположено наше веб-приложение, настроим аутентификацию двумя разными способами, сконфигурируем Nginx для нашей задачи, обеспечим автоматический перезапуск при перегагрузке при помощи демона Supervisor. Статья имеет следующую структуру:
- Введение
- Установка Flower
- Настройка Supervisor для автоматического запуска Flower
- Конфигурация Nginx (1 способ)
- Конфигурация Nginx (2 способ).
- Настрока Google OAuth 2.0 аутентификации.
Введение
Flower - real-time система мониторинга для Celery. C его помощью можно контролировать все составляющие звенья экосистемы Celery. В соответсвии с официальной документацией Flower приведем неполный список его возможностей:
- Мониторинг в реальном времени с помощью Celery Events
- Ход выполнения и история
- Возможность показать детали задачи (аргументы, время запуска, время выполнения и многое другое)
- Графики и статистика
- Дистанционное управление
- Завершение работы и перезапуск рабочих экземпляров
- Управление размером рабочего пула и настройками автомасштабирования
- Применять ограничения по времени и скорости
- Отмена или прекращение задач
Как вы уже поняли - Flower прекрасный вспомагательный инструмент при работе с Celery. Больше информации вы можете найти тут.
Установка Flower
Все довольно просто. Установим Flower c помощью pip:
Запустим сервер с целью удостоверится, что все работает. Запуск призводим из того же каталога, где расположен файл manage.py:
Теперь, при условии что порт 5555 открыт, вы можете проверить что Flower успешно запустился по адресу http://<ваш домен>:5555. После этого вы можете остановить сервер комбинацией клавиш Сtrl-C.
Настройка Supervisor для автоматического запуска Flower
Несколько слов о Supervisor. Supervisor - это клиент-серверная система, которая позволяет контролировать ряд процессов в Unix-подобных системах. Состоит из сервера supervisord - он принимает и обрабатывает запросы от клиентов, supervisorctl - инструмент командной стоки(CLI), также имеется возможность запуска HTTP сервера для доступа через веб-интерфейс к supervisord. Supervisor запускается как основной процесс, а управляемые им процессы других приложений и служб выступают в роли субпроцессов.
Разобравшись, что из себя представляет Supervisor, настроим конфигурационный файл для запуска Flower под его управлением:
$ sudo nano /etc/supervisor/conf.d/my_flower.conf
Заранее оговорюсь, что строку c директивой command мы несколько раз изменим в ходе статьи в зависимости от выбранного способа расположения или вида аутентификации. И так добавим в файл 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:
После выполнения этой команды мы имеем запущенный сервер supervisord и считанные файлы конфигурации. Запустим Flower с помощью CLI supervisorctl:
Проверьте функционирует ли Flower. Так же вам становятся доступны такие команды как:
supervisorctl stop, supervisorctl restart, supervisorctl status.
Конфигурация Nginx (1 способ)
Первый вариант конфигурации Nginx описан в официальной документации Flower. В данном случае Flower будет располагаться на поддомене, т.е. адрес расположения будет выглядеть так http://flower.my_domain. На мои скромный взляд это отличный вариант, при этом есть одно исключение - если у вас настроен SSL сертификат, но при этом он не распространяется на поддомены. Если это не ваш случай, то стоит остановится на такой конфигурации.Обратите внимание - вам необходимо будет добавить дополнительную А-запись в личном кабинете поставщика услуг. Откроем файл конфигурации Nginx для вашего веб-приложения:
Добавим дополнительную секцию 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:
Конфигурация Nginx (2 способ)
Второй способ подразумевает размещение Flower по адресу http://my_domain/flower. Для этого изменим директиву command в файле конфигурации Supervisor. Откроем этот файл:
Добавим в конец существующей строки параметр --url-prefix="flower:
Следующим шагом будет изменение файла конфигурации Nginx:
Вместо добавления новой секции server, в уже имеющуюся секцию добавим дополнительльную location такого вида:
proxy_pass http://localhost:5555;
rewrite ^/flower/?(.*)$ /$1 break;
}
Закроем и сохраним файл конфигурации. Не забудьте перезапустить Nginx:
Настрока Google OAuth 2.0 аутентификации
Первым шагом будет создание нового проекта в консоле гугл разработчика и получение ключей:
- Перейдем в консоль разработчика Google
- Создадим новый проект
- Перейдем во вкладку "Учетные данные" и нажмем кпопку "Создать учетные данные". На этом шаге вам придется настроить "Окно запроса доступа". Обратите внимание на пункт с логотипом - не загружайте его сейчас (это требует длительной проверки на стороне Google).
- Завершите создание идентификатора клиента OAuth.
- Скопируйте ваши ключи,
На следующем этапе вам нужно изменить значение переменной command в конфигурационном файле Supervisor. Откроем и скоректируем запись:
Для первого варианта конфигурации Nginx переменная command будет выглядить так:
Для второго варианта в том же виде, но с добавление --url-prefix:
Не забываем перезапускать процесс после изменения конфигурации:
Резюме
В этом руководстве мы пошагово рассмотрели процесс установки системы мониторига Flower для Django-проекта, используещего Сelery (довольно частое явление), а также настроили аутентификацию для Flower,используя Google Oauth. Я, в свою очередь надеюсь, что данный материал окажется полезным для вас и поможет сэкономить немного времени.
Дмитрий
9 месяцев назад | изменено
0 1
10 месяцев назад
2 1