prismamedia/metrics

Prometheus 指标导出器

安装数: 12,995

依赖项: 0

建议者: 0

安全: 0

星级: 14

关注者: 4

分支: 5

开放问题: 3

类型:symfony-bundle

v2.1.0 2024-07-16 15:25 UTC

This package is auto-updated.

Last update: 2024-09-19 08:15:00 UTC


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.yamlconfig/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

贡献

欢迎拉取请求。对于主要更改,请首先打开一个问题来讨论您想要进行更改的内容。

请确保适当地更新测试。

许可协议

BSD 3-Clause