我需要将varnishncsa
日志拆分为基于虚拟主机的单独文件。
我知道我可以进行覆盖配置,以/etc/systemd/system/varnishncsa.service.d
过滤特定的虚拟主机。
像这样的 somedomain.conf:
[Service]
RuntimeDirectory=varnishncsa
Type=forking
User=varnishlog
Group=varnish
ExecStart=
ExecStart=/usr/bin/varnishncsa -q "ReqHeader ~ '^Host: somedomain.com'" -D -a -w /var/log/varnish/somedomain.log -P /run/varnishncsa/varnishncsa.pid -F '%%{X-Forwarded-For}i %%l %%u %%t "%%r" %%s %%b "%%{Referer}i" "%%{User-agent}i"'
ExecReload=/bin/kill -HUP $MAINPID
PrivateDevices=true
PrivateNetwork=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
PIDFile=/run/varnishncsa/varnishncsa.pid
但是我怎样才能让它为每个虚拟主机生成一个单独的日志文件呢?
我想将这些每个域日志输入 awstats。
答案1
我见过的方法给你留下了两个选择。 1 是将所有内容记录到一个文件中,然后使用 varnishlog 解析日志以仅查看您感兴趣的虚拟主机。有关此工具的更多信息请参见此处 -https://varnish-cache.org/docs/trunk/reference/varnishlog.html。
要将日志拆分为显式文件,您必须运行多个varnishncsa
守护程序。该方法在该博客中显示,标题为:如何分割虚拟主机的 Varnish 日志。
例如:
清漆3.xvarnishncsa -m "RxHeader:^Host: linuxaria.com$" -a -w /var/log/varnish/linuxaria.com.access_log -D
varnishncsa -m "RxHeader:^Host: linuxaria.org$" -a -w /var/log/varnish/linuxaria.org.access_log -D
清漆 4.x
varnishncsa -q "ReqHeader ~ '^Host: .*\.example1.com'"
varnishncsa -q "ReqHeader ~ '^Host: .*\.example2.com'"
您需要将其设置为个性化的 systemd 单元文件,每个虚拟主机一个。笔记:该方法也在这篇标题为:的博客文章中进行了讨论:[tips]varnishncsa为每个主机保存分割日志。
你的例子
因此,对于每个单元文件(每个虚拟主机 1 个),您可以像这样添加 exec 行:
单元文件#1ExecStart=/usr/bin/varnishncsa -q "ReqHeader ~ '^Host: somedomain1.com'" -D -a -w /var/log/varnish/somedomain1.log -P /run/varnishncsa/varnishncsa_vhost1.pid -F '%%{X-Forwarded-For}i %%l %%u %%t "%%r" %%s %%b "%%{Referer}i" "%%{User-agent}i"'
单元文件#2
ExecStart=/usr/bin/varnishncsa -q "ReqHeader ~ '^Host: somedomain2.com'" -D -a -w /var/log/varnish/somedomain2.log -P /run/varnishncsa/varnishncsa_vhost2.pid -F '%%{X-Forwarded-For}i %%l %%u %%t "%%r" %%s %%b "%%{Referer}i" "%%{User-agent}i"'