Monitorare e controllare le applicazioni utilizzando Supervisore Parte 1

Supervisor è uno strumento di monitoraggio che controlla vari processi figlio e gestisce l'avvio / il riavvio di questi processi figli quando escono improvvisamente o escono per alcuni motivi. Può essere esteso per controllare i processi tramite l'API XML-RPC su postazioni remote senza accedere al server. Tratterò l'API XML-RPC nella seconda parte di questa serie in due parti.

Nella prima parte di questa serie di tutorial, illustrerò come configurare Supervisor per lavorare con la nostra applicazione. Per questo, creerò un'applicazione banale in Flask insieme a Gunicorn per fungere da server HTTP WSGI. 

Presumo che tu abbia una conoscenza di base delle migliori pratiche di installazione di Flask, Gunicorn e dell'ambiente che usano virtualenv per essere seguita mentre sviluppi un'applicazione Python.

Installazione dei pacchetti

I seguenti pacchetti devono essere installati per sviluppare e controllare l'applicazione che svilupperemo.

$ pip installa gaskorn supervisor Flask

L'applicazione banale

Creerò ora un'applicazione banale in Flask. Questa applicazione è piccola ma soddisferà le esigenze di questo tutorial.

Di seguito è riportata la struttura dell'applicazione:

flask_app / my_app / - __init__.py - views.py

flask_app / my_app / __ init__.py

da flask import Flask app = Flask (__ name__) importa my_app.views

Nel file sopra, l'applicazione è stata configurata e inizializzata.

flask_app / my_app / views.py

da my_app import app @ app.route ('/') def hello_world (): ritorna 'Hello to the World of Flask!'

Nel file sopra, ho creato un semplice endpoint Hello World.

Per eseguire l'applicazione come processo, possiamo usare Gunicorn. Per verificare se Gunicorn funziona come previsto, è sufficiente eseguire il seguente comando all'interno della cartella dell'applicazione.

$ gunicorn -w 4 -b 127.0.0.1:8000 my_app: app

Successivamente, indirizza il browser a http://127.0.0.1:8000/ per visualizzare la home page dell'applicazione.

Configurazione e utilizzo di Supervisor

Ora, dobbiamo fare lo stesso usando Supervisor in modo che questo funzioni come un demone e sarà controllato dallo stesso Supervisore piuttosto che dall'intervento umano. 

Prima di tutto, abbiamo bisogno di un file di configurazione Supervisor. Supervisore, per impostazione predefinita, cerca un eccetera cartella che ha un file chiamato supervisord.conf. In installazioni di sistema, questa cartella è /eccetera/, e in virtualenv, cercherà un eccetera cartella in virtualenv e quindi tornare a /eccetera/.

Nel caso di un'installazione a livello di sistema, eseguire:

$ echo_supervisord_conf> /etc/supervisord.conf

Nel caso di virtualenv, dall'interno della cartella root virtuale, eseguire:

$ echo_supervisord_conf> etc / supervisord.conf

Il echo_supervisord_conf il programma è fornito dal Supervisore; stampa un file di configurazione di esempio nella posizione specificata. Questo creerà un file chiamato supervisord.conf nella posizione specificata nel comando precedente.

Per configurare Supervisor per la nostra applicazione, aggiungi il seguente blocco da qualche parte in questo file:

[program: supervisor_demo] command =/ bin / gunicorn -w 4 -b 127.0.0.1:8000 my_app: directory app =/ supervisor-tutsplus-demo user = someuser # Utente rilevante autostart = true autorestart = true stdout_logfile = / tmp / app.log stderr_logfile = / tmp / error.log

Qui configuriamo il comando che deve essere eseguito e da quale posizione della directory è necessario farlo in base al quale utente. Inoltre, viene specificato se riavviare l'applicazione in caso di errore. È inoltre possibile specificare le posizioni dei file di registro. Ci sono molte altre opzioni di configurazione, che possono essere consultate nella documentazione ufficiale di Supervisor.

Prendi nota che non devi mai eseguire le applicazioni come utente root. Questo è un enorme difetto di sicurezza quando l'applicazione si blocca, il che può danneggiare il sistema operativo stesso.

Per eseguire l'applicazione usando Supervisor, esegui i seguenti comandi:

$ supervisord $ supervisorctl status supervisor_demo RUNNING pid 22550, uptime 0:00:04

Il primo comando invoca il supervisord server, e il successivo fornisce uno stato di tutti i processi figli.

Ogni volta che apporti una modifica alla tua applicazione e desideri riavviare Gunicorn affinché rifletta le modifiche, esegui il seguente comando:

$ supervisorctl riavvia tutto

Puoi anche dare processi specifici invece di riavviare tutto: 

$ supervisorctl restart supervisor_demo

Supervisor fornisce anche un'interfaccia Web UI che può essere abilitata abilitando il inet_http_server blocco di configurazione in supervisord.conf. Questa interfaccia utente Web può essere cercata su http: // localhost: 9001 /.

Conclusione

In questo tutorial, abbiamo visto come configurare Supervisor e utilizzarlo per eseguire un'applicazione come processo daemon e controllare i processi collettivamente o in modo selettivo. Nella seconda parte di questa serie di tutorial, vedremo come controllare e interrogare Supervisor ei suoi programmi / processi usando l'API XML-RPC.