imiphp / imi-influxdb
imi 框架 InfluxDB 组件。imi InfluxDB component.
Requires
- yurunsoft/influxdb-orm: ^1.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ~3.4.0
- imiphp/imi: 2.1.x-dev
- imiphp/imi-fpm: 2.1.x-dev
- imiphp/imi-meter: 2.1.x-dev
- imiphp/imi-swoole: 2.1.x-dev
- imiphp/imi-workerman: 2.1.x-dev
- phpstan/phpstan: ~1.8.0
- phpunit/phpunit: >=9
- rector/rector: ^0.12.10
- swoole/ide-helper: ^4.8
Suggests
This package is auto-updated.
Last update: 2024-10-28 10:57:56 UTC
README
介绍
此项目是 imi 框架的 InfluxDB 组件。
自动引入 yurunsoft/influxdb-orm
,可以直接使用该 ORM 功能。
支持的功能:
- InfluxDB 连接管理
- influxdb-orm
- 服务指标监控
正在开发中,随时可能修改,请勿用于生产环境!
安装
composer require imiphp/imi-influxdb:~2.1.0
使用说明
InfluxDB 连接管理
配置连接
config.php
:
[ 'influxDB' => [ 'clients' => [ // default 是连接名称,可以随意更改 'default' => [ 'host' => '127.0.0.1', // 主机名 'port' => 8086, // 端口 'username' => '', // 用户名 'password' => '', // 密码 'defaultDatabase' => '', // 默认数据库名 'ssl' => false, // 是否启用 SSL 'verifySSL' => false, // 是否验证 SSL 证书 'timeout' => 0, // 超时时间 'connectTimeout' => 0, // 连接超时时间 'path' =>'/', // 请求路径前缀 'createDatabase' => true, // 当数据库不存在时,自动创建数据库 ], ], 'default' => 'default', // 默认连接名 ], ]
获取客户端对象
use Imi\InfluxDB\InfluxDB; $client = InfluxDB::getClient(); // 获取默认客户端 $client = InfluxDB::getClient('default'); // 获取指定名称客户端
获取数据库对象
use Imi\InfluxDB\InfluxDB; $db = InfluxDB::getDatabase(); // 获取默认数据库名的对象 $db = InfluxDB::getDatabase('dbname'); // 获取指定数据库名的对象 $db = InfluxDB::getDatabase(null, 'default'); // 指定客户端名称
使用数据库对象
$db = InfluxDB::getDatabase(); $db->query(); // SQL 查询 $db->writePoints(); // 写入数据
InfluxDB ORM
详细用法请参考:https://github.com/Yurunsoft/influxdb-orm
SQL 查询
写入
服务指标监控
仅支持 Swoole、Workerman。
支持 TDengine InfluxDB 协议写入。
安装所需组件
composer require imiphp/imi-meter:~2.1.0
配置
配置监控指标:
@app.beans
:
[ 'MeterRegistry' => [ 'driver' => \Imi\InfluxDB\Meter\InfluxDBMeterRegistry::class, 'options' => [ 'database' => null, // 使用的数据库名,可以设为null使用连接中配置的数据库名 'clientName' => null, // 连接客户端名称,可以设为null使用默认客户端名称 'batch' => 1000, // 单次推送的记录数量 'interval' => 0, // 推送时间周期,单位:秒,默认为0不启用推送,如希望监控生效,请设置一个合理的数值。 // 所有标签如设为空字符串或 null 则忽略该标签 'resultTag' => 'result', // 标签名-结果 'exceptionTag' => 'exception', // 标签名-异常类名 'instanceTag' => 'instance', // 标签名-实例 'workerTag' => 'worker', // 标签名-WorkerId 'instance' => 'imi', // 当前实例名称,每个实例要设置不同 ], ], ]
TDengine InfluxDB 所需修改的配置:
// 连接配置一定要设置这几项 [ 'port' => 6041, 'path' => '/influxdb/v1/', 'createDatabase' => false, 'username' => 'root', 'password' => 'taosdata', ]
使用
注解
@Counted
类名:\Imi\Meter\Annotation\Counted
计数统计,适合只累加,不减少的统计数据类型。
例如:访问次数统计。
@Gauged
类名:\Imi\Meter\Annotation\Gauged
适合数字有上下波动的统计。
例如:CPU 占用率统计。
@Timed
类名:\Imi\Meter\Annotation\Timed
耗时统计。
例如:方法执行耗时
@Histogram
类名:\Imi\Meter\Annotation\Histogram
柱状图,一般人用不懂,如无特殊需求可以无视。
@Summary
类名:\Imi\Meter\Annotation\Summary
采样点分位图,一般人用不懂,如无特殊需求可以无视。
代码示例:
use Imi\Meter\Annotation\Gauged; use Imi\Meter\Annotation\Histogram; use Imi\Meter\Annotation\Summary; use Imi\Meter\Annotation\Timed; use Imi\Meter\Enum\TimeUnit; /** * @Gauged(name="test_memory_usage", description="memory usage", tags={"workerId"="{returnValue.workerId}"}, value="{returnValue.memory}") */ public function recordMemoryUsage(): array { return [ 'workerId' => Worker::getWorkerId(), 'memory' => memory_get_usage(), ]; } /** * @Timed(name="test_timed", description="memory usage", baseTimeUnit=TimeUnit::MILLI_SECONDS) */ public function testTimed(): int { $ms = mt_rand(10, 1000); usleep($ms * 1000); return $ms; } /** * @Timed(name="test_timed_histogram", description="memory usage", baseTimeUnit=TimeUnit::MILLI_SECONDS, options={"histogram"=true}) */ public function testTimedHistogram(): int { $ms = mt_rand(10, 1000); usleep($ms * 1000); return $ms; } /** * @Histogram(name="test_histogram", baseTimeUnit=TimeUnit::MILLI_SECONDS) */ public function testHistogram(): int { return mt_rand(10, 1000); } /** * @Summary(name="test_summary", baseTimeUnit=TimeUnit::MILLI_SECONDS) */ public function testSummary(): int { return mt_rand(10, 1000); }
手动操作
use \Imi\Meter\Facade\MeterRegistry; use \Imi\Meter\Enum\TimeUnit; $description = '我是描述'; $tags = ['result' => 'success']; // counter MeterRegistry::getDriverInstance()->counter('testCounterManual', $tags, $description)->increment(); // gauge MeterRegistry::getDriverInstance()->gauge('testGaugeManual', $tags, $description)->record(114514); // timer $timer = MeterRegistry::getDriverInstance()->timer('testTimedManual', $tags, $description, TimeUnit::MILLI_SECONDS); $timerSample = $timer->start(); usleep(mt_rand(10, 1000) * 1000); $timerSample->stop($timer); // timer Histogram $timer = MeterRegistry::getDriverInstance()->timer('testTimedHistogramManual', $tags, $description, TimeUnit::MILLI_SECONDS, [ 'histogram' => true, ]); $timerSample = $timer->start(); usleep(mt_rand(10, 1000) * 1000); // 你的耗时代码 $timerSample->stop($timer); // Histogram $value = 114514; MeterRegistry::getDriverInstance()->histogram('testHistogramManual', $tags, $description)->record($value); // Summary $value = 114514; MeterRegistry::getDriverInstance()->summary('testHistogramManual', $tags, $description)->record($value);
免费技术支持
运行环境
版权信息
imi-influxdb
遵循 MulanPSL-2.0 开源协议发布,并提供免费使用。
捐赠
开源不求盈利,多少都是心意,生活不易,随缘随缘……