我正在使用 FOSRestBundle 在 Symfony2 中构建 RESTful 服务。我可以使用 Google Analytics 跟踪 Web 客户端中的页面使用情况。但是,这显然不适用于非 HTML 客户端的请求。
在我开始安装 Redis、编写服务、事件调度器等之前,这个问题是否已经解决了?有没有对性能没有严重影响的解决方案?
根据我要替换的项目的统计数据,我预计每小时约有 1,000 次点击,其中 90% 的流量来自浏览器。我无法控制非 HTML 客户端,因此无法选择添加跟踪。
我需要数据的原因与任何人都需要分析数据的原因相同——制作漂亮的图表,并提供关于将开发资源集中在哪里的定量证据。
最佳答案
有几个选项,这取决于您需要多少信息。如果您只想了解基本事件(对每个 Web 服务的调用次数、时间、源 IP、用户代理),那么 apache 日志已经包含所有这些信息。
使用 CustomLog 添加您需要的任何其他字段。例如。您提到了 Accept header ,可以这样添加:
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模块。这会记录所有客户端输入(所有 header 、所有 cookie、所有 POST 数据)。如果人们使用您的 REST API 上传图像,那么无论好坏,您都会在日志中获得完整的图像。那可能会变得非常大。
我喜欢的解决方案是从 PHP 记录:在 PHP 脚本顶部或处理请求时的自定义日志。然后,您可以完全控制要记录的内容、最容易分析的格式,还可以将其放在上下文中(例如,记录文本数据,但不记录图像字节)。在开发和小型站点中,我与 apache 日志记录并行执行此操作。如果 Apache 占用过多 CPU,则禁用 apache 日志记录,或完全绕过 Apache。 (我目前正在评估 built-in webserver in php 5.4 - 它支持路由,因此可能非常适合 Web 服务。)
顺便说一句,分析服务器日志最好与 Google Analytics 并行进行:它可以帮助您了解每个日志的准确性。
关于rest - 如何在 Symfony2 中跟踪 API 使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204422/