beberlei / metrics
Simple library to talk to metrics collector services.
Installs: 964 486
Dependents: 4
Suggesters: 0
Security: 0
Stars: 317
Watchers: 15
Forks: 38
Open Issues: 12
Requires
- psr/log: ^1.0 || ^2.0 || ^3.0
Requires (Dev)
- corley/influxdb-sdk: ^0.5.1
- doctrine/dbal: ~2.0
- jimdo/prometheus_client_php: ^0.5
- kriswallsmith/buzz: *
- okitsu/zabbix-sender: *@dev
- symfony/config: ~3.3 || ~4.0
- symfony/dependency-injection: ~3.3 || ~4.0
- symfony/http-kernel: ~3.3 || ~4.0
Suggests
- corley/influxdb-sdk: For InfluxDB integration
- jimdo/prometheus_client_php: For Prometheus integration
- kriswallsmith/buzz: For Librato integration
- okitsu/zabbix-sender: For zabbix integration
README
Simple library that abstracts different metrics collectors. I find this necessary to have a consistent and simple metrics API that doesn't cause vendor lock-in.
It also ships with a Symfony Bundle. This is not a library for displaying metrics.
Currently supported backends:
- Doctrine DBAL
- Graphite
- InfluxDB
- Telegraf
- Librato
- Logger (Psr\Log\LoggerInterface)
- Null (Dummy that does nothing)
- Prometheus
- StatsD
- Zabbix
- DogStatsD
Installation
Using Composer:
composer require beberlei/metrics
API
You can instantiate clients:
<?php $collector = \Beberlei\Metrics\Factory::create('statsd');
You can measure stats:
<?php $collector->increment('foo.bar'); $collector->decrement('foo.bar'); $start = microtime(true); $diff = microtime(true) - $start; $collector->timing('foo.bar', $diff); $value = 1234; $collector->measure('foo.bar', $value);
Some backends defer sending and aggregate all information, make sure to call flush:
<?php $collector->flush();
Configuration
<?php $statsd = \Beberlei\Metrics\Factory::create('statsd'); $zabbix = \Beberlei\Metrics\Factory::create('zabbix', array( 'hostname' => 'foo.beberlei.de', 'server' => 'localhost', 'port' => 10051, )); $zabbixConfig = \Beberlei\Metrics\Factory::create('zabbix_file', array( 'hostname' => 'foo.beberlei.de', 'file' => '/etc/zabbix/zabbix_agentd.conf' )); $librato = \Beberlei\Metrics\Factory::create('librato', array( 'hostname' => 'foo.beberlei.de', 'username' => 'foo', 'password' => 'bar', )); $null = \Beberlei\Metrics\Factory::create('null');
Symfony Bundle Integration
Register Bundle into Kernel:
<?php class AppKernel extends Kernel { public function registerBundles() { //.. $bundles[] = new \Beberlei\Bundle\MetricsBundle\BeberleiMetricsBundle(); //.. } }
Do Configuration:
# app/config/config.yml beberlei_metrics: default: foo collectors: foo: type: statsd bar: type: zabbix prefix: foo.beberlei.de host: localhost port: 10051 baz: type: zabbix_file prefix: foo.beberlei.de file: /etc/zabbix/zabbix_agentd.conf librato: type: librato username: foo password: bar source: hermes10 dbal: type: doctrine_dbal connection: metrics # using the connection named "metrics" monolog: type: monolog influxdb: type: influxdb influxdb_client: influxdb_client_service # using the InfluxDB client service named "influxdb_client_service" tags: dc: "west" node_instance: "hermes10" prometheus: type: prometheus prometheus_collector_registry: prometheus_collector_registry_service # using the Prometheus collector registry service named "prometheus_collector_registry_service" namespace: app_name # optional tags: dc: "west" node_instance: "hermes10"
This adds collectors to the Metrics registry. The functions are automatically included in the Bundle class so that in your code you can just start using the convenient functions. Metrics are also added as services:
<?php $metrics = $container->get('beberlei_metrics.collector.foo');
and the default collector can be fetched:
<?php $metrics = $container->get('beberlei_metrics.collector');