【问题标题】:how do you do logging if your app is put in front of varnish如果您的应用程序放在清漆前面,您将如何进行日志记录
【发布时间】:2015-02-27 01:50:22
【问题描述】:

varnish 背后的逻辑是它永远不会触及您的 ruby​​/php 代码库,而是直接由缓存提供服务。如果我有一个电子商务网站,并且对于每个类别页面,我想记录用户/IP 地址 X 在什么时间查看的特定页面,我已将此记录代码放入我的 php 代码中。但是,当我使用 Varnish 运行应用程序时,我失去了所有这些能力。我对网关代理缓存很陌生,有人可以启发我吗?

【问题讨论】:

  • 配置 varnishncsa 来记录命中事件将达到目的。

标签: caching varnish gateway


【解决方案1】:

解决此问题的最简单最有效的方法是创建一个仅执行日志记录部分的 ajax 请求。这样,您仍然可以缓存整个页面,同时禁用 ajax 请求的缓存以使其能够记录所有用户。您将从 varnish 转发到 ajax 请求的 IP(使用 X-Forwarded-For),您使用 javascript 轻松获得并包含在 ajax 调用中的 URL(浏览器引用标头不可靠)。

【讨论】:

    【解决方案2】:

    一个相当简单的事情是编写一个脚本来解析varnish日志,并检索感兴趣的页面、ips和其他有趣的信息。它可以每天运行一次或更频繁,具体取决于您的需要。

    通过在@Clarence 响应中使用 ajax 请求,您可能不包括未激活 javascript 的访问者(但您可以实时获取统计信息)

    【讨论】:

    • 您也可以通过分析流式传输的 varnishlog/varnishncsa 输出来实时获取统计信息。这是替换 Web 服务器日志的一个很好的解决方案,但在替换自定义日志记录脚本时是一种复杂且不太灵活的方法。对日志的任何处理都需要完全重写,并且无法记录与内容相关的自定义属性。
    【解决方案3】:

    您可以在 Varnish 中添加一些逻辑来转发 IP 地址,这样您就可以获得客户端 IP 和请求 URL 的完整网络服务器日志。

    此示例适用于 apache:Varnish Client IP not logging in Apache Logs

    [编辑] 上述建议仅适用于缓存未命中。推荐客户端JS。

    您还可以考虑使用 javascript 来轮询服务器的信息,例如 Google Analytics。 http://www.google.com/analytics/

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 2011-07-11
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多