kislayphp / metrics
High-performance C++ PHP extension providing comprehensive metrics collection and monitoring for PHP microservices
Installs: 1
Dependents: 0
Suggesters: 6
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Language:Shell
Type:php-ext
Ext name:ext-kislayphp_metrics
pkg:composer/kislayphp/metrics
Requires
- php: >=8.2
Suggests
- kislayphp/config: Configurable metrics collection
- kislayphp/core: HTTP/HTTPS server metrics
- kislayphp/discovery: Service health metrics
- kislayphp/eventbus: Real-time metrics streaming
- kislayphp/gateway: API gateway metrics
- kislayphp/queue: Queue processing metrics
Provides
This package is not auto-updated.
Last update: 2026-02-18 19:25:01 UTC
README
A high-performance C++ PHP extension providing comprehensive metrics collection, monitoring, and observability for microservices with support for Prometheus, StatsD, and custom backends. Perfect for PHP ecosystem integration and modern microservices architecture.
โก Key Features
- ๐ High Performance: Ultra-low latency metrics collection
- ๐ Multiple Metrics Types: Counters, gauges, histograms, timers
- ๐ Backend Support: Prometheus, StatsD, InfluxDB, and custom clients
- ๐ Aggregation: Statistical aggregations and percentiles
- ๐ท๏ธ Labels/Tags: Multi-dimensional metrics with labels
- ๐ Logging: Structured metrics logging and export
- ๐ Querying: Metrics querying and filtering
- ๐ Distributed: Cross-service metrics aggregation
- ๐ PHP Ecosystem: Seamless integration with PHP ecosystem and frameworks
- ๐ Microservices Architecture: Designed for distributed PHP applications
๐ฆ Installation
Via PIE (Recommended)
pie install kislayphp/metrics
Add to your php.ini:
extension=kislayphp_metrics.so
Manual Build
git clone https://github.com/KislayPHP/metrics.git
cd metrics
phpize
./configure
make
sudo make install
container
FROM php:8.2-cli
๐ Quick Start
Basic Metrics Collection
<?php // Create metrics collector $metrics = new KislayMetrics(); // Counter metrics $metrics->increment('requests_total'); $metrics->increment('requests_total', 5); // Gauge metrics $metrics->gauge('active_connections', 42); $metrics->increment('active_connections'); // +1 $metrics->decrement('active_connections'); // -1 // Histogram metrics $metrics->histogram('request_duration', 0.145); // in seconds // Timer metrics (automatic duration measurement) $timer = $metrics->startTimer('database_query'); performDatabaseQuery(); $timer->stop();
Labeled Metrics
<?php $metrics = new KislayMetrics(); // HTTP request metrics with labels $metrics->increment('http_requests_total', [ 'method' => 'GET', 'endpoint' => '/api/users', 'status' => '200' ]); $metrics->histogram('http_request_duration', 0.089, [ 'method' => 'POST', 'endpoint' => '/api/orders' ]);
Custom Backend Integration
<?php $metrics = new KislayMetrics(); // Use Prometheus backend $prometheus = new PrometheusClient([ 'gateway_url' => 'http://prometheus-pushgateway:9091', 'job_name' => 'my-service' ]); $metrics->setBackend($prometheus); // Use StatsD backend $statsd = new StatsDClient([ 'host' => 'statsd-server', 'port' => 8125, 'namespace' => 'myapp' ]); $metrics->setBackend($statsd); // Use InfluxDB backend $influxdb = new InfluxDBClient([ 'host' => 'influxdb-server', 'port' => 8086, 'database' => 'metrics', 'username' => 'metrics_user', 'password' => 'secret' ]); $metrics->setBackend($influxdb);
Middleware Integration
<?php $metrics = new KislayMetrics(); // HTTP middleware for automatic metrics $middleware = new MetricsMiddleware($metrics, [ 'request_count' => 'http_requests_total', 'request_duration' => 'http_request_duration', 'response_size' => 'http_response_size' ]); // In your framework $app->use($middleware); // Custom middleware $app->use(function($request, $response, $next) use ($metrics) { $start = microtime(true); $result = $next($request, $response); $duration = microtime(true) - $start; $metrics->histogram('custom_operation_duration', $duration, [ 'operation' => 'user_registration' ]); return $result; });
Metrics Export
<?php $metrics = new KislayMetrics(); // Export metrics in Prometheus format $prometheusFormat = $metrics->export('prometheus'); echo $prometheusFormat; // Export metrics as JSON $jsonFormat = $metrics->export('json'); echo $jsonFormat; // Get raw metrics data $allMetrics = $metrics->getAllMetrics(); print_r($allMetrics);
๐ Documentation
๐ Complete Documentation - API reference, backend integrations, configuration options, and best practices
๐๏ธ Architecture
KislayPHP Metrics implements a layered architecture:
โโโโโโโโโโโโโโโโโโโ
โ Application โ
โ Code โ
โโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโ
โ Metrics โ
โ Collector โ
โ (PHP) โ
โ โ
โ โโโโโโโโโโโ โ
โ โ Storage โ โ
โ โ Engine โ โ
โ โโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโ โ
โ โ Backend โ โ
โ โ Client โ โ
โ โโโโโโโโโโโ โ
โโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโ
โ Monitoring โ
โ Systems โ
โ (Prometheus โ
โ StatsD...) โ
โโโโโโโโโโโโโโโ
๐ฏ Use Cases
- Application Monitoring: Track performance and usage metrics
- Service Health: Monitor service availability and response times
- Business Metrics: Track user behavior and business KPIs
- Infrastructure Monitoring: System resource usage and performance
- Distributed Tracing: Request tracing across microservices
- Alerting: Set up alerts based on metric thresholds
๐ Performance
Metrics Collection Benchmark:
===========================
Metrics/Second: 500,000
Memory Usage: 12 MB
Average Latency: 0.02 ms
P95 Latency: 0.05 ms
Label Cardinality: 10,000
Export Time (JSON): 15 ms
Export Time (Prom): 8 ms
๐ง Configuration
php.ini Settings
; Metrics extension settings kislayphp.metrics.max_labels = 10000 kislayphp.metrics.max_series = 100000 kislayphp.metrics.collection_interval = 60 kislayphp.metrics.export_timeout = 30 ; Storage settings kislayphp.metrics.storage_engine = "memory" kislayphp.metrics.storage_max_size = 1000000 ; Backend settings kislayphp.metrics.backend = "prometheus" kislayphp.metrics.prometheus_gateway = "http://localhost:9091"
Environment Variables
export KISLAYPHP_METRICS_BACKEND=prometheus export KISLAYPHP_METRICS_PROMETHEUS_GATEWAY=http://prometheus:9091 export KISLAYPHP_METRICS_STATSD_HOST=statsd:8125 export KISLAYPHP_METRICS_INFLUXDB_HOST=influxdb:8086 export KISLAYPHP_METRICS_MAX_LABELS=10000
๐งช Testing
# Run unit tests php run-tests.php # Test metrics collection cd tests/ php test_metrics_collection.php # Test backend integration php test_prometheus_backend.php # Performance tests php test_performance.php
๐ค Contributing
We welcome contributions! Please see our Contributing Guide for details.
๐ License
Licensed under the Apache License 2.0.
๐ Support
- ๐ Documentation
- ๐ Issue Tracker
- ๐ฌ Discussions
- ๐ง Security Issues
SEO Keywords
PHP, microservices, PHP ecosystem, PHP extension, C++ PHP extension, PHP metrics, PHP monitoring, PHP observability, PHP Prometheus, PHP StatsD, PHP InfluxDB, PHP telemetry, PHP performance monitoring
๐ Roadmap
- OpenTelemetry integration
- Distributed tracing
- Custom aggregation functions
- Metrics dashboards
- Alert manager integration
- orchestrator metrics collection
๐ Acknowledgments
- Prometheus: Metrics collection and monitoring
- StatsD: Simple metrics daemon
- InfluxDB: Time-series database
- PHP: Zend API for extension development
Built with โค๏ธ for observable PHP applications