如何在 varnish 中调试 VCL?

Posted

技术标签:

【中文标题】如何在 varnish 中调试 VCL?【英文标题】:How to debug VCL in varnish? 【发布时间】:2012-09-16 13:47:53 【问题描述】:

如何在 VCL 中print a log

我可以在屏幕上打印日志信息吗?

我可以这样做吗?

sub vcl_recv 
  ....
  log.info(req.http.host); // can i write a log here?
  ....

【问题讨论】:

检查您是否要求varnishd -Cf file_name 【参考方案1】:

您可以看到带有请求的 URL 的 URL varnishlog 实用程序(它能够写入日志文件)

varnishlog -i RxURL

或者使用 Varnish 3.x https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html#syslog Varnish 5.1 https://varnish-cache.org/docs/5.1/reference/vmod_std.generated.html#func-syslog

的 vmod std 和 syslog 函数将一些信息输出到 syslog

例子:

import std;

sub vcl_recv 
  ...
  std.syslog(180, "RECV: " + req.http.host + req.url);
  ...

或者在 Varnish 2.x 上使用 C-sn-p https://www.varnish-cache.org/trac/wiki/VCLExampleSyslog

【讨论】:

VCC-compiler failed:Message from VCC-compiler: Expected an action, 'if', '' or '' ('input' Line 49 Pos 9) std.syslog(180, " RECV: " + req.http.host + req.url); 好的,是的,我们忘记导入 std vmod 函数了:import std; varnish-cache.org/docs/3.0/reference/vmod.html 谢谢。我可以在文件 /var/log/syslog 中看到日志。 添加注释以供以后编辑:varnish vmod_std 3.0 at varnish-cache.org/docs/3.0/reference/vmod_std.html#syslog 和 4.0 at varnish-cache.org/docs/4.0/reference/…【参考方案2】:

使用vcl config file,导入额外包含的“标准库”,其中包括一堆实用函数:

import std;

# To 'varnishlog'
std.log("varnish log info:" + req.host);

# To syslog
std.syslog( LOG_USER|LOG_ALERT, "There is serious trouble");

v6.x - https://varnish-cache.org/docs/6.0/reference/vmod_generated.html#void-log-string-s

v5.x - https://varnish-cache.org/docs/5.0/reference/vmod_std.generated.html?#func-log

v4.x - https://varnish-cache.org/docs/4.0/reference/vmod_std.generated.html?#func-log

v3.x - https://varnish-cache.org/docs/3.0/reference/vmod_std.html#log

另见man varnishlog

【讨论】:

以上是关于如何在 varnish 中调试 VCL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Varnish 配置中注入环境变量

Varnish的VCL

VARNISH 5 的改进

varnish状态引擎1

varnish介绍

Linux 缓存服务varnish