myoperator/metrics

将指标推送到StatsD服务器的包装器

2.2.0 2015-10-29 09:44 UTC

This package is not auto-updated.

Last update: 2024-09-28 07:56:55 UTC


README

此库为基于myoperator PHP应用程序的应用程序指标提供基础。

依赖关系

  • codeasashu/statsd-php (Composer 包)
  • php >= 7.2
  • UDP statsd 连接

快速入门

将此库作为composer依赖项安装到您想要添加指标的项目中。

composer require myoperator/metrics

或者简单地将以下内容添加到您的 composer.json

{
    "require": {
        "myoperator/metrics": "^1"
    }
}

然后在您的引导脚本或任何可初始化的脚本中初始化 Metrics 实例

use MyOperator\Metrics\Metrics;

Metrics::setApplication('your-app-name'); // Your metrics base name
Metrics::setConnection('localhost', 8125); // UDP connection host and port

然后您可以在应用程序的任何地方获取 Metrics 实例并发送指标。例如,为耗时函数发送 timing 指标

Metrics::getInstance()->startTiming('fn.time');
$this->consumeTime();
Metrics::getInstance()->endTiming('fn.time'); //Same name that you started logging time with

注意 此仓库是位于 https://github.com/codeasashu/statsd-php 的源代码的扩展

要查看所有文档,请参阅 https://github.com/codeasashu/statsd-php 文档,并查看可用方法和日志记录机制

指标类型

以下指标类型受支持,并且它们的名称与名称相同

计数器

计数器发送任意数量的任何事物,只能随时间增加

例如

$user->login(); //some method to login user
metrics::getinstance()->count('user.login', 1); //increase user login by 1

计数器可用于记录

  • 服务的请求数量
  • 完成的任务(用户登录,发票生成)
  • 错误或异常

仪表

仪表用于度量任何随时间增加或减少的任意随机数

例如

$items = $queue->getItems(); //some method to get items in queue
metrics::getinstance()->count('queue.item.count', count($items)); //Send number of items in queue

仪表可用于记录

  • 队列中的项目数量
  • 缓存内存大小
  • 活动进程/线程/容器的数量

计时器

计时器是任何指标的关键组件,添加它构成了SLO的基础。此外,计时器还可以用于计算平均值,总和等。

计时器可以通过以下方式记录

基于开始和停止的计时器

在此,我们开始计时器并在任务完成后停止。这最适合在同一个脚本中执行任务的场景。

Metric::getInstance()->startTiming('task.time'); //String for reference
$task->takeTime(); //Time taking task
Metric::getInstance()->endTiming('task.time'); //End the time

自我时间计算

如果您想自己计时指标,可以使用 timing 方法

$starttime = microtime(true);
$task->takeTime(); //Some time taking task
$timeconsmed = (microtime(true) - $starttime) * 1000;
Metric::getInstance()->timing('task.time', $timeconsmed);

基于回调的方法

Metric::getInstance()->time("task.time", function() {
    $task->takeTime(); //Some time taking task
});