2012-08-30 8 views
6

Buduję usługę RESTful w Symfony2, używając FOSRestBundle. Mogę śledzić wykorzystanie strony w klientach internetowych za pomocą Google Analytics. Jednak to oczywiście nie będzie działać dla żądań klientów innych niż HTML.Jak mogę śledzić użycie interfejsu API w Symfony2?

Przed przystąpieniem do instalacji Redis, usług pisemnych, dyspozytorów zdarzeń itp. Problem został już rozwiązany? Czy istnieje rozwiązanie, które nie ma poważnego wpływu na wydajność?

Na podstawie statystyk projektu, który wymieniam, oczekuję około 1000 uderzeń na godzinę przy 90% ruchu pochodzącego z przeglądarek. Nie będę mieć kontroli nad klientami innymi niż HTML, więc dodanie śledzenia nie jest możliwe.

Potrzebuję danych z tego samego powodu, dla którego ktoś potrzebuje danych analitycznych - do tworzenia ładnych wykresów i dostarczenia ilościowych dowodów na temat miejsca, w którym należy skoncentrować zasoby programistyczne.

+4

Może mógłbyś wyszukać coś, co analizowałoby twój dziennik dostępu (bez żadnego wpływu na wydajność)? – greg0ire

+0

Niezły pomysł. Nie wiem zbyt wiele o Apache - w jaki sposób mogę powiedzieć, żeby logował nagłówek 'Accept' dla każdego żądania? –

+0

Wiem, że można dostosować format dziennika. Zobacz dokumentację dyrektywy [LogFormat] (http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat). – greg0ire

Odpowiedz

1

Istnieje kilka opcji i zależy to od dokładnej ilości potrzebnych informacji. Jeśli chcesz tylko poznać podstawową aktywność (liczbę połączeń do każdej usługi internetowej, kiedy, źródłowy adres IP, agent użytkownika), to dzienniki apache mają już wszystkie te informacje. Użyj Zaloguj niestandardowego, aby dodać dodatkowe pola, których potrzebujesz. Na przykład. wspomniałeś nagłówek Accept, który może być dodany tak:

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

Jeśli jest GET, POST, PUT, itd. są zawarte w części% R.

Jeśli chcesz wiedzieć, co faktycznie znajduje się w danych POST lub PUT, jest to trudniejsze. Najtrudniejszym rozwiązaniem jest użycie modułu mod_dumpio. To rejestruje wszystkie dane wejściowe klienta (wszystkie nagłówki, wszystkie pliki cookie, wszystkie dane POST). Jeśli użytkownicy używają interfejsu REST API do przesyłania obrazów, to na dobre lub na złe otrzymają pełny obraz w dzienniku. To może być bardzo duże.

Rozwiązaniem, które preferuję, jest logowanie z PHP: niestandardowy log albo u góry skryptu PHP, albo podczas przetwarzania żądań. Następnie masz pełną kontrolę nad tym, co należy rejestrować, najłatwiejszym do przeanalizowania, a także możesz umieścić go w kontekście (np. Dane tekstowe dziennika, ale nie logując bajtów obrazu). W rozwoju i małych witrynach robię to równolegle z rejestrowaniem apache. Jeśli Apache pobiera za dużo procesora, wyłącz rejestrowanie apache lub całkowicie obejść Apache. (Obecnie oceniam numer built-in webserver in php 5.4 - obsługuje on routing, więc może być bardzo przydatny w przypadku usług internetowych.)

BTW, analizowanie logów serwera jest dobre w połączeniu z Google Analytics: pomaga docenić dokładność każdego.

Powiązane problemy