我们有一个三服务器配置,每个服务器运行nginx,rails通过Mongrel运行。每个rails安装都有自己的日志文件集,在它自己的“log”文件夹中,它只是服务器上的一个常规文件夹。我感兴趣的日志文件是<RAILS APP>/log/production.log
任何访问站点的请求都会随机发送到三台服务器中的任何一台,因此日志记录可以在这三条日志中的任何一条上进行:实际上,每个日志文件都有站点上三分之一请求的日志输出。
有时,我需要在日志中查找一个特定的请求,看看它是如何处理的,而且我总是必须以更少的方式打开所有这三个请求,并搜索我的请求,这有点像一个皮塔。更好的办法是有一个合并了这三个日志文件的日志文件。
现在,您可能会想“将它们全部放在一个共享文件夹中,只有一个日志文件”。但是,我们不想这样做,因为我们担心效率会受到影响:我们确实在某些事情上使用了共享的tmp文件夹,但是它有点慢,我们不想让所有的日志记录都通过http (如果我们使用共享文件夹会发生什么)。所以,这不是一个选择。
还有其他建议吗?我正在考虑一个cron任务,比如每分钟运行一次,将日志从服务器1、2和3复制到同一个位置,并以一种巧妙的方式将它们组合起来,这样日志中的行的排序是相同的,就好像所有三个服务器一开始都写到同一个日志一样。
谢谢,麦克斯
编辑-示例日志文件输出如下所示:
Feb 06 13:15:31 ec2-rails rails[21419]: ESC[4;36;1mUser Update (3.3ms)ESC[0m ESC[0;1mUPDATE `users` SET `custom_signup_fields` = NULL, `all_license_sku_ids` = '--- \n- 1\n',
`rank_criteria` = '--- \n:has_attached_a_doc_to_a_lesson?: false\n:has_downloaded_a_premade_lesson?: false\n:has_logged_into_lesson_viewer?: false\n:has_downloaded_a_custom_l
esson?: false\n:has_logged_in?: true\n:has_created_pupil_access?: false\n:has_created_a_lesson?: false\n:has_favorited_a_lesson?: false\n:has_viewed_pupil_usage_data?: false\n
:has_viewed_a_lesson?: true\n', `preferences` = '--- \n/: \n current-scheme-step: 5931\n current_product_id: 21\n' WHERE `id` = 52331ESC[0m
Feb 06 13:15:31 ec2-rails rails[21779]: ESC[4;36;1mInstrumentFamily Load (2.6ms)ESC[0m ESC[0;1mSELECT `instrument_families`.id FROM `instrument_families` INNER JOIN users_in
strument_families ON instrument_families.id = users_instrument_families.instrument_family_id WHERE ((`users_instrument_families`.user_id = 51668)) ESC[0m
Feb 06 13:15:31 ec2-rails rails[21419]: ferret_create/update: User : 52331
Feb 06 13:15:31 ec2-rails rails[21419]: creating doc for class: User, id: 52331这里要注意的是方括号中的数字--这是运行rails的杂种的pid --每个服务器上有16个。
发布于 2015-02-06 12:49:19
虽然我知道你正在寻找一种快速的方法来获取3个日志文件.“合并”在某种程度上,你最好用一个日志服务器来设置你自己,用你的日志做更酷的事情。正如您所述,您希望在日志中检查内容,中心日志服务器没有问题。
日志还可以监视您的服务器运行情况。
我使用Graylog2,它很圆滑,使用简单,搜索非常有效。(Graylog2是一种免费的、开源的替代方案。)
这将接受来自您的服务器的日志推送,您将很容易地看到请求。(他们甚至有一个简单的安装脚本!)
如果您仍然希望执行您最初的建议,那么我建议您每分钟在时间戳上使用排序。(只要你有时间戳!)
发布于 2015-02-06 12:49:32
在许多集群环境中,您(另外)使用syslog将日志消息发送到日志服务器。
syslog将按照消息到达和预置的顺序集成消息流。
如果服务本机不支持syslog作为日志记录协议,则可以将其输送到logger程序。
发布于 2015-02-06 12:43:01
您能在文件收集的中央文件夹上使用这样的东西吗?还是太重了?
cat *.log | sort | less或
cat *.log | sort > combined.log(使用排序将它们按时间戳排序)
或者也许:尾多个远程文件
https://serverfault.com/questions/665547
复制相似问题