Senden Sie Metriken an InfluxDB und fragen Sie alle Daten ab.
Dieses Projekt unterstützt InfluxDB API >= 0.9
– Für InfluxDB v0.8 Checkout Branch 0.3 (nicht mehr unterstützt)
Unterstützte Adapter:
Benutzen Sie einfach Composer
$ composer require corley/influxdb-sdk: ~ 1
Oder fügen Sie es Ihrer Datei composer.json
hinzu
{
"require" : {
"corley/influxdb-sdk" : " ~1 "
}
}
Neue Punkte hinzufügen:
$ client -> mark ( " app-search " , [
" key " => " this is my search "
]);
Oder verwenden Sie InfluxDB-Direktnachrichten
$ client -> mark ([
" tags " => [
" dc " => " eu-west-1 " ,
],
" points " => [
[
" measurement " => " instance " ,
" fields " => [
" cpu " => 18.12 ,
" free " => 712423 ,
],
],
]
]);
Vorhandene Punkte abrufen:
$ results = $ client -> query ( ' select * from "app-search" ' );
Tatsächlich unterstützen wir zwei Netzwerkadapter
Um den UDP/IP-Adapter verwenden zu können, muss PHP mit der sockets
-Erweiterung kompiliert sein.
Verwendung
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
Der UDP/IP-Optionssatz verfügt nur über host
und port
. Sie konfigurieren Datenbank- und Aufbewahrungsrichtlinien direkt in Ihrer InfluxDB-Konfiguration
Tatsächlich wird Guzzle als HTTP-Client-Bibliothek verwendet
<?php
$ http = new GuzzleHttp Client ();
$ writer = . . .
$ options = new Http Options ();
$ reader = new Http Reader ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
Natürlich können Sie UDP/IP- und HTTP-Adapter kombinieren, um Datenpunkte mit dem UDP/IP-Protokoll zu schreiben, Informationen aber über HTTP zu lesen.
$ 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
Oder verwenden Sie nur 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
Mit der Abfragemethode können Sie die Zeitreihendatenbank abfragen.
$ client -> query ( ' select * from "mine" ' );
Der Adapter gibt den JSON-dekodierten Hauptteil der InfluxDB-Antwort zurück, etwa so:
array(1) {
'results' =>
array(1) {
[0] =>
array(1) {
'series' =>
array(1) {
...
}
}
}
}
Wenn Sie eine einfachere Antwort als die ursprüngliche bevorzugen, können Sie corley/influxdb-http-handlers
verwenden, die die ursprüngliche InfluxDB-Antwort in eine einfachere Antwort umwandeln, etwa so:
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 "
}
}
}
Sie können eine Reihe von Standard-Tags festlegen, die das SDK zu Ihren Metriken hinzufügt:
$ options = new Http Options ();
$ options -> setTags ([
" env " => " prod " ,
" region " => " eu-west-1 " ,
]);
Das SDK markiert alle Punkte, an denen diese Tags hinzugefügt werden.
Sie können mithilfe von eine Standard-RetentionPolicy festlegen
$options->setRetentionPolicy("myPolicy");
Auf diese Weise verwendet das SDK diese Richtlinie anstelle der default
.
Wenn Sie Ihre InfluxDB als Proxy verwenden, haben Ihre Endpunkte normalerweise ein Präfix.
$ 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 " ]);
Ab InfluxDB-Version >=0.9.3
werden Ganzzahltypen mit einem nachgestellten i
gekennzeichnet. Diese Bibliothek unterstützt Datentypen, insbesondere PHP-Typen werden influxdb standardmäßig auf diese Weise zugeordnet:
Und die resultierende Zuordnung wird sein:
PHP | InfluxDB |
---|---|
int | int64 |
doppelt | float64 |
Boolescher Wert | Boolescher Wert |
Zeichenfolge | Zeichenfolge |
$ client -> mark ( " serie " , [
" value " => 12 , // Marked as int64
" elem " => 12.4 , // Marked as float64
]);
Wenn Sie sicherstellen möchten, dass ein Typ effektiv korrekt analysiert wird, können Sie dies direkt während des Sendevorgangs erzwingen
$ 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
]);
Interessiert an einem Abfrage-Generator?
https://github.com/corley/dbal-influxdb
Dank Doctrine DBAL (Abstract Layer) können Sie den Abfrage-Builder verwenden
$ 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 );
Die Klasse InfluxDBClient
unterstützt selbst keine Datenbankoperationen. Das bedeutet, dass Sie keine Hilfsfunktion zum Erstellen neuer Datenbanken, zum Auflisten tatsächlicher Datenbanken usw. haben. Dank InfluxDBManager
können Sie eine Voreinstellung von Abfragen verwenden und Ihre eigenen persönlichen Abfragen erstellen, die für die Influxdb-Instanz ausgeführt werden.
Die Manager
-Instanz ist sehr einfach, Sie müssen sie mit einer Client-Instanz erstellen.
$ manager = new Manager ( $ client ); // InfluxDBClient instance
Der Manager ermöglicht das Anhängen neuer Abfragen über eine Hilfsmethode addQuery
.
$ manager -> addQuery ( " getExceptionsInMinutes " , function ( $ minutes ) {
return " SELECT * FROM app_exceptions WHERE time > now() - { $ minutes } m " ;
});
$ manager -> getExceptionsInMinutes ( 10 ); // The callable name
Wie Sie sehen, müssen Sie Ihre anonyme Funktion kennzeichnen und über den Manager wiederverwenden.
Um benutzerdefinierte Abfragen zu sammeln und wiederzuverwenden, können Sie Abfrageobjekte definieren:
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
Wie Sie sehen, sollte ein gültiger Abfragebefehl über die __invoke
-Methode callable
sein und auch über die __toString
-Methode als Strings serialisierbar sein
Dieses Projekt enthält eine Voreinstellung gültiger Abfragen:
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
Um zu überprüfen, ob Sie über die sockets
Erweiterung verfügen, geben Sie einfach Folgendes ein:
php -m | grep sockets
Wenn Sie nicht über die sockets
Erweiterung verfügen, können Sie auf zwei Arten vorgehen:
--enable-sockets
neusockets
Erweiterung, indem Sie sie aus der PHP-Quelle extrahieren.ext/sockets
einphpize && ./configure && make -j && sudo make install
ausextension=sockets.so
zu Ihrer php.ini hinzuWir verzichten auf die Guzzle 4-Unterstützung, haben sie jedoch als funktionierender HTTP-Adapter bis PHP 7.0 getestet und laufen mit diesem Projekt mit Version 0.9.3 stabil.
Wenn Sie Guzzle 4 als HTTP-Adapter benötigen, benötigen Sie die Version 0.9.3
compose require corley/influxdb-sdk:0.9. *