概括
如何使用远程管理工具(puppet 或 chef)结合同步工具(例如 rsync)和调度程序(cron)将日志文件从多个服务器发送到中央服务器?
语境
我们的系统管理员(正确地)收紧了开发人员对生产服务器的访问权限。结果之一是:在支持客户问题时,开发人员将无法再轻松访问日志文件。
目标:将文件发送到通用日志服务器
我想设置将日志自动复制到中央“日志服务器”的功能。开发人员/支持人员在支持问题时将拥有对“日志服务器”文件系统的读取权限。
以下是我们的文件系统结构示例。每个客户一个目录。其中,每个应用程序一个目录。每个应用程序都有不同的子目录结构和日志文件名。
Server A
d:/
Instances/
CustomerFoo
App 101/
logs
server.log
access.log
App 201/
logs
stdout.log
jdbc.log
timing.log
CustomerBar/
App 101/
....
App 301/
logs/
monitor.log
这些将会发送到具有如下结构的中央服务器。(客户名称在企业内是唯一的,因此我们不会发生任何冲突)
LogServer
d:/
logfiles/
CustomerFoo
App 101/
logs/
App 201/
logs/
...
CustomerBar/
App 101/
....
App 301/
logs/
期望的结果
- 我想要结合使用远程管理工具(puppet 或 chef)与同步工具(rsync)和调度程序(cron)来进行定期同步
- 轻松实现多个机器的远程管理。例如,在一个地方编辑“配置文件”,然后将其推送到所有服务器。
环境
- Windows 服务器 2008
- Windows 商店。但是可以安装 cygwin。
- 我个人熟悉 rsync 和 cron,但不熟悉 puppet 和 chef。仅供参考。
提前致谢!
答案1
我建议使用 syslog。它是你想要的标准。
您的应用程序需要能够使用 syslog,最好是使用远程 syslog 服务器。看起来您使用的是 Java?希望您使用的是 Log4J,因为它会使用 syslog。然后将它们指向您的 syslog 服务器。Windows 有可用的商业和免费 syslog 服务器。
或者,您可以将应用程序中的所有内容写入 Windows 事件日志,然后使用事件日志订阅/收集将它们发送到您被允许访问的另一台 Windows 机器。
您会发现,当您有多个节点时,仅使用纯文本日志执行此操作很难管理。当然,您可以只请求对日志当前所在目录的只读访问权限。