如何在Symfony2中跟踪API使用情况?

时间:2012-08-30 19:52:10

标签: rest symfony analytics fosrestbundle

我正在使用FOSRestBundle在Symfony2中构建RESTful服务。我可以使用Google Analytics跟踪网络客户端中的网页使用情况。但是,这显然不适用于非HTML客户端的请求。

在我开始安装Redis,编写服务,事件调度程序等之前,这个问题已经解决了吗?是否存在对性能没有严重影响的解决方案?

根据我正在更换的项目统计数据,我预计每小时约有1,000次点击,其中90%的流量来自浏览器。我不会控制非HTML客户端,因此添加跟踪不是一种选择。

我需要这些数据的原因与任何人都需要分析数据相同 - 制作漂亮的图表,并提供关于在哪里集中开发资源的定量证据。

1 个答案:

答案 0 :(得分: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 - 它支持路由,因此可能非常适合Web服务。)

BTW,分析服务器日志可以与Google Analytics同时进行:它可以帮助您了解每个日志的准确性。