Metrics
Simple library that abstracts different metrics collectors. I find this necessary to have a consistent and simple metrics (functional) API that doesn't cause vendor lock-in.
Install / Use
/learn @beberlei/MetricsREADME
Metrics
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');
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
