该插件将所有跟踪请求写入一个复述,实例或MySQL队列,而不是直接进入数据库。如果你每秒有太多的请求,而你的服务器不能直接处理它们(例如nginx或MySQL中有太多的连接),这是很有用的。如果你有时遇到高峰,它也很有用。使用这个队列可以更好地处理这些峰值。与常规跟踪请求(需要数百毫秒)相比,将跟踪请求写入队列非常快(跟踪请求总共需要几毫秒)。队列确保在可能的情况下处理跟踪请求,即使在达到峰值后需要一段时间才能处理所有请求。

请查看FAQ以获取更多信息。


查看并下载特定Matomo版本的插件:

这个插件的要求是什么?

我们推荐在Redis中使用这个插件,但是使用MySQL数据库也可以很好地工作,反正Matomo已经在使用MySQL数据库了。

我可以在哪里配置和启用队列?

在你的Piwik实例中,转到“Administration => General Settings”。这个插件有一个配置部分。

何时处理排队的跟踪请求?

首先,您应该知道将使用多个跟踪请求同时插入到数据库中批量跟踪一旦可配置数量的请求进入队列。默认情况下,我们将检查在常规跟踪请求期间是否有足够的请求排队,并在向浏览器发送响应后立即开始处理它们,以确保用户不必等待队列完成处理所有请求。看看这张图,看看它是如何工作的:

它是如何工作的

我不想在跟踪请求中处理排队请求,我该怎么办?

不必担心,如果此解决方案由于某种原因不适合您,您可以禁用它并使用Piwik控制台.只需遵循以下步骤:

  • 禁用Piwik UI中“Settings => Plugin Settings”下的“Process during tracking request”设置
  • 设置一个cronjob来执行命令。/控制台queuedtracking:过程比如每一分钟
  • 就是这样

queuedtracking:过程命令将确保尽可能处理所有排队的跟踪请求,一旦没有足够的请求排队,该命令将退出。这就是为什么你应该设置一个cronjob来每分钟启动命令,因为一旦有足够的请求,它就会重新开始处理。注意,多次启动此命令不会加快处理排队请求的速度。实际上一次只有一个进程会重放排队的请求。

示例crontab条目,每分钟启动一次处理器:

* * * * * CD /piwik && ./console queuedtracking:process >/dev/null 2>&1

我可以跟踪队列的状态吗?

是的,你可以。只需执行命令。/控制台queuedtracking:班长.这将显示队列的当前状态。例如,要退出此命令,您可以按CTRL + c同时按键。

我可以提高从Redis队列插入请求到数据库的速度吗?

是的,你可以通过增加更多的工人。默认情况下,一次只有一个worker被激活,并且只有一个worker处理从Redis到数据库的跟踪请求。在向数据库中插入跟踪请求时,在编写本文时,大约80%的时间花在PHP上,数据库可能相当无聊。如果您的服务器上有多个可用cpu,您可以添加更多的worker。你可以通过进入Piwik管理界面的“插件设置”来实现。将有一个设置“队列工作者的数量”。将此数量增加到您希望专用于处理请求的cpu数量。最好的做法是逐步增加更多的工人。因此,首先将这个数字增加到2,并检查跟踪请求插入是否足够快。如果没有,并且有更多可用的cpu,请再次增加cpu的数量。

当使用多个worker时,可能有必要将“处理请求的数量”降低到“插件设置”中的15。默认情况下,使用事务在一步中插入25个请求。这意味着不同的工人可能不得不互相等待。通过降低这个数字,每个工人阻塞DB的时间就会减少。

如果从命令行通过。/控制台queuedtracking:过程确保总是有足够的工人开工。每次执行这个命令,都会启动一个worker。如果已经有足够的worker在进程中,则不会启动新的worker,命令会立即结束。

从Redis插入到数据库的请求有多快?

这在很大程度上取决于您的设置和硬件。使用快速的cpu,您可以在1个工人时达到250req/s,在2个工人时达到400req/s,在8个工人时达到1500req/s(在AWS c3上测试)。x2large实例)。

如何配置redis服务器?

确保有足够的内存保存队列中的所有跟踪请求。队列中的一个跟踪请求大约需要2KB, 20.000个跟踪请求大约需要50MB。所有网站的所有跟踪请求都存储在同一个队列中。应该只有一个Redis服务器,以确保数据将以相同的顺序回放,因为他们被记录。如果你想配置Redis HA(高可用性),可以使用Redis Sentinel,见下文。我们目前默认写入Redis默认数据库,但你可以配置使用不同的数据库。

为什么本地Piwik实例上的某些测试失败?

确保满足上面提到的要求,并且Redis需要在127.0.0.1:6379上运行,没有密码才能进行集成测试。它将使用数据库“15”,测试可能会刷新其中包含的所有数据。确保它不包含任何重要数据。

如果我想禁用队列怎么办?

您可能希望在某些时候禁用队列,但队列中仍有一些未处理的请求。我们建议将插件设置中的“Number of requests to process”更改为“1”,并使用该命令处理所有请求。/控制台queuedtracking:过程在禁用队列之前不久,之后直接禁用。一旦队列被禁用,仍然可以处理剩余的请求,但是新的跟踪请求不会被写入队列。

如何访问排队的数据?

复述,您可以通过命令行访问数据redis-cli或者使用Redis监视器phpRedisAdmin.如果你正在使用像Redis监视器这样的东西,请确保它不是每个人都可以访问的。

MySQL在常规Matomo DB中包含一些DB表queuedtracking_list_ *.例如,根据您的DB前缀,表的名称可能是matomo_queuedtracking_list_ *.锁存储在queuedtracking_queue

处理器不会再次开始处理,因为它认为另一个处理器已经在处理数据,我能做什么?

首先确保实际上没有处理器在处理任何请求。例如,通过执行命令。/控制台queuedtracking:班长.如果您使用命令行来处理跟踪请求,请确保没有使用Linux命令运行的处理器ps.如果您确定没有进程正在运行,您可以通过执行该命令释放锁。/控制台queuedtracking: lock-status.这将输出更多信息,哪些锁正在使用,以及如何解锁它们。之后,一切都将恢复正常。实际上,您不应该这样做,因为锁会在一段时间后自动过期。这可能需要一段时间,这取决于您导入的请求数量。

我如何测试我的Redis / MySQL / QueuedTracking设置,以防我得到错误?

这里有一个命令来测试一些连接到Redis以及一些需要的功能:。/控制台queuedtracking:测试

如果出现错误,它可能会直接给您一个错误消息,帮助您解决问题。如果您的队列总是被锁定,您可能同样对执行感兴趣.console queuedtracking: lock-status

我如何调试以防出现错误?

  • 使用命令。/控制台queuedtracking:班长查看所有工作者的当前状态
  • 使用命令。/控制台queuedtracking: lock-status查看所有锁的当前状态
  • 设置选项-vvv当通过./console queuedtracking:process -vvv为此运行启用跟踪器调试模式。这将把详细信息打印到屏幕上。
  • 中启用跟踪器调试模式config.ini.php通过跟踪调试= 1是否启用跟踪期间处理请求。
  • 使用命令。/控制台queuedtracking: print-queued-requests查看每个队列中要处理的下一个请求。如果在1-10分钟内执行此命令两次,并且输出相同,则队列没有被处理,这很可能表明存在问题。
  • 您可以添加跟踪参数&queuedtracking = 0将跟踪请求直接插入到数据库中,而不是插入到排队的跟踪处理程序中

我正在使用日志导入器与队列跟踪相结合,有什么需要考虑的吗?

是的,我们建议将“要处理的请求数量”设置为1由于日志导入器通常使用批量跟踪一次性发送多个请求。

如何配置QueuedTracking插件来使用Redis Sentinel?

您可以在插件设置中启用哨兵。确保指定了正确的Sentinel“主”名称。

当使用Sentinel时,phpredis扩展是不需要的,因为它使用一个PHP类连接到你的Redis。请注意,调用Redis可能会有点慢。

我可以配置多个哨兵服务器吗?

是的,一旦Sentinel被启用,您可以通过指定多个主机和端口来配置多个服务器,通过UI以逗号分隔。

当队列达到某个阈值时,是否可以通知我?

是的,当单个队列中排队的请求数量达到配置的阈值时,您可以选择接收电子邮件。您可以在您的配置/ config.ini.php配置文件使用以下配置:

[QueuedTracking] notify_queue_threshold_email [] = example@example.org notify_queue_threshold_single_queue = 250000

有什么已知的问题吗?

  • 如果您正在使用批量跟踪,批量跟踪响应与常规跟踪响应相比有所不同。我们总是返回一个图像或者204 HTTP响应码send_image = 0被发送。
  • 通过设计,这个插件可以延迟跟踪请求的插入,导致实时插件不显示实际数据,因为在负载下跟踪请求可能需要一段时间,直到它们被重放。
  • 设置

查看并下载特定Matomo版本的插件:


请分享

Baidu