slickdeals/statsd

statsd 的 PHP 客户端

3.2.0 2023-11-24 08:03 UTC

README

一个用于统计守护进程(statsd)的 PHP 客户端库,旨在从 PHP 应用程序发送指标。

Build Status

最初是 https://github.com/domnikl/statsd-php 的分支,原作者为 Dominik Liebler。Slickdeals 团队已接管该项目。

安装

安装 statsd-php 的最佳方式是使用 Composer,并在您的项目 composer.json 文件中添加以下内容

{
    "require": {
        "slickdeals/statsd": "~3.0"
    }
}

用法

<?php
$connection = new \Domnikl\Statsd\Connection\UdpSocket('localhost', 8125);
$statsd = new \Domnikl\Statsd\Client($connection, "test.namespace");

// the global namespace is prepended to every key (optional)
$statsd->setNamespace("test");

// simple counts
$statsd->increment("foo.bar");
$statsd->decrement("foo.bar");
$statsd->count("foo.bar", 1000);

在建立与 statsd 的连接并发送指标时,将抑制错误以防止您的应用程序崩溃。

如果您以 TCP 模式运行 statsd,还有一个 \Domnikl\Statsd\Connection\TcpSocket 适配器,它类似于 UdpSocket,但如果无法建立连接,则抛出 \Domnikl\Statsd\Connection\TcpSocketException。请注意,与 UDP 不同,TCP 用于可靠的网络,因此 TCP 模式下不会抑制异常(和错误)。

计时

<?php
// timings
$statsd->timing("foo.bar", 320);
$statsd->time("foo.bar.bla", function() {
    // code to be measured goes here ...
});

// more complex timings can be handled with startTiming() and endTiming()
$statsd->startTiming("foo.bar");
// more complex code here ...
$statsd->endTiming("foo.bar");

内存分析

<?php
// memory profiling
$statsd->startMemoryProfile('memory.foo');
// some complex code goes here ...
$statsd->endMemoryProfile('memory.foo');

// report peak usage
$statsd->memory('foo.memory_peak_usage');

量表

statsd 支持量表,可以记录任意值。

此方法接受绝对(3)和增量(+11)值。

注意: 负值被视为增量值,而不是绝对值。

<?php
// Absolute value
$statsd->gauge('foobar', 3);

// Pass delta values as a string. 
// Accepts both positive (+11) and negative (-4) delta values.
$statsd->gauge('foobar', '+11'); 

集合

statsd 支持集合,因此您可以查看给定值的唯一性。

<?php
$statsd->set('userId', 1234);

禁用指标发送

要禁定向 statsd 服务器发送任何指标,您可以使用 Domnikl\Statsd\Connection\Blackhole 连接类而不是默认的套接字抽象。这可能非常有用,例如用于功能标志。另一个选项是使用 Domnikl\Statsd\Connection\InMemory 连接类,它将收集您的消息,但实际上不会发送它们。

StatsdAwareInterface

您可以使用 StatsdAwareInterfaceStatsdAwareTrait,以便依赖注入容器(如 Symfony 的 DI 组件)自动检测 StatsdAwareInterface 并将客户端注入到您的服务中。

Symfony

# config/services.yaml
services:
  _instanceof:
    Domnikl\Statsd\StatsdAwareInterface:
      calls:
        - [setStatsdClient, ['@Domnikl\Statsd\Client']]

  Domnikl\Statsd\Client:
    arguments:
      $connection: '@app.statsd_connection'
      $namespace: '<namespace>'

  app.statsd_connection:
    class: Domnikl\Statsd\Connection\UdpSocket
    arguments:
      $host: '%env(STATSD_HOST)%'
      $port: '%env(STATSD_PORT)%'

作者

原作者:Dominik Liebler liebler.dominik@gmail.com 多位其他 贡献者 - 感谢!