定制 fjogeleit/prometheus-messenger-middleware 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

fjogeleit/prometheus-messenger-middleware

Composer 安装命令:

composer require fjogeleit/prometheus-messenger-middleware

包简介

Prometheus Middleware for the Symfony Messenger Component

README 文档

README

CodeStyle

A Simple Middleware to Monitor your Symfony Messenger Component with two Prometheus Counter Metrics per MessageBus.

  • Counter overall executed Messages
  • Counter failed Messages

Dependencies

  • PHP >= 7.2.5
  • promphp/prometheus_client_php
  • symfony/messenger

Installation

composer require fjogeleit/prometheus-messenger-middleware

Usage

Configure this Middleware to your MessageBus

Symfony Basic Example

Register your Services

services:
    Prometheus\Storage\InMemory: ~
    Prometheus\CollectorRegistry: ['@Prometheus\Storage\InMemory']

    PrometheusMiddleware\PrometheusMiddleware: ~

Configure Middleware

framework:
    messenger:
        buses:
            message.bus.commands:
                middleware:
                    - 'PrometheusMiddleware\PrometheusMiddleware'

Generated Example Counter Response with the default Labels "message" as full qualified MessageName and "label" as 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

Advanced Usage

You can also configure your own Labels and provide the related Values

Configure your own labels as additional service argument

services:
    ...

    PrometheusMiddleware\PrometheusMiddleware:
      arguments:
        $labels: ['message', 'label','value']
        

Create a LabelValueProvider

Create your own LabelValueProvider by implementing the LabelValueProviderInterface

<?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()
        ];
    }
}

Add your new LabelValueProvider to your ServiceConfiguration

services:
    ...
    PrometheusMiddleware\Tests\Example\FooLabelValueProvider: ~

    PrometheusMiddleware\PrometheusMiddleware:
      arguments:
        $labels: ['message', 'label','value']
        $labelValueProvider: '@PrometheusMiddleware\Tests\Example\FooLabelValueProvider'

You can also provide custom labels for the ErrorCounter with the ErrorLabelValueProviderInterface

<?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()
        ];
    }
}

And the updated ServiceConfiguration

services:
    ...
    PrometheusMiddleware\Tests\Example\FooExceptionLabelValueProvider: ~

    PrometheusMiddleware\PrometheusMiddleware:
      arguments:
        $errorLabels: ['message', 'label','value']
        $errorLabelValueProvider: '@PrometheusMiddleware\Tests\Example\LabelValueProvider'

Full PrometheusMiddleware API

Property Required Description
CollectorRegistry $collectorRegistry required Underlying CollectorRegistry to generate and persist your metrics
string $metricName optional Default message, used as "name" for your Counter
string $helpText optional Default Executed Messages, used as Counter help text
array $labels optional Default ['message', 'label'], default provided Counter labels
LabelValueProviderInterface $provider optional Default DefaultLabelValueProvider, provides the Counter label related values
string $errorHelpText optional Default Failed Messages, used as Error Counter help text
array $errorLabels optional Default ['message', 'label'], default provided Error Counter labels
ErrorLabelValueProviderInterface $errorLabelValueProvider optional Default DefaultErrorLabelValueProvider, provides the Error Counter label related values

fjogeleit/prometheus-messenger-middleware 适用场景与选型建议

fjogeleit/prometheus-messenger-middleware 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 55.19k 次下载、GitHub Stars 达 22, 最近一次更新时间为 2020 年 07 月 26 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 fjogeleit/prometheus-messenger-middleware 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 fjogeleit/prometheus-messenger-middleware 我们能提供哪些服务?
定制开发 / 二次开发

基于 fjogeleit/prometheus-messenger-middleware 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 55.19k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 22
  • 点击次数: 6
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 22
  • Watchers: 2
  • Forks: 4
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-07-26