Envíe métricas a InfluxDB y consulte cualquier dato.
Este proyecto admite la API de InfluxDB >= 0.9
- Para la rama de pago 0.3 de InfluxDB v0.8 (ya no es compatible)
Adaptadores compatibles:
Solo usa compositor
$ composer require corley/influxdb-sdk: ~ 1
O agréguelo a su archivo composer.json
{
"require" : {
"corley/influxdb-sdk" : " ~1 "
}
}
Añadir nuevos puntos:
$ client -> mark ( " app-search " , [
" key " => " this is my search "
]);
O utilice mensajes directos de InfluxDB
$ client -> mark ([
" tags " => [
" dc " => " eu-west-1 " ,
],
" points " => [
[
" measurement " => " instance " ,
" fields " => [
" cpu " => 18.12 ,
" free " => 712423 ,
],
],
]
]);
Recuperar puntos existentes:
$ results = $ client -> query ( ' select * from "app-search" ' );
En realidad, admitimos dos adaptadores de red.
Para poder utilizar el adaptador UDP/IP debes tener PHP compilado con la extensión sockets
.
Uso
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
El conjunto de opciones UDP/IP solo tiene propiedades host
y port
Usted configura la base de datos y las políticas de retención directamente en su configuración de InfluxDB.
En realidad, Guzzle se utiliza como biblioteca cliente HTTP.
<?php
$ http = new GuzzleHttp Client ();
$ writer = . . .
$ options = new Http Options ();
$ reader = new Http Reader ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
Por supuesto, puede combinar adaptadores UdpIp y Http para escribir puntos de datos con el protocolo UDP/IP pero leer información usando 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
O utilice sólo el 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
Puede consultar la base de datos de series temporales utilizando el método de consulta.
$ client -> query ( ' select * from "mine" ' );
El adaptador devuelve el cuerpo decodificado json de la respuesta de InfluxDB, algo así como:
array(1) {
'results' =>
array(1) {
[0] =>
array(1) {
'series' =>
array(1) {
...
}
}
}
}
Si prefiere una respuesta más simple que la original, puede usar corley/influxdb-http-handlers
que convierten la respuesta original de InfluxDB en una respuesta más simple, algo como:
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 "
}
}
}
Puede configurar un conjunto de etiquetas predeterminadas que el SDK agregará a sus métricas:
$ options = new Http Options ();
$ options -> setTags ([
" env " => " prod " ,
" region " => " eu-west-1 " ,
]);
El SDK marca todos los puntos agregando esas etiquetas.
Puede establecer una política de retención predeterminada usando
$options->setRetentionPolicy("myPolicy");
De esa manera, el SDK utiliza esa política en lugar de la política default
.
Si representa su InfluxDB, normalmente tendrá un prefijo en sus puntos finales.
$ 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 " ]);
Desde la versión de InfluxDB >=0.9.3
los tipos de números enteros están marcados con una i
al final. Esta biblioteca admite tipos de datos, en particular los tipos PHP se asignan a influxdb de esta manera de forma predeterminada:
Y el mapeo resultante será:
PHP | InflujoDB |
---|---|
entero | int64 |
doble | flotador64 |
booleano | booleano |
cadena | cadena |
$ client -> mark ( " serie " , [
" value " => 12 , // Marked as int64
" elem " => 12.4 , // Marked as float64
]);
Si desea asegurarse de que un tipo se analice correctamente, puede forzarlo directamente durante la operación de envío.
$ 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
]);
¿Interesado en un generador de consultas?
https://github.com/corley/dbal-influxdb
Gracias a Doctrine DBAL (Abstract Layer) puedes utilizar el generador de consultas
$ 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 );
La clase InfluxDBClient
no admite ninguna operación de base de datos por sí sola. Eso significa que no tiene ninguna función auxiliar para crear nuevas bases de datos o enumerar bases de datos reales, etc. Gracias a InfluxDBManager
puede utilizar un conjunto preestablecido de consultas y crear sus propias consultas personales que se ejecutarán en la instancia de Influxdb.
La instancia Manager
es muy sencilla, hay que crearla con una instancia de cliente.
$ manager = new Manager ( $ client ); // InfluxDBClient instance
El administrador permite adjuntar nuevas consultas mediante un método auxiliar addQuery
.
$ manager -> addQuery ( " getExceptionsInMinutes " , function ( $ minutes ) {
return " SELECT * FROM app_exceptions WHERE time > now() - { $ minutes } m " ;
});
$ manager -> getExceptionsInMinutes ( 10 ); // The callable name
Como puede ver, debe etiquetar su función anónima y reutilizarla a través del administrador.
Para recopilar y reutilizar consultas personalizadas, puede definir objetos de consulta:
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
Como puede ver, el comando de consulta válido debe poder callable
mediante el método __invoke
y también debe ser serializable como cadenas mediante el método __toString
.
Este proyecto sale con un ajuste preestablecido de consultas válidas:
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
Para verificar si tiene la extensión sockets
simplemente emita un:
php -m | grep sockets
Si no tienes la extensión sockets
, puedes proceder de dos maneras:
--enable-sockets
sockets
extrayéndola de la fuente PHP.ext/sockets
phpize && ./configure && make -j && sudo make install
extension=sockets.so
a su php.iniEliminamos la compatibilidad con Guzzle 4, pero lo probamos como adaptador HTTP funcional hasta PHP 7.0 y es estable con este proyecto con la versión 0.9.3.
Si necesita Guzzle 4 como adaptador HTTP, lo requiere para la versión 0.9.3
compose require corley/influxdb-sdk:0.9. *