我有一个多层应用程序,由不同子网上的许多服务器组成(每个子网都专用于它们提供的应用程序目的,没有其他独立于应用程序的服务器)。这些服务器是 Windows、Debian、FreeBSD,将来可能还会有其他服务器。
我想为我的系统建立一个集中式日志记录机制。问题是我想先将数据收集到 DMZ,然后由位于不同本地网络子网上的日志服务器访问。
我还需要记录我的网络设备,但就我所关心的而言,这可能是一个完全不同的日志服务器(尽管如果不是这种情况会更好)。
您将如何实现这种类型的日志记录?出于安全目的,架构像这样分层,并且不会改变。
我已经将 Scribe 和 Logstash 视为可行的解决方案。您会推荐它们来完成前面所述的任务吗?
使用ssh机制实现脚本是可行的方法吗?
答案1
你可以使用任何现代系统日志服务器来执行此操作(我的建议是syslog-ng
因为我熟悉它,但是rsyslog
是另一种选择)。
几乎每个系统都以某种方式支持 syslog(我使用过的每个专业级路由器/交换机都支持,Unix 机器也支持,我相信 Windows 甚至可以将事件日志消息发送到 syslog 服务器),这使它成为一个非常好的选择。
syslog 协议传统上是不安全的 UDP 数据报,但现代 syslog 服务器具有 TCP 支持,而且我知道syslog-ng
也支持 SSL/TLS。
至于如何收集日志数据,实施策略各不相同。
一个选项是简单地允许所有主机连接到 syslog 服务器并让它们将日志消息发送到那里。这相对简单,但可能不太安全(您需要打很多防火墙漏洞,或者允许整个宇宙与您的日志服务器通信)。
另一个选项是本地日志聚合器,它会转发到中央日志服务器(类似于您在问题中描述的架构)。这通常被认为是更好的选择,主要有两个原因:
更容易确保安全
中央日志服务器只需要接受来自“授权”客户端的连接,而本地日志服务器只需要接受来自其本地网络的连接。它为您提供一些冗余
如果中央日志服务器因维护而停机,您仍会在本地服务器上收集日志,并且当中央服务器再次可用时,可以转发这些日志。