集中记录 - 首先写入本地文件



i有一个服务器API,该服务器具有一些应用程序实例和一个Worker实例。当前,应用程序将一些数据发送到Loggly(SaaS集中伐木服务)。这是很好的开始,但是我开始考虑使用一些开源软件创建设置。

此外,使用loggly我的最大问题的当前成本是:在请求结束时连接到loggly来记录数据,正在为请求增加时间。

我一直在阅读一些有关LogStash,Graphite,Elasticsearch等,并与Logrotate一起阅读,一些消息来源似乎建议写入每个服务器上的本地文件,然后在求解时,将它们发送到Logstash

我很好奇什么实践人们在集中伐木方案中最有效。我应该先写下每个服务器上的本地文件吗?还是将每个框放到"状态"中,而是,我是否应该直接从logStash或sqs上发送数据,以通过集中式服务器处理?

在集中记录方案方面,紧密耦合您的日志生产商与logstash之间存在实现差异。对于非常大的规模,应避免使用紧密耦合。紧密的耦合正在创建生产者和接收器之间的插座,以传输事件,如果接收器慢,则可以在生产者侧面产生滞后。

松散的耦合可以采用多种方法:

  • 队列介绍,通过SQS,Redis,Kafka,AQMP等
  • 文件介绍,通过文件。

我知道所有人都在集中式层中使用某种形式的队列调解。

也就是说,在边缘,用例不同。如果您需要避免写入文件以减少I/O,则使用TCP或UDP插座传输到本地安装的LogStash(然后将事件寄到中央队列)可能很快。

使用LogStash的集中记录可以采用多种形式。如果您可以在日志产生的节点上安装LogStash,这是一个非常有效的体系结构:

  • 生产节点上安装的logstash。
    • 该实例被配置为收听用于应用程序的TCP端口,以及一些用于系统记录的文件。
  • 实例 - 洛斯塔什将事件发货到sqs。
  • 一个解析器的舰队实例将工作从SQ撤职并处理它们,输出到任何地方。

在此体系结构中,所有过滤逻辑都放在解析器中,使实例 - 静态施加不过是托运人。最好的部分是,可以按负载认股权证上下缩放解析器层。这可以使实例范围保持最少的内存足迹,因此它不会与资源应用程序竞争。

由于Logstash具有loggly插件,如果您愿意,您仍然可以在此处馈送数据。

文件与直接连接

最好通过回答几个问题来决定这两个:

  • 如果我直接通过TCP套接字直接连接,如果5分钟内无法使用日志接收器,我的应用程序会发生什么?
  • 我的实例对存储I/O?
  • 有多敏感

文件是实例上松动耦合的一种方法。如果您对第一个问题的回答是暂停直到日志接收器返回,您可能不希望那种紧密的耦合。在这种情况下,日志文件是提供缓冲区的一种方式。如果对您很重要的话,可以在实例中生存的缓冲区。

它在实例上保持状态。但是,这应该是非常短暂的状态。日志托运人应足够快地将状态转换为中央队列系统,以使您保持不超过几秒钟。

如果您对存储I/O非常敏感,并且对TCP状态也非常敏感,则仍然可以排队至某个点。安装当地的Redis实例,将您的应用程序船送到其中,然后将LogStash从那里拉到并运送到中央队列。这使该应用程序可以从中央的队列活动中进行缓冲。但是,在某些情况下,如果可以将应用程序配置为这样做,则最好直接运送到中央队列。

最新更新