Appstats per Python 2

L'SDK Python 2 include la libreria Appstats utilizzata per il profiling delle prestazioni delle chiamate di procedura remota (RPC) della tua applicazione. Un'RPC di App Engine è una chiamata di rete di andata e ritorno tra la tua applicazione e un'API di servizio App Engine. Ad esempio, tutte queste chiamate API sono chiamate RPC:

  • Chiamate Datastore come ndb.get_multi(), ndb.put_multi() o ndb.gql().
  • Chiamate Memcache come memcache.get() o memcache.get_multi().
  • Chiamate URL Fetch come urlfetch.fetch().
  • Chiamate Mail come mail.send().

L'ottimizzazione o il debug di un'applicazione scalabile può essere una sfida perché numerosi problemi possono causare prestazioni scadenti o costi imprevisti. Questi problemi sono molto difficili da eseguire il debug con le solite fonti di informazioni, come i log o le statistiche sui tempi di richiesta. La maggior parte delle richieste di applicazioni trascorre la maggior parte del tempo in attesa del completamento delle chiamate di rete per soddisfare la richiesta.

Per mantenere la tua applicazione veloce, devi sapere:

  • La tua applicazione effettua chiamate RPC non necessarie?
  • Dovrebbe memorizzare nella cache i dati anziché effettuare chiamate RPC ripetute per ottenere gli stessi dati?
  • Il rendimento della tua applicazione migliorerà se più richieste vengono eseguite in parallelo anziché in serie?

La libreria Appstats ti aiuta a rispondere a queste domande e a verificare che la tua applicazione utilizzi le chiamate RPC nel modo più efficiente consentendoti di creare un profilo delle chiamate RPC. Appstats ti consente di monitorare tutte le chiamate RPC per una determinata richiesta e genera report su tempo e costi di ogni chiamata.

L'ottimizzazione dell'utilizzo delle chiamate RPC dell'applicazione può anche ridurre la fattura. Vedi Gestire le risorse dell'app.

Guarda una dimostrazione video.

Configurazione

Non è necessario scaricare o installare nulla per iniziare a utilizzare Appstats. Devi solo configurare l'applicazione, eseguire il redeployment e accedere alla console Appstats come descritto nei passaggi riportati di seguito. La libreria Appstats si occupa del resto.

1. Installa il registratore di eventi

Per registrare le statistiche sulle richieste web, ogni gestore delle richieste per l'applicazione deve invocare Appstats. A seconda del framework utilizzato dalla tua applicazione, scegli una delle seguenti opzioni:

  • Gestori delle richieste WSGI

    Per utilizzare Appstats con i gestori delle richieste WSGI, inclusi i framework WSGI come webapp2, devi avvolgere l'applicazione WSGI con il middleware appstats. Il modo più semplice per farlo è definire un middleware WSGI per avvolgere ogni applicazione WSGI utilizzando appengine_config.py.

    Se non esiste già, crea un file denominato appengine_config.py nella directory principale dell'applicazione. Aggiungi la seguente funzione al file:

    def webapp_add_wsgi_middleware(app):
        from google.appengine.ext.appstats import recording
        app = recording.appstats_wsgi_middleware(app)
        return app

    Prima di richiamare l'applicazione WSGI, il runtime importerà questo file e chiamerà la funzione webapp_add_wsgi_middleware, se trovata.

    Per ulteriori informazioni su appengine_config.py, consulta Configurazione facoltativa di seguito.

  • Framework Django

    Per installare il middleware Appstats in un'applicazione Django, modifica il file settings.py e aggiungi la seguente riga come primo elemento in MIDDLEWARE_CLASSES:

        MIDDLEWARE_CLASSES = (
      'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware',
    
      # ...
    )

    Il middleware Appstats deve essere il primo elemento, in modo che il profiler possa includere altri middleware nelle sue statistiche.

    Il middleware Django chiama Appstats per registrare gli eventi, a seconda dei casi. Non è necessario modificare altro codice dell'applicazione.

2. Imposta il percorso della console

Per accedere alla console Appstats, visita l'URL della tua applicazione in un browser web. Devi impostare il percorso dell'URL in uno dei due modi seguenti:

  • URL predefinito

    Per mappare Appstats alla directory predefinita (/_ah/stats/), aggiungi il comando integrato appstats al file app.yaml:

    runtime: python27
    api_version: 1
    threadsafe: yes
    
    builtins:
    - appstats: on
    
    handlers:
    - url: .*
      script: main.app
    
  • URL personalizzato

    Se devi mappare Appstats a una directory diversa da quella predefinita, puoi utilizzare la direttiva url in app.yaml:

      - url: /stats.*
      script: google.appengine.ext.appstats.ui.app
      

3. Configurazione facoltativa

Puoi configurare il comportamento di Appstats aggiungendo contenuti al file appengine_config.py nella directory principale dell'applicazione. Per un esempio completo delle opzioni di configurazione, consulta il file google/appengine/ext/appstats/sample_appengine_config.py nell'SDK.

Ecco alcuni aspetti da conoscere in merito a appengine_config.py:

  • Se i gestori delle richieste modificano sys.path, devi apportare le stesse modifiche a sys.path in appengine_config.py in modo che l'interfaccia web di Appstats possa vedere tutti i file.

Visualizzazione del costo

AppStats può tenere traccia del costo e del tempo delle chiamate RPC. Se la tua applicazione è abbastanza veloce, ma più costosa del previsto, cerca le operazioni che costano più del previsto. Per attivare il monitoraggio dei costi, imposta appstats_CALC_RPC_COSTS = True nel file appengine_config.py.

4. Testare Appstats dal server di sviluppo

Puoi testare la configurazione di Appstats con il server di sviluppo. Se hai configurato il percorso della console in modo da utilizzare l'URL predefinito riportato sopra, puoi accedere alla console all'indirizzo http://localhost:8080/_ah/stats/.

5. Esegui il deployment

Quando la configurazione di Appstats ti soddisfa, esegui il deployment dell'applicazione. Se hai configurato il percorso della console in modo da utilizzare l'URL predefinito riportato sopra, puoi accedere alla console all'indirizzo http://your_app_id.appspot.com/_ah/stats.

Un tour della console Appstats

Appstats Console fornisce informazioni di alto livello sulle chiamate RPC effettuate, sui percorsi URL richiesti, su una cronologia delle richieste recenti e sui dettagli delle singole richieste:

  • La tabella Statistiche RPC mostra le statistiche per ogni tipo di RPC effettuata dalla tua applicazione. Se fai clic su un pulsante Più, la voce si espande per mostrare una suddivisione per richiesta di percorso per l'RPC:

    screenshot

  • La tabella Statistiche percorso mostra le statistiche per ogni richiesta di percorso inviata all'applicazione. Se fai clic su un pulsante Più, la voce si espande per mostrare una suddivisione per RPC della richiesta di percorso:

    screenshot

    Se hai attivato la funzionalità di monitoraggio dei costi delle API, verranno visualizzati anche i costi.

  • La tabella Cronologia richieste mostra i dati relativi alle singole richieste. Se fai clic su un pulsante Più, la voce si espande per mostrare una suddivisione per RPC. Se fai clic sul link di una richiesta, viene visualizzata una sequenza temporale della richiesta, inclusi i tempi di ciascun RPC:

    screenshot

  • Il grafico Sequenza temporale RPC mostra quando sono state effettuate chiamate RPC specifiche e il tempo necessario per l'elaborazione delle richieste. La barra Totale RPC mostra il tempo totale di attesa per le chiamate RPC, mentre la barra Totale generale mostra il tempo totale di elaborazione della richiesta. Come puoi vedere dalla sequenza temporale riportata di seguito, la maggior parte del tempo è stata spesa per le chiamate RPC. Spesso è così. Le altre schede mostrano informazioni aggiuntive sulla richiesta. Comprendere l'impatto delle chiamate RPC sul tempo di risposta dell'applicazione è fondamentale per analizzarne il rendimento.

    screenshot

  • Interactive Playground (Playground interattivo) consente agli sviluppatori di inserire codice Python arbitrario in un modulo web ed eseguirlo all'interno dell'ambiente della loro app.

    Dopo aver eseguito l'accesso ad Appstats, fai clic sul link per la pagina di Playground interattiva. Viene visualizzato un modulo con un'unica area di testo. Inserisci un codice Python arbitrario nell'area di testo, quindi invia il modulo per eseguirlo. Eventuali risultati stampati nell'output standard vengono visualizzati accanto all'area di testo e viene visualizzata un'analisi Cronologia delle chiamate RPC generate dal codice.

    Il Playground interattivo può essere attivato o disattivato. Nell'SDK è attiva per impostazione predefinita, mentre in produzione è disattivata per impostazione predefinita. Per attivarla, aggiungi la seguente riga al file appengine_config.py:

    <pre suppresswarning="yes" class="prettyprint">
    appstats_SHELL_OK = True
    </pre>
    

Come funziona

Appstats utilizza gli hook API per aggiungersi al framework di chiamata di procedura remota alla base delle API di servizio App Engine. Registra le statistiche per tutte le chiamate API effettuate durante il gestore delle richieste, quindi memorizza i dati in memcache utilizzando uno spazio dei nomi __appstats__. Appstats conserva le statistiche relative alle 1000 richieste più recenti. I dati includono record di riepilogo, ciascuno di circa 200 byte, e record dettagliati, ciascuno di massimo 100 KB. Puoi controllare la quantità di dettagli memorizzati nei record dettagliati. (vedi Configurazione facoltativa e il file di configurazione di esempio).

Gli hook API aggiungono un po' di overhead ai gestori delle richieste. Appstats aggiunge un messaggio ai log a livello di "info" per segnalare la quantità di risorse consumate dalla libreria Appstats stessa. La riga di log ha il seguente aspetto:

<pre suppresswarning="yes" class="prettyprint">
INFO 2009-08-25 12:04:07,277 recording.py:290] Saved; key: __appstats__:046800, part: 160 bytes, full: 25278 bytes, overhead: 0.019 + 0.018; link: http://your_app_id.[REGION_ID].r.appspot.com/stats/detail?time=1234567890123
</pre>

Questa riga riporta la chiave memcache aggiornata, le dimensioni dei record di riepilogo (part) e di dettaglio (full) e il tempo (in secondi) impiegato per registrare queste informazioni. La riga del log include il link all'interfaccia di amministrazione di Appstats che mostra i dati relativi a questo evento.