fjogeleit / prometheus-messenger-middleware
Symfony Messenger 组件的 Prometheus 中间件
v0.9.1
2023-12-19 13:55 UTC
Requires
- php: >=7.2.5
- promphp/prometheus_client_php: ^2.0
- symfony/messenger: ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-03 17:59:16 UTC
README
一个简单的中间件,用于通过两个 Prometheus 计数器指标监控您的 Symfony Messenger 组件。
- 执行消息总数计数器
- 失败消息计数器
依赖项
- PHP >= 7.2.5
- promphp/prometheus_client_php
- symfony/messenger
安装
composer require fjogeleit/prometheus-messenger-middleware
使用方法
将此中间件配置到您的 MessageBus
Symfony 基本示例
注册您的服务
services: Prometheus\Storage\InMemory: ~ Prometheus\CollectorRegistry: ['@Prometheus\Storage\InMemory'] PrometheusMiddleware\PrometheusMiddleware: ~
配置中间件
framework: messenger: buses: message.bus.commands: middleware: - 'PrometheusMiddleware\PrometheusMiddleware'
默认标签 "message" 作为完全限定的 MessageName,"label" 作为 Message ClassName 生成示例计数器响应
# HELP message_bus_commands_messenger Executed Messages
# TYPE message_bus_commands_messenger counter
message_bus_commands_messenger{message="PrometheusMiddleware\\\\Tests\\\\Example\\\\FooMessage",label="FooMessage"} 2
message_bus_commands_messenger{message="PrometheusMiddleware\\\\Tests\\\\Example\\\\FooMessage",label="BarMessage"} 1
高级使用
您还可以配置自己的标签并提供相关值
作为附加服务参数配置自己的标签
services: ... PrometheusMiddleware\PrometheusMiddleware: arguments: $labels: ['message', 'label','value']
创建一个 LabelValueProvider
通过实现 LabelValueProviderInterface
创建您自己的 LabelValueProvider
<?php declare(strict_types=1); namespace PrometheusMiddleware\Tests\Example\LabelValueProvider; use PrometheusMiddleware\LabelValueProviderInterface; use PrometheusMiddleware\Tests\Example\FooMessage; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Middleware\StackInterface; class FooLabelValueProvider implements LabelValueProviderInterface { public function __invoke(Envelope $envelope, StackInterface $stack): array { /** @var FooMessage $message */ $message = $envelope->getMessage(); return [ \get_class($message), substr(strrchr(get_class($message), '\\'), 1), $message->getBar() ]; } }
将您的新 LabelValueProvider 添加到您的服务配置中
services: ... PrometheusMiddleware\Tests\Example\FooLabelValueProvider: ~ PrometheusMiddleware\PrometheusMiddleware: arguments: $labels: ['message', 'label','value'] $labelValueProvider: '@PrometheusMiddleware\Tests\Example\FooLabelValueProvider'
您还可以使用 ErrorLabelValueProviderInterface
为 ErrorCounter 提供自定义标签
<?php declare(strict_types=1); namespace PrometheusMiddleware\Tests\Example\LabelValueProvider; use PrometheusMiddleware\ErrorLabelValueProviderInterface; use PrometheusMiddleware\Tests\Example\FooMessage; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Middleware\StackInterface; class FooExceptionLabelValueProvider implements ErrorLabelValueProviderInterface { public function __invoke(Envelope $envelope, StackInterface $stack, \Throwable $exception): array { /** @var FooMessage $message */ $message = $envelope->getMessage(); return [ \get_class($message), substr(strrchr(get_class($message), '\\'), 1), $exception->getMessage() ]; } }
以及更新的服务配置
services: ... PrometheusMiddleware\Tests\Example\FooExceptionLabelValueProvider: ~ PrometheusMiddleware\PrometheusMiddleware: arguments: $errorLabels: ['message', 'label','value'] $errorLabelValueProvider: '@PrometheusMiddleware\Tests\Example\LabelValueProvider'