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

v0.1.1 2026-02-15 07:23 UTC

This package is not auto-updated.

Last update: 2026-02-18 19:25:01 UTC


README

PHP Version License Build Status codecov

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

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