2012-08-30 39 views
6

我正在使用FOSRestBundle在Symfony2中構建一個RESTful服務。我可以使用Google Analytics跟蹤網頁客戶端中的網頁使用情況。但是,這顯然不適用於非HTML客戶端的請求。如何跟蹤Symfony2中的API使用情況?

在我開始安裝Redis,編寫服務,事件調度程序等之前,這個問題已經解決了嗎?有沒有對性能沒有嚴重影響的解決方案?

根據我要更換的項目的統計數據,我預計每小時有1000次點擊,其中90%的流量來自瀏覽器。我不會控制非HTML客戶端,因此添加跟蹤沒有選項。

我需要的數據出於同樣的原因,任何人都需要分析數據 - 製作漂亮的圖表,並提供關於在哪裏開發資源的定量證據。

+4

也許你可以搜索一些分析你的訪問日誌的東西(對性能沒有影響) – greg0ire

+0

不是一個壞主意。我對Apache不太瞭解 - 我怎麼能告訴它爲每個請求記錄'Accept'頭? –

+0

我知道你可以自定義日誌格式。請參閱[LogFormat](http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat)指令文檔。 – greg0ire

回答

1

有幾個選項,它取決於你需要多少信息。如果您只想知道基本活動(每個Web服務有多少個呼叫,何時源IP,用戶代理),那麼apache日誌已經擁有所有這些信息。 使用CustomLog添加您需要的任何其他字段。例如。您提到了Accept頭,可以像這樣添加:

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

如果它是GET,POST,PUT等包含在%r部分中。

如果您想知道POST或PUT數據中實際存在的內容,那就更困難了。極端的解決方案是使用mod_dumpio模塊。記錄所有客戶端輸入(所有標題,所有cookie,所有POST數據)。如果人們使用REST API上傳圖像,那麼無論好壞,都可以在日誌中獲得完整圖像。這可能會變得非常大。

我喜歡的解決方案是從PHP登錄:PHP腳本頂部的自定義日誌,或者處理請求的時候。然後您可以完全控制要記錄的內容,最簡單的分析格式,也可以將其放在上下文中(例如記錄文本數據,但不記錄圖像字節)。在開發和小型站點中,我會與apache日誌記錄並行執行此操作。如果Apache需要太多的CPU,那麼禁用Apache日誌記錄,或者完全繞過Apache。 (我目前正在評估built-in webserver in php 5.4--它支持路由,因此可能非常適合網絡服務。)

順便說一句,分析服務器日誌與Google Analytics(分析)並行:它可以幫助您瞭解準確度每個。