Appstats per Python 2

L'SDK Python 2 include la libreria Appstats utilizzata per profilare le prestazioni RPC (chiamata di procedura remota) della tua applicazione. Una RPC App Engine è una chiamata di rete di andata e ritorno tra l'applicazione e un'API del 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 Posta come mail.send().

L'ottimizzazione o il debug di un'applicazione scalabile può essere difficile perché numerosi problemi possono causare prestazioni scarse o costi imprevisti. È molto difficile eseguire il debug di questi problemi con le solite fonti di informazioni, come i log o le statistiche sul tempo 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 che:

  • La tua applicazione effettua chiamate RPC non necessarie?
  • Deve memorizzare nella cache i dati anziché effettuare chiamate RPC ripetute per ottenere gli stessi dati?
  • La tua applicazione avrà un rendimento migliore 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 profilare le chiamate RPC. Appstats consente di tracciare tutte le chiamate RPC per una determinata richiesta e fornisce report sul tempo e sul costo di ogni chiamata.

L'ottimizzazione dell'utilizzo di RPC dell'applicazione può anche ridurre la fattura. Vedi Gestione delle risorse dell'applicazione.

Guarda una dimostrazione video.

Configurazione

Per iniziare a utilizzare Appstats, non devi scaricare o installare nulla. Devi solo configurare l'applicazione, eseguirne nuovamente il deployment e accedere alla console Appstats come descritto nei passaggi riportati di seguito. La libreria Appstats si occupa del resto.

1. Installare il registratore di eventi

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

  • Gestori delle richieste WSGI

    Per utilizzare Appstats con i gestori di richieste WSGI, inclusi i framework WSGI come webapp2, devi eseguire il wrapping dell'applicazione WSGI con il middleware Appstats. Il modo più semplice per farlo è 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 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 la sezione 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 un URL per la 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 appstats integrato 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 di opzioni di configurazione, consulta il file google/appengine/ext/appstats/sample_appengine_config.py nell'SDK.

Alcuni aspetti da conoscere 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 visualizzare tutti i file.

Visualizzazione del costo

AppStats può tenere traccia del costo e del tempo delle 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

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

Tour della console Appstats

La console Appstats 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 la RPC:

    screenshot

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

    screenshot

    Se hai attivato la funzionalità 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 viene espansa per mostrare una suddivisione per RPC. Se fai clic su un link di richiesta, viene visualizzata una cronologia della richiesta, inclusi i tempi RPC individuali:

    screenshot

  • Il grafico Sequenza temporale RPC mostra quando sono state effettuate chiamate RPC specifiche e quanto tempo è stato necessario per elaborare le richieste. La barra RPC Total mostra il tempo totale trascorso in attesa delle chiamate RPC, mentre la barra Grand Total mostra il tempo totale trascorso a elaborare la richiesta. Come puoi vedere dalla cronologia riportata di seguito, la maggior parte del tempo è stata dedicata alle 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

  • Il playground interattivo consente agli sviluppatori di inserire codice Python arbitrario in un modulo web ed eseguirlo all'interno dell'ambiente dell'app.

    Dopo aver raggiunto Appstats, fai clic sul link a Interactive Playground. Verrà visualizzato un modulo con una singola area di testo. Inserisci il codice Python che preferisci nell'area di testo, poi 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 cronologia delle chiamate RPC generate dal codice.

    Il parco giochi interattivo può essere attivato o disattivato. Nell'SDK è attivo per impostazione predefinita, mentre in produzione è disattivato per impostazione predefinita. Per abilitarlo, aggiungi la seguente riga al file appengine_config.py:

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

Come funziona

Appstats utilizza 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 l'handler delle richieste, quindi archivia i dati in memcache utilizzando uno spazio dei nomi di __appstats__. Appstats conserva le statistiche per le 1000 richieste più recenti. I dati includono record di riepilogo, di circa 200 byte ciascuno, e record dettagliati, che possono arrivare fino a 100 KB ciascuno. Puoi controllare il livello di dettaglio memorizzato nei record dettagliati. (Vedi Configurazione facoltativa e il file di configurazione di esempio.)

Gli hook API aggiungono un sovraccarico ai gestori delle richieste. Appstats aggiunge un messaggio ai log a livello "info" per segnalare la quantità di risorse consumate dalla libreria Appstats stessa. La riga di log è simile a questa:

<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 indica la chiave memcache aggiornata, le dimensioni dei record di riepilogo (part) e dettagli (full) e il tempo (in secondi) impiegato per registrare queste informazioni. La riga di log include il link all'interfaccia amministrativa di Appstats che mostra i dati per questo evento.