yproximite / influxdb-preset-bundle
InfluxDbPresetBundle:基于事件向InfluxDB服务器发送指标
v4.1.0
2022-05-12 09:00 UTC
Requires
- php: ^8.0
- symfony/framework-bundle: ^5.4 || ^6.0
- yproximite/influxdb-bundle: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- phpspec/phpspec: ^7.2
- phpstan/phpstan: ^1.6
- phpstan/phpstan-strict-rules: ^1.2
- phpstan/phpstan-symfony: ^1.1
README
InfluxDbPresetBundle:基于Events
向InfluxDB服务器发送指标
由于它依赖于优秀的官方influxdb-php库客户端(通过Symfony bundle),您可以配置后者以利用
- 一次发送多个指标(批量发送)
- Udp Events(使用UDP发送指标)
- Http Events(通过HTTP将指标发送到InfluxDB API)
两种方法(Udp/Http)也可以延迟,这意味着您只能在kernel.terminate
事件触发时发送指标,以避免减慢您的应用程序。您可以在influxdb-bundle的文档中了解更多信息
此捆绑包受到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
,这将自动(请参阅配置示例)发送内存使用、请求/响应周期持续时间、错误状态码和页面浏览量的指标。