2

我正在寻找在发送日志时无需让生产者连接到任何服务器的最快方法来记录消息。最好的情况是将消息记录到非常快速的本地(内存,本地消息队列)然后退出。然后一个单独的进程将其出列并将其发送给实际的消费者(可能具有持久连接)。这有助于通过防止额外的连接来降低生产者进程(例如 Web 服务器句柄)的处理速度。

使用 PHP 的 RabitMQ 会引起我的兴趣吗?

4

3 回答 3

1

Logstash ( http://www.logstash.net/ ) 在您选择的本地日志文件上设置侦听器,然后通过 AMQP(RabbitMQ,我上次在 2012 年检查)将它们作为消息发送到您选择的中央日志存储/数据库(比如说,一个 mongoDB 实例)。

您可以自定义 Logstash 侦听器,以便在将日志文件发送到队列代理之前,仅从日志文件中过滤掉某些有趣的日志消息类型/代码。

之后,您可以将 Graylog2 ( http://graylog2.org/ ) 设置为一个有用的界面,用于读取、排序和过滤源自所有服务器的日志,按时间顺序组织在一个视图中(假设您的服务器时间足够同步)。

于 2013-04-13T20:13:04.457 回答
0

正如@robthewolf 在他的评论中指出的那样,连接到消息队列是一个额外的连接,无论是否在本地。另外,我不确定您所说的“处理”到底是什么意思(格式化消息?显示日志?)。

根据您的描述,我认为您应该研究Graylog。您可以将Monolog与Gelf -PHP一起使用,通过 AMQP 将您的日志消息发送到您的 Graylog-Server。

于 2012-05-22T12:08:14.717 回答
0

你提出的解决方案会奏效。但是消息很有可能会在内存队列中堆积,因为实际连接到消息服务器的生产者可能无法将消息发送到消息服务器,因为日志将以更快的速度放入内存队列。

于 2012-05-24T05:12:22.553 回答