prismamedia / metrics
Prometheus 指标导出器
v2.1.0
2024-07-16 15:25 UTC
Requires
- php: >=7.4
- symfony/dependency-injection: ^4.4|^5.0|^6.0|^7.0
Requires (Dev)
- symfony/browser-kit: ^4.4|^5.0|^6.0|^7.0
- symfony/framework-bundle: ^4.4|^5.0|^6.0|^7.0
- symfony/phpunit-bridge: ^4.4|^5.0|^6.0|^7.0
- symfony/yaml: ^4.4|^5.0|^6.0|^7.0
README
本包是用于将指标导出到 Prometheus 的 Symfony 扩展。创建自己的 MetricGenerator
服务以按需生成值,扩展会通过 /metrics
端点暴露它们。
它默认不提供任何指标,您需要自己编写代码。
用法
要求此包
composer require prismamedia/metrics
注册扩展
# config/bundles.php return [ // ... PrismaMedia\Metrics\Bundle\PrismaMediaMetricsBundle::class => ['all' => true], // ... ];
导入路由文件
# config/routes.yaml metrics: resource: '@PrismaMediaMetricsBundle/Resources/config/routes.xml'
实现您自己的指标生成器
您的指标通过实现 PrismaMedia\Metrics\MetricGenerator
接口的类按需生成。
最佳实践是为不同的指标名称创建不同的类。每个类可以返回具有不同标签的多个值。
在以下示例中,我们暴露了一个名为 app_article_total
的指标,它以每个 status
标签进行标记。在 Prometheus (& Grafana) 中,可以将这些值相加以获得总数。
<?php # src/Metrics/ArticleCountMetric.php namespace App\Metrics; use Doctrine\DBAL\Connection; use PrismaMedia\Metrics\Metric; use PrismaMedia\Metrics\MetricGenerator; class ArticleCountMetric implements MetricGenerator { private $connection; public function __construct(Connection $connection) { $this->connection = $connection; } /** * @return Metric[] */ public function getMetrics(): \Traversable { // SELECT a.status, COUNT(*) as total FROM article GROUP BY a.status $qbd = $this->connection->createQueryBuilder(); $qbd->select('a.status, COUNT(*) as total') ->from('article', 'a') ->groupBy('a.status'); foreach ($qbd->execute()->fetchAll() as $row) { // app_article_total{status=<status>} <total> yield new Metric('app_article_total', (int) $row['total'], [ 'status' => $row['status'], ]); } } }
在您的 config/services.yaml
或 config/services.php
中将类声明为服务。它将被自动标记为 prisma_media.metric
并添加到聚合器中。
/metrics
端点将返回类似以下内容
# curl https://localhost:8080/metrics app_article_total{status=published} 230 app_article_total{status=review} 2 app_article_total{status=draft} 5
贡献
欢迎拉取请求。对于主要更改,请首先打开一个问题来讨论您想要进行更改的内容。
请确保适当地更新测试。