我的公司没有开发运维人员,而我是开发人员,所以我几乎不知道开发运维的最佳实践,因为我是新手,所以请原谅我的任何错误。
我有两台 Ubuntu 机器。他们每个人都有一个完全相同的网络服务器,因此他们提供访问日志。他们都在 Rails Web 服务器上运行 ruby 并使用 nginx。
问题: 现在我需要一个公共位置来查看访问日志和 Web 应用程序日志。文件缓存当然应该对两个 Web 服务器都是通用的。
为此我必须提出这个解决方案:拥有一个单独的服务器,用于使用 NFS 存储缓存和日志。因此,两个 Web 服务器都将充当客户端,并将日志和缓存存储在 NFS 服务器中。
我也听说过GFS。
现在缓存几乎不会每小时写入一次或类似的东西,但日志每秒都会写入。
所以我想知道我应该用什么来解决这个问题? NFS 或 GFS 或两者兼而有之?哪个会给我最好的表现?有人说使用 GFS,因为我在互联网上研究了很多,但我想知道为什么在我的情况下 GFS 比 NFS 更好?
答案1
如果您想将日志从两台服务器发送到第三台服务器,我建议您使用 syslog 协议(也是由@satō-katsura 提出的),并将 rsyslog 打包在您的 ubuntu 安装中。您可以通过谷歌搜索“apache syslog”找到信息。
首先将 apache 日志重定向到 apache 虚拟主机配置中的 syslog,例如:
ErrorLog "|/usr/bin/tee -a /var/log/www/error.log | /usr/bin/logger -t apache -plocal6.err"
CustomLog "|/usr/bin/tee -a /var/log/www/access.log | /usr/bin/logger -t apache -plocal6.info"
</virtualhost>
其中 local6 是设施,err 和 info 是日志级别。
然后通过rsyslog配置将其发送到第三个:
local6.* @<ip_dest>
其中ip_dest是记录机器的ip
现在您应该收到第三个日志,您可以在这个日志上制定一条规则将这些日志重定向到文件:
# process remote messages
if $fromhost-ip == '<ip_host1>' or $fromhost-ip == '<ip_host2>' then {
action(type="omfile" file="/var/log/apachecluster.log")
stop
}
这应该可以解决问题,您将拥有一个名为 apachecluster.log 的集中式日志,但请注意,您也可以使用日志记录工具来处理多台计算机上的日志,例如 Splunk
关于缓存,您不希望网络上有一些共享缓存,您需要使用具有一些缓存并且会记录访问等的代理。正如您在评论中所说,您使用谷歌云进行负载平衡,它提供了一些缓存能力。否则,只需处理 apache 主机的本地缓存,您希望缓存在您的 RAM 中,而不是在远程第三台计算机的硬盘驱动器中。
玩得开心