メトリクスを InfluxDB に送信し、任意のデータをクエリします。
このプロジェクトは InfluxDB API >= 0.9
をサポートしています - InfluxDB v0.8 チェックアウト ブランチ 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" ' );
実際には 2 つのネットワーク アダプターをサポートしています
UDP/IP アダプターを使用するには、 sockets
拡張機能を使用してコンパイルされた PHP が必要です。
使用法
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
UDP/IP オプション セットにはhost
とport
プロパティのみがあり、InfluxDB 構成でデータベースと保持ポリシーを直接構成します。
実はHTTPクライアントライブラリとしてGuzzleが使われています。
<?php
$ http = new GuzzleHttp Client ();
$ writer = . . .
$ options = new Http Options ();
$ reader = new Http Reader ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
もちろん、UDP/IP プロトコルでデータ ポイントを書き込み、HTTP を使用して情報を読み取るために、UdpIp アダプターと 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) {
...
}
}
}
}
元の応答よりも単純な応答を好む場合は、元の InfluxDB 応答を次のようなより単純な応答に変換するcorley/influxdb-http-handlers
使用できます。
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 は、これらのタグを追加するすべてのポイントをマークします。
次を使用してデフォルトの保持ポリシーを設定できます。
$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 | 流入DB |
---|---|
整数 | int64 |
ダブル | float64 |
ブール値 | ブール値 |
弦 | 弦 |
$ 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 (Abstract Layer) のおかげで、クエリビルダーを使用できます。
$ 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
拡張機能がない場合は、次の 2 つの方法で続行できます。
--enable-sockets
フラグを指定して PHP を再コンパイルします。sockets
拡張機能をコンパイルするだけです。ext/sockets
ディレクトリに入りますphpize && ./configure && make -j && sudo make install
を発行します。extension=sockets.so
php.ini に追加します。Guzzle 4 のサポートは終了しましたが、PHP 7.0 までで HTTP アダプターが動作することをテストしており、このプロジェクトのバージョン 0.9.3 では安定しています。
HTTP アダプターとして Guzzle 4 が必要な場合は、バージョン 0.9.3 が必要です
compose require corley/influxdb-sdk:0.9. *