清漆:如何向后端发送命中/未命中统计数据

时间:2013-04-25 17:35:35

标签: caching varnish varnish-vcl

我希望你能帮忙

我有一个可以动态生成图像的图像服务器。 我正在使用清漆来缓存生成的图像。

我需要记录清漆收到的请求数量(每个图像)以及是否是命中或未命中(传递被标记为未命中)。目前,我正在编写带有命中/未命中文件的访问日志,然后我使用crontab处理此访问日志文件并将数据写入我的数据库......

我想做的是:

让Varnish向我的后端发出请求,通知它有一个缓存命中(如果可能的话,还有响应大小(字节))。 我的后端可以保存这些数据......

这一切都可能吗?如果是这样的话?


如果有人对此感兴趣:

  • 2个varnish实例,每个实例都有1个(java + tomcat)后端。
  • 服务操纵并生成特定于请求中的要求的每个图像......

以下是每天:

  • 超过3500万页面浏览量,其中每个页面至少包含3个图像。
  • Varnish获得大约300多万张图片请求(图片也会被浏览器缓存)。
  • Varnish的命中率为87%
  • 点击的响应时间是几微秒
  • 未命中的响应时间为50ms至1000ms,具体取决于图像的大小(源和输出)

2 个答案:

答案 0 :(得分:2)

这样做的最好方法是让一个帮助程序进程尾随varnishlog输出和 在需要时进行HTTP调用。

您可以通过在std.log()中使用vcl_deliver记录必要的数据来执行此操作,以便执行此操作 帮助程序进程获取所需的所有数据。使用obj.hits > 0检查这是否是缓存命中。

如果你真的需要内联(并且慢慢减慢所有缓存命中速度),那么你 可以使用libvmod-curl

https://github.com/varnish/libvmod-curl

答案 1 :(得分:1)

如果您要从vcl中向stats服务器发送请求,我会尝试合并某种类型的聚合请求,每隔100(或其他)请求发送一次请求,而不是每个传入请求。

与其他答案一样,我建议将varnishncsa(或varnishlog)与尾随日志文件的进程一起使用。该方法可能有一些延迟,但如果可以接受,那么我会考虑在logrotated运行时对varnish日志进行后处理。通过这种方式,您可以获得一整天的数据,并且可以通过它来生成任何报告。