talentrydev / monitoring
PHP library for application monitoring using metrics
Requires
- php: ^8.3
- ext-json: *
- ext-sockets: *
- league/statsd: ^2.0
- predis/predis: ^1.1 || ^2.0
- psr/log: ^1.1 || ^2 || ^3
- symfony/console: ^6.0
- talentrydev/error-handling: ^3.0.0
Requires (Dev)
- colinodell/psr-testlogger: ^1.3.0
- phpunit/phpunit: ^11
- squizlabs/php_codesniffer: ^3.7
README
This library provides the means for pushing metrics to a monitoring service. Currently, it supports pushing metrics to any StatsD compliant implementation.
Types of metrics
Increment metric
Useful for tracking data that accumulates over time, for example tracking the number of requests. This is a simple metric that is only identified by name. Every time you push this metric, it is incremented by 1.
Decrement metric
Same as increment metric, but inverse (decrements rather than increments).
Gauge metric
Useful for tracking the state that changes over time, for example the server load. It is identified by both name and value.
Timing metric
Similar to gauge metric, it is identified by name and value (except that in this case the value is a timing measure). Useful for tracking timings, like response time. Time is given in milliseconds.
How to use
- Implement one of the four metric types (specified above). Alternatively you can use the Metrics utility class to create metrics on the fly. Implementing your own metric is preferred.
- Create the Monitor instance using the MonitorFactory
- Create an instance of your metric and push it using the Monitor (using
push
method).
Naming metrics
Use dot-separated notation for creating namespaces, such as:
system.load.memory
system.load.disk
Examples
Create a Monitor for StatsD metrics
use Talentry\Monitoring\Infrastructure\Metric\PhpLeagueStatsdClient;
use Talentry\Monitoring\Infrastructure\Monitor\MonitorFactory;
use Talentry\Monitoring\Infrastructure\Metric\MetricStoreFactory;
$metricStore = (new MetricStoreFactory('statsd-host', 8125))->generate();
$monitor = (new MonitorFactory($metricStore))->generate();