yproximite/influxdb-preset-bundle

InfluxDbPresetBundle:基于事件向InfluxDB服务器发送指标

安装次数 20,195

依赖项: 0

建议者: 0

安全性: 0

星标: 8

关注者: 6

分支: 0

开放问题: 0

类型:symfony-bundle

v4.1.0 2022-05-12 09:00 UTC

This package is auto-updated.

Last update: 2024-09-12 13:52:40 UTC


README

CI (master) PHP Version

InfluxDbPresetBundle:基于Events向InfluxDB服务器发送指标

由于它依赖于优秀的官方influxdb-php库客户端(通过Symfony bundle),您可以配置后者以利用

  • 一次发送多个指标(批量发送)
  • Udp Events(使用UDP发送指标)
  • Http Events(通过HTTP将指标发送到InfluxDB API)

两种方法(Udp/Http)也可以延迟,这意味着您只能在kernel.terminate事件触发时发送指标,以避免减慢您的应用程序。您可以在influxdb-bundle的文档中了解更多信息

profiler_influx

此捆绑包受到StatsdBundle的启发

安装

yproximite/influxdb-preset-bundle 添加到您的 composer.json 文件中

$ composer require yproximite/influxdb-preset-bundle

app/AppKernel.php 中注册此捆绑包

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Yproximite\Bundle\InfluxDbPresetBundle\YproximiteInfluxDbPresetBundle(),
        new Yproximite\InfluxDbBundle\InfluxDbBundle(),
    );
}

此外,请确保您遵循influxdb-bundle的配置过程,因为它使用它来获取预先配置的服务以与InfluxDB服务器通信。

配置

以下是配置参考

# app/config/config.yml
yproximite_influx_db_preset:
    default_profile_name: default # by default it's "default"
    profiles:
        default:
            connections:
                default:
                    protocol: udp
                    deferred: true
            presets:
                app.user.created:
                    measurement: users
                    tags: { type: member, action: created, free: yes, foo: bar }
                    fields: { extra_value: true }
                api.company.created:
                    measurement: api
                    tags: { action: created, object: company }
                api.company.deleted:
                    measurement: api
                    tags: { action: deleted, object: company }
                app.memory_usage:
                    measurement: app_memory_usage
                    tags: { metric_type: memory }
                app.exception:
                    measurement: app
                    tags: { metric_type: exception, code: "<value>" }
                app.page_views:
                    measurement: app
                    tags: { metric_type: page_views }
        other:
            connections:
                default:
                    protocol: http
            presets:
                app.response_time:
                    measurement: app
                    tags: { metric_type: response_time }
                app.order.requested:
                    measurement: orders
                    tags: { action: requested, delivery: false }
                    fields: { extra_value: true }
    extensions:
        memory:
            enabled: true
            preset_name: app.memory_usage
        response_time:
            enabled: true
            preset_name: app.response_time
            profile_name: other # by default it's "default"
        exception:
            enabled: true
            preset_name: app.exception
        request_count:
            enabled: true
            preset_name: app.page_views

# influx_db:
#     default_connection:   ~
#     connections:
#         default:
#             host:                 influxdb.example.com
#             database:             my_db
#             udp:                  true
#             udp_port:             4444
#             http_port:            8086
#         other:
#             host:                 important.example.com
#             database:             my_db
#             udp:                  false
#             udp_port:             4444
#             http_port:            8086

使用

发送

通过事件

use Yproximite\Bundle\InfluxDbPresetBundle\Event\InfluxDbEvent;

// Symfony\Component\EventDispatcher\EventDispatcherInterface
$eventDispatcher = $this->get('event_dispatcher');

// Preset from default profile
$eventDispatcher->dispatch('app.user.created', new InfluxDbEvent(1));

// Advanced event parameters
$event = new InfluxDbEvent(
    $value = 1, // will be converted to float
    string $profileName = 'other',
    ?\DateTimeInterface $dateTime = new \DateTime()
);

$eventDispatcher->dispatch('app.order.requested', $event);

使用客户端

// Yproximite\Bundle\InfluxDbPresetBundle\Client\ClientInterface
$client = $this->get('yproximite.influx_db_preset.client.client');

$client->sendPoint(
    string $profileName = 'other',
    string $presetName = 'app.user.created',
    float $value = 0.5,
    ?\DateTimeInterface $dateTime = new \DateTime()
);

监听事件

您可以通过 ClientRequestEvent 监听每个客户端请求

use Yproximite\Bundle\InfluxDbPresetBundle\Event\ClientRequestEvent;

final class MyAppListener
{
    public function onClientRequest(ClientRequestEvent $event)
    {
        dump(
            $event->getProfileName(),
            $event->getPresetName(),
            $event->getValue(),
            $event->getDateTime()
        );
    }
}

别忘了将以下代码添加到 services.yml

services:
    app.event_listener.my_app_listener:
        class: AppBundle\EventListener\MyAppListener
        tags:
            - { name: kernel.event_listener, event: yproximite.bundle.influx_db_preset.client_request, method: onClientRequest }

您可以启用 extensions,这将自动(请参阅配置示例)发送内存使用、请求/响应周期持续时间、错误状态码和页面浏览量的指标。