2012-08-30 6 views
6

Ich baue einen RESTful Service in Symfony2 mit dem FOSRestBundle. Ich kann die Nutzung der Seite in Web-Clients mit Google Analytics verfolgen. Dies wird jedoch offensichtlich nicht für Anfragen von Nicht-HTML-Clients funktionieren.Wie kann ich die API-Nutzung in Symfony2 verfolgen?

Bevor ich mit der Installation von Redis, Schreibdiensten, Event-Dispatchern usw. beginne, ist dieses Problem bereits gelöst worden? Gibt es eine Lösung, die keinen wesentlichen Einfluss auf die Leistung hat?

Basierend auf Statistiken des Projekts, das ich ersetze, erwarte ich etwa 1.000 Zugriffe pro Stunde mit 90% des Verkehrs von Browsern. Ich werde nicht die Kontrolle über die Nicht-HTML-Clients haben, daher ist das Hinzufügen von Tracking nicht möglich.

Ich brauche die Daten aus dem gleichen Grund, dass jemand Analytics-Daten benötigt - um hübsche Graphen zu erstellen und quantitative Hinweise darüber zu geben, wo Entwicklungsressourcen konzentriert werden sollen.

+4

Vielleicht könnten Sie nach etwas suchen, das Ihr Zugriffsprotokoll analysiert (keine Auswirkung auf die Leistung überhaupt) – greg0ire

+0

Keine schlechte Idee. Ich weiß nicht viel über Apache - wie kann ich ihm sagen, dass er den Accept-Header für jede Anfrage protokolliert? –

+0

Ich weiß, dass Sie das Protokollformat anpassen können. Weitere Informationen finden Sie in der Dokumentation zu [LogFormat] (http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat). – greg0ire

Antwort

1

Es gibt ein paar Optionen, und es hängt davon ab, wie viele Informationen Sie benötigen. Wenn Sie nur grundlegende Aktivitäten (wie viele Aufrufe an jeden Webdienst, wann, Quell-IP, Benutzeragenten) wissen möchten, haben die Apache-Protokolle bereits alle diese Informationen. Verwenden Sie CustomLog, um zusätzliche Felder hinzuzufügen, die Sie benötigen. Z.B. Sie erwähnten den Accept-Header, die wie folgt hinzugefügt werden können:

CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" \"%{Accept}i\"" 

Wenn es GET, POST, PUT, usw. in das Verzeichnis% r Teil enthalten ist.

Wenn Sie wissen wollen, was tatsächlich in den POST- oder PUT-Daten ist, dann ist es schwieriger. Die extreme Lösung besteht darin, das mod_dumpio Modul zu verwenden. Das protokolliert alle Client-Eingaben (alle Header, alle Cookies, alle POST-Daten). Wenn Personen Ihre REST-API zum Hochladen von Bildern verwenden, erhalten Sie für das gute oder das schlechte Bild das vollständige Bild in Ihrem Protokoll. Das könnte sehr groß werden.

Die Lösung, die ich bevorzuge, ist von PHP zu protokollieren: ein benutzerdefiniertes Protokoll entweder oben in Ihrem PHP-Skript oder wenn Sie die Anfragen bearbeiten. Sie haben dann die volle Kontrolle darüber, was zu protokollieren ist, das einfachste Format, das analysiert werden soll, und Sie können es auch in den Kontext stellen (z. B. Log-Text-Daten, aber nicht Log-Image-Bytes). In der Entwicklung und für kleine Sites mache ich das parallel zur Apache-Protokollierung. Wenn Apache zu viel CPU verbraucht, deaktivieren Sie die Apache-Protokollierung oder umgehen Sie Apache vollständig. (Ich werte gerade die built-in webserver in php 5.4 - es hat Unterstützung für Routing, so könnte sehr gut für Web-Services geeignet sein.)

BTW, Analysieren von Serverprotokollen ist gut, parallel zu Google Analytics zu tun: Es hilft Ihnen, die Genauigkeit zu schätzen von jedem.