slickdeals / statsd
statsd 的 PHP 客户端
Requires
- php: >= 7.3 || ^8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^9
- vimeo/psalm: ^4.6
Replaces
- domnikl/statsd: <=3.0.2
README
一个用于统计守护进程(statsd)的 PHP 客户端库,旨在从 PHP 应用程序发送指标。
最初是 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
您可以使用 StatsdAwareInterface
和 StatsdAwareTrait
,以便依赖注入容器(如 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 多位其他 贡献者 - 感谢!