将指标发送到 InfluxDB 并查询任何数据。
该项目支持 InfluxDB API >= 0.9
-对于 InfluxDB v0.8 checkout 分支 0.3(不再支持)
支持的适配器:
只需使用作曲家
$ composer require corley/influxdb-sdk: ~ 1
或者添加到您的composer.json
文件中
{
"require" : {
"corley/influxdb-sdk" : " ~1 "
}
}
添加新点:
$ client -> mark ( " app-search " , [
" key " => " this is my search "
]);
或者使用 InfluxDB 直接消息
$ client -> mark ([
" tags " => [
" dc " => " eu-west-1 " ,
],
" points " => [
[
" measurement " => " instance " ,
" fields " => [
" cpu " => 18.12 ,
" free " => 712423 ,
],
],
]
]);
检索现有点:
$ results = $ client -> query ( ' select * from "app-search" ' );
实际上我们支持两个网络适配器
为了使用 UDP/IP 适配器,您必须使用sockets
扩展编译 PHP。
用法
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
UDP/IP 选项集只有host
和port
属性,您可以直接在 InfluxDB 配置中配置数据库和保留策略
实际上Guzzle是用作HTTP客户端库
<?php
$ http = new GuzzleHttp Client ();
$ writer = . . .
$ options = new Http Options ();
$ reader = new Http Reader ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
当然,您可以混合使用 UdpIp 和 Http 适配器,以便使用 UDP/IP 协议写入数据点,但使用 HTTP 读取信息。
$ reader = new Http Reader ( $ http , $ httpOptions );
$ writer = new Udp Writer ( $ udpOptions );
$ client = new Client ( $ reader , $ writer );
$ client -> mark (...); // Use UDP/IP support
$ client -> query ( " SELECT * FROM my_serie " ); // Use HTTP support
或者仅使用 HTTP
$ reader = new Http Reader ( $ http , $ options );
$ writer = new Http Writer ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
$ client -> mark (...); // Use HTTP support
$ client -> query ( " SELECT * FROM my_serie " ); // Use HTTP support
您可以使用query方法查询时序数据库。
$ client -> query ( ' select * from "mine" ' );
适配器返回 InfluxDB 响应的 json 解码正文,如下所示:
array(1) {
'results' =>
array(1) {
[0] =>
array(1) {
'series' =>
array(1) {
...
}
}
}
}
如果您更喜欢比原始响应更简单的响应,可以使用corley/influxdb-http-handlers
将原始 InfluxDB 响应转换为更简单的响应,例如:
array ( 1 ) {
' serie_name ' => array ( 2 ) {
[ 0 ] => array ( 4 ) {
' time ' => string( 30 ) " 2015-09-09T20:42:07.927267636Z "
' value1 ' => int( 1 )
' value2 ' => int( 2 )
' valueS ' => string( 6 ) " string "
}
[ 1 ] => array ( 4 ) {
' time ' => string( 30 ) " 2015-09-09T20:42:51.332853369Z "
' value1 ' => int( 2 )
' value2 ' => int( 4 )
' valueS ' => string( 11 ) " another-one "
}
}
}
您可以设置一组默认标签,SDK 将添加到您的指标中:
$ options = new Http Options ();
$ options -> setTags ([
" env " => " prod " ,
" region " => " eu-west-1 " ,
]);
SDK 标记所有添加这些标签的点。
您可以使用设置默认的retentionPolicy
$options->setRetentionPolicy("myPolicy");
这样,SDK 使用该策略而不是default
策略。
如果您代理 InfluxDB,通常您的端点中有一个前缀。
$ option -> setHost ( " proxy.influxdb.tld " );
$ option -> setPort ( 80 );
$ option -> setPrefix ( " /influxdb " ); // your prefix is: /influxdb
// final url will be: http://proxy.influxdb.tld:80/influxdb/write
$ client -> mark ( " serie " , [ " data " => " my-data " ]);
从 InfluxDB 版本>=0.9.3
开始,整数类型标有尾随i
。该库支持数据类型,特别是 PHP 类型默认以这种方式映射到 influxdb:
结果映射将是:
PHP | InfluxDB |
---|---|
整数 | 整型64 |
双倍的 | 浮动64 |
布尔值 | 布尔值 |
细绳 | 细绳 |
$ client -> mark ( " serie " , [
" value " => 12 , // Marked as int64
" elem " => 12.4 , // Marked as float64
]);
如果您想确保类型被有效地正确解析,您可以在发送操作期间直接强制它
$ client -> mark ( " serie " , [
" value " => new IntType ( 12 ), // Marked as int64
" elem " => new FloatType ( 12.4 ), // Marked as float64
" status " => new BoolType ( true ), // Marked as boolean
" line " => new StringType ( " 12w " ), // Marked as string
]);
对查询生成器感兴趣?
https://github.com/corley/dbal-influxdb
感谢 Doctrine DBAL(抽象层),您可以使用查询生成器
$ qb = $ conn -> createQueryBuilder ();
$ qb -> select ( " * " )
-> from ( " cpu_load_short " )
-> where ( " time = ? " )
-> setParameter ( 0 , 1434055562000000000 );
$ data = $ qb -> execute ();
foreach ( $ data -> fetchAll () as $ element ) {
// Use your element
}
$ config = new Doctrine DBAL Configuration ();
//..
$ connectionParams = array (
' dbname ' => ' mydb ' ,
' user ' => ' root ' ,
' password ' => ' root ' ,
' host ' => ' localhost ' ,
' port ' => 8086 ,
" driverClass " => " Corley \ DBAL \ Driver \ InfluxDB " ,
);
$ conn = Doctrine DBAL DriverManager:: getConnection ( $ connectionParams , $ config );
InfluxDBClient
类本身不支持任何数据库操作。这意味着您没有任何帮助函数来创建新数据库或列出实际数据库等。感谢InfluxDBManager
您可以使用预设的查询并创建您自己的个人查询,这些查询将针对 Influxdb 实例运行。
Manager
实例非常简单,您必须使用客户端实例来创建它。
$ manager = new Manager ( $ client ); // InfluxDBClient instance
管理器允许通过辅助方法addQuery
附加新查询。
$ manager -> addQuery ( " getExceptionsInMinutes " , function ( $ minutes ) {
return " SELECT * FROM app_exceptions WHERE time > now() - { $ minutes } m " ;
});
$ manager -> getExceptionsInMinutes ( 10 ); // The callable name
正如您所看到的,您必须标记您的匿名函数并通过管理器重用它。
为了收集和重用自定义查询,您可以定义查询对象:
class GetExceptionsInMinutes
{
public function __invoke ( $ minutes )
{
return " SELECT * FROM app_exceptions WHERE time > now() - { $ minutes } m " ;
}
public function __toString ()
{
return " getExceptionsInMinutes " ;
}
}
$ manager -> addQuery ( new GetExceptionsInMinutes ());
$ manager -> getExceptionsInMinutes ( 10 ); //Use the query
正如您所看到的,有效的查询命令应该可以通过__invoke
方法callable
,并且还应该可以通过__toString
方法序列化为字符串
该项目提供了一组有效查询的预设:
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
要验证您是否有sockets
扩展,只需发出:
php -m | grep sockets
如果您没有sockets
扩展,可以通过两种方式进行:
--enable-sockets
标志重新编译 PHPsockets
扩展。ext/sockets
目录phpize && ./configure && make -j && sudo make install
extension=sockets.so
到你的php.ini我们放弃了对 Guzzle 4 的支持,但我们在 PHP 7.0 之前测试了它作为工作 HTTP 适配器的情况,并且在版本 0.9.3 的项目中保持稳定。
如果您需要 Guzzle 4 作为 HTTP 适配器,则需要 0.9.3 版本
compose require corley/influxdb-sdk:0.9. *