將指標傳送到 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. *