我希望你能帮忙
我有一个可以动态生成图像的图像服务器。 我正在使用清漆来缓存生成的图像。
我需要记录清漆收到的请求数量(每个图像)以及是否是命中或未命中(传递被标记为未命中)。目前,我正在编写带有命中/未命中文件的访问日志,然后我使用crontab处理此访问日志文件并将数据写入我的数据库......
我想做的是:
让Varnish向我的后端发出请求,通知它有一个缓存命中(如果可能的话,还有响应大小(字节))。 我的后端可以保存这些数据......
这一切都可能吗?如果是这样的话?
如果有人对此感兴趣:
以下是每天:
答案 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日志进行后处理。通过这种方式,您可以获得一整天的数据,并且可以通过它来生成任何报告。