我正在寻找在发送日志时无需让生产者连接到任何服务器的最快方法来记录消息。最好的情况是将消息记录到非常快速的本地(内存,本地消息队列)然后退出。然后一个单独的进程将其出列并将其发送给实际的消费者(可能具有持久连接)。这有助于通过防止额外的连接来降低生产者进程(例如 Web 服务器句柄)的处理速度。
使用 PHP 的 RabitMQ 会引起我的兴趣吗?
我正在寻找在发送日志时无需让生产者连接到任何服务器的最快方法来记录消息。最好的情况是将消息记录到非常快速的本地(内存,本地消息队列)然后退出。然后一个单独的进程将其出列并将其发送给实际的消费者(可能具有持久连接)。这有助于通过防止额外的连接来降低生产者进程(例如 Web 服务器句柄)的处理速度。
使用 PHP 的 RabitMQ 会引起我的兴趣吗?
Logstash ( http://www.logstash.net/ ) 在您选择的本地日志文件上设置侦听器,然后通过 AMQP(RabbitMQ,我上次在 2012 年检查)将它们作为消息发送到您选择的中央日志存储/数据库(比如说,一个 mongoDB 实例)。
您可以自定义 Logstash 侦听器,以便在将日志文件发送到队列代理之前,仅从日志文件中过滤掉某些有趣的日志消息类型/代码。
之后,您可以将 Graylog2 ( http://graylog2.org/ ) 设置为一个有用的界面,用于读取、排序和过滤源自所有服务器的日志,按时间顺序组织在一个视图中(假设您的服务器时间足够同步)。
你提出的解决方案会奏效。但是消息很有可能会在内存队列中堆积,因为实际连接到消息服务器的生产者可能无法将消息发送到消息服务器,因为日志将以更快的速度放入内存队列。