Appstat per Python 2

L'SDK Python 2 include la libreria Appstats utilizzata per la profilazione delle prestazioni RPC (Remote Procedure Call) della tua applicazione. Una RPC di App Engine è una chiamata di rete andata e ritorno tra l'applicazione e un'API App Engine Service. Ad esempio, tutte queste chiamate API sono chiamate RPC:

  • Chiamate al 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, ad esempio mail.send().

L'ottimizzazione o il debug di un'applicazione scalabile può essere difficile, perché numerosi problemi possono causare prestazioni scadenti o costi imprevisti. È molto difficile eseguire il debug di questi problemi con le fonti di informazioni tradizionali, come i log o le statistiche relative all'ora delle richieste. La maggior parte delle richieste di applicazione trascorre la maggior parte del tempo in attesa del completamento delle chiamate di rete nell'ambito della soddisfazione della richiesta.

Per garantire la velocità della tua applicazione, devi conoscere:

  • La tua applicazione effettua chiamate RPC non necessarie?
  • Deve memorizzare nella cache i dati invece di effettuare chiamate RPC ripetute per ottenere gli stessi dati?
  • La tua applicazione avrà prestazioni migliori se vengono eseguite più richieste 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, permettendoti di profilare le chiamate RPC. Appstats consente di tenere traccia di tutte le chiamate RPC per una determinata richiesta e di generare report su tempi e costi di ogni chiamata.

Anche l'ottimizzazione dell'utilizzo RPC della tua applicazione può ridurre la fatturazione. Vedi Gestione delle risorse per le app.

Guarda un video dimostrativo.

Configurazione

Non c'è nulla da scaricare o installare per iniziare a utilizzare Appstat. Devi solo configurare l'applicazione, eseguire nuovamente il deployment e accedere alla console Appstats come descritto nei passaggi seguenti. La libreria Appstat si occupa di tutto il resto.

1. Installa il registratore di eventi

Per registrare le statistiche sulle richieste web, ogni gestore delle richieste per la tua applicazione deve richiamare Appstat. A seconda del framework utilizzato dalla tua applicazione, scegli una delle seguenti opzioni:

  • Gestori di richieste WSGI

    Per utilizzare Appstat con gestori di richieste WSGI, inclusi framework WSGI come webapp2, devi eseguire il wrapping della tua applicazione WSGI con il middleware appstats. Il modo più semplice per raggiungere questo obiettivo è definire un middleware WSGI per eseguire il wrapping di ogni applicazione WSGI utilizzando appengine_config.py.

    Se non esiste già, crea un file denominato appengine_config.py nella directory root dell'applicazione. Aggiungi la funzione seguente 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 maggiori informazioni su appengine_config.py, consulta la sezione Configurazione facoltativa di seguito.

  • Framework di Django

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

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

    Il middleware Appstats deve essere il primo elemento, quindi il profiler può includere altri middleware nelle sue statistiche.

    Il middleware Django chiama Appstat per registrare gli eventi, se necessario. Non è necessario modificare altri codici dell'applicazione.

2. Imposta il percorso della console

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

  • URL predefinito

    Per mappare Appstat alla directory predefinita (/_ah/stats/), aggiungi l'elemento appstats integrato al tuo file app.yaml:

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

    Se devi mappare Appstat a una directory diversa da quella predefinita, puoi utilizzare l'istruzione url in app.yaml:

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

3. Configurazione facoltativa

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

Alcune cose da sapere su 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ò monitorare il costo RPC e il tempo. Se la tua applicazione è abbastanza veloce ma più costosa di quanto ti aspetti, cerca 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 Appstat dal server di sviluppo

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

5. Deployment

Una volta completata la configurazione di Appstats, esegui il deployment dell'applicazione. Se hai configurato il percorso della console in modo che utilizzi l'URL predefinito indicato sopra, puoi accedere alla console all'indirizzo http://your_app_id.appspot.com/_ah/stats.

Un tour della console Appstats

La console Appstats fornisce informazioni generali sulle chiamate RPC effettuate, i percorsi URL richiesti, una cronologia delle richieste recenti e i dettagli delle singole richieste:

  • La tabella Statistiche RPC mostra le statistiche per ciascun tipo di RPC effettuato dalla tua applicazione. Se fai clic su un pulsante Più, la voce viene espansa per mostrare un'analisi dettagliata della richiesta di percorso per la RPC:

    screenshot

  • La tabella Statistiche percorso mostra le statistiche per ciascuna richiesta di percorso inviata alla tua applicazione. Se fai clic su un pulsante Più, la voce viene espansa per mostrare un'analisi per RPC della richiesta del percorso:

    screenshot

    Se hai abilitato la funzionalità di monitoraggio dei costi dell'API, verranno visualizzati anche i costi.

  • La tabella Cronologia delle richieste mostra i dati relativi alle singole richieste. Se fai clic su un pulsante Più, la voce viene espansa e viene visualizzata una suddivisione per RPC. Se fai clic su un link di una richiesta, viene visualizzata una sequenza temporale della richiesta, incluse le tempistiche RPC individuali:

    screenshot

  • Il grafico Sequenza RPC mostra quando sono state effettuate chiamate RPC specifiche e il tempo di elaborazione delle richieste. La barra Totale RPC mostra il tempo totale di attesa per le chiamate RPC, mentre la barra Totale generale indica il tempo totale dedicato all'elaborazione della richiesta. Come puoi vedere dalla sequenza temporale riportata di seguito, la maggior parte del tempo è stata dedicata alle chiamate RPC. Questo è spesso il caso. Le altre schede mostrano informazioni aggiuntive sulla richiesta. Comprendere l'impatto delle chiamate RPC sui tempi di risposta della tua applicazione è fondamentale per analizzarne le prestazioni.

    screenshot

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

    Una volta effettuato l'accesso ad Appstats, fai clic sul link relativo a Interactive Playground. Viene visualizzato un modulo con una singola area di testo. Inserisci un codice Python arbitrario nell'area di testo, quindi invia il modulo per eseguirlo. Tutti i risultati stampati nell'output standard vengono visualizzati accanto all'area di testo e viene visualizzata un'analisi della Sequenza temporale delle chiamate RPC generate dal codice.

    L'area giochi interattiva può essere attivata o disattivata. Nell'SDK è abilitato per impostazione predefinita, mentre in produzione è disattivato per impostazione predefinita. Per attivarlo, aggiungi la riga seguente al tuo file appengine_config.py:

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

Come funziona

Appstats utilizza gli hook delle API per aggiungersi al framework di chiamata di procedura remota che è alla base delle API del servizio App Engine. Registra le statistiche per tutte le chiamate API effettuate durante il gestore di richieste, quindi archivia i dati in memcache, utilizzando uno spazio dei nomi __appstats__. Appstat conserva le statistiche per le 1000 richieste più recenti. I dati includono record di riepilogo, ciascuno di circa 200 byte, e record di dettagli, che possono contenere fino a 100 kB ciascuno. Puoi controllare la quantità di dettagli archiviati nei record dettagliati. Consulta Configurazione facoltativa e il file di configurazione di esempio.

Gli hook dell'API aggiungono un sovraccarico ai gestori delle richieste. Appstats aggiunge un messaggio ai log a livello di "informazioni" per segnalare la quantità di risorse utilizzate dalla libreria Appstats stessa. La riga del log è simile alla seguente:

<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 dettagli (full) e il tempo (in secondi) trascorso per la registrazione di queste informazioni. La riga del log include il link all'interfaccia di amministrazione di Appstats che mostra i dati per questo evento.