pmg/queue-cloudwatch

使用CloudWatch指标跟踪您的队列

v6.0.0 2023-01-12 16:30 UTC

This package is auto-updated.

Last update: 2024-09-05 17:16:53 UTC


README

A pmg/queue driver decorator that dispatches cloudwatch metrics when messages are sent through.

示例

use AWS\CloudWatch\CloudWatchClient;
use PMG\Queue\Driver;
use PMG\Queue\CloudWatch\MetricsDriver;

/** @var Driver $driver */
$driver = createAnActualDriverSomehow();

// this is the default metric namespace, change if desired.
$metricNamespace = 'PMG/Queue';
$finalDriver = new MetricsDriver($driver, CloudWatchClient::factory([
    'region' => 'us-east-1',
    'version' => 'latest',
]), $metricNamespace);

// now use $finalDriver in your consumers/producers

指标

所有指标都有维度...

  • QueueName - 指标所属队列的名称
  • MessageName - 从 Message::getName 返回的值。当消息不存在于日志中时,此维度将被设置为 __none__

驱动器指标

  • DriverError - 当包装的驱动器抛出 DriverError 异常时触发的 Count 指标单位。这将有一个包含抛出异常的类名的 ErrorClass 维度。

消息计数

每个驱动器上的方法都有一个指标,基本上。它们都使用 Count 作为指标单位。

  • MessageEnqueue - 在 Driver::enqueue 时触发
  • MessageDequeue - 在 Driver::dequeue 时触发。这仅在从包装的 Driver::dequeue 返回消息时触发。
  • MessageSuccess - 在 Driver::ack 时触发
  • MessageFailure - 在 Driver::fail 时触发
  • MessageRetry - 在 Driver::retry 时触发
  • MessageRelease - 在 Driver::release 时触发

您可以使用这些消息计数来对高失败或重试消息量进行警报。

消息计时器

指标驱动器将跟踪从出队到确认、失败或重试的作业时间。这些都使用 Milliseconds 作为它们的指标单位。

  • MessageTime - 消息花费的时间,无论消息如何结束都会跟踪。

MessageTime 指标将有一个额外的名为 MessageStatus 的维度,表示计时器完成时给定消息的结束方式。这将

  • Success 当消息传递给 Driver::ack
  • Failure 当消息传递给 Driver::fail
  • Retry 当消息传递给 Driver::retry
  • Release 当消息传递给 Driver::release

错误处理

首先,包装的驱动器总是首先调用。如果包装的驱动器发生错误,则会在记录任何进一步指标之前跟踪并重新抛出。这里的想法是,驱动器错误使任何作用于消息的过程无效。

云监控客户端的错误将被捕获并记录。如果您希望看到这些错误,可以将第四个 $logger 参数传递给 MetricsDriver,但默认情况下使用 NullLogger

use AWS\CloudWatch\CloudWatchClient;
use PMG\Queue\Driver;
use PMG\Queue\CloudWatch\MetricsDriver;

/** @var Driver $driver */
$driver = createAnActualDriverSomehow();

// this is the default metric namespace, change if desired.
$metricNamespace = 'PMG/Queue';
$finalDriver = new MetricsDriver($driver, CloudWatchClient::factory([
    'region' => 'us-east-1',
    'version' => 'latest',
]), $metricNamespace, $yourLoggerFromSomeplace);

// now use $finalDriver in your consumers/producers

测试

./vendor/bin/phpunit

测试包括一组实际与云监控交互的集成测试。确保已设置凭据才能运行这些测试。否则,您可以使用...排除它们

./vendor/bin/phpunit --exclude-group integration