我有一台专用于 awstats 的 Linux 服务器。该服务器托管 awstats 应用程序,并为部署在我基础设施中的多个 Web 服务器托管的多个网站生成/发布统计数据。
为了完成这项工作,目前每个 Web 服务器都通过 NFS 导出其 web-access-logs 目录,而 awstats 服务器则以只读方式挂载它们。这样,一切都运行正常,awstats 可以读取所有服务器日志。
此解决方案的主要问题是,每当我关闭/打开 Web 服务器时,我都必须重新配置 NFS 挂载和 awstats 服务器内的 Awstats 配置。考虑到我有一个动态环境(私有云),根据 Web 服务器的负载,我必须在一天内多次关闭和打开 Web 服务器。
您是否知道我可以应用于 awstats 的任何其他可能的智能配置以满足此需求而不必每次都重新配置它?
非常感谢。
答案1
当我在 AWS 或类似的云中执行类似操作时,我会autofs
挂载日志目录。这意味着日志目录是按需挂载的,即直到需要时才挂载,之后不久就会卸载。这还意味着访问映射到宕机服务器的目录需要短暂等待,然后返回空目录,而不是长时间的 NFS 挂起。
然后,我维护一个当前正在轮询的服务器的单一、集中列表,以便日志作业不会轮询已关闭的服务器,甚至不必等待autofs
;但这只是一种改进。
答案2
另一种方法是配置 Web 服务器,使其通过 syslog 将其访问日志传输到您的 awstats 服务器。
这意味着当您启动和关闭 Web 服务器时,对 awstats 配置无需进行任何配置更改。
在 Apache Web 服务器上你现在可能会有类似这样的内容:
ErrorLog "/var/log/www/error.log"
CustomLog "/var/log/www/access.log" combined
用管道替换它们logger
(将 stdin 转换为 syslog 消息的标准实用程序),并可选择tee
复制日志消息,以便现有的日志文件也将被维护:
ErrorLog "|/bin/sh -c '/usr/bin/tee -a /var/log/www/error.log | /usr/bin/logger -thttpd -plocal6'"
CustomLog "|/usr/bin/logger -thttpd -plocal7" combined
然后指示每个 Web 服务器上的 syslog 守护程序将日志文件发送到您的 awstats 服务器:
# syslog.conf
local6.* @192.168.0.1
local7.* @192.168.0.1
可以收集并存储传入消息以供 awstats 进一步处理的地方。
如果你有多个不同的虚拟主机,你可能需要添加一个LogFormat
指令还记录了VirtualHost:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-with-vhost
并使用
CustomLog "|/usr/bin/logger -thttpd -plocal7" combined-with-vhost
然后,您可以对每个 VirtualHost 进行一些预处理,并将记录拆分到它自己的日志文件中,或者更改您的awstats 配置处理这些记录%virtualname
并创建正确的统计数据。