Envie métricas para o InfluxDB e consulte quaisquer dados.
Este projeto suporta API InfluxDB >= 0.9
- Para InfluxDB v0.8 checkout branch 0.3 (não mais suportado)
Adaptadores suportados:
Basta usar o compositor
$ composer require corley/influxdb-sdk: ~ 1
Ou adicione ao seu arquivo composer.json
{
"require" : {
"corley/influxdb-sdk" : " ~1 "
}
}
Adicione novos pontos:
$ client -> mark ( " app-search " , [
" key " => " this is my search "
]);
Ou use mensagens diretas do InfluxDB
$ client -> mark ([
" tags " => [
" dc " => " eu-west-1 " ,
],
" points " => [
[
" measurement " => " instance " ,
" fields " => [
" cpu " => 18.12 ,
" free " => 712423 ,
],
],
]
]);
Recuperar pontos existentes:
$ results = $ client -> query ( ' select * from "app-search" ' );
Na verdade, suportamos dois adaptadores de rede
Para usar o adaptador UDP/IP é necessário ter o PHP compilado com a extensão sockets
.
Uso
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
O conjunto de opções UDP/IP possui apenas propriedades host
e port
Você configura o banco de dados e as políticas de retenção diretamente na configuração do InfluxDB
Na verdade, Guzzle é usado 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 );
É claro que você pode misturar adaptadores UdpIp e Http para gravar pontos de dados com o protocolo UDP/IP, mas ler informações 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
Ou use apenas o 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
Você pode consultar o banco de dados de série temporal usando o método de consulta.
$ client -> query ( ' select * from "mine" ' );
O adaptador retorna o corpo decodificado JSON da resposta do InfluxDB, algo como:
array(1) {
'results' =>
array(1) {
[0] =>
array(1) {
'series' =>
array(1) {
...
}
}
}
}
Se você preferir uma resposta mais simples que a original, você pode usar corley/influxdb-http-handlers
que convertem a resposta original do InfluxDB, em uma resposta mais simples, 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 "
}
}
}
Você pode definir um conjunto de tags padrão que o SDK adicionará às suas métricas:
$ options = new Http Options ();
$ options -> setTags ([
" env " => " prod " ,
" region " => " eu-west-1 " ,
]);
O SDK marca todos os pontos para adicionar essas tags.
Você pode definir umatentionPolicy padrão usando
$options->setRetentionPolicy("myPolicy");
Dessa forma, o SDK usa essa política em vez da política default
.
Se você proxy seu InfluxDB normalmente terá um prefixo em seus endpoints.
$ 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 " ]);
Na versão do InfluxDB >=0.9.3
os tipos inteiros são marcados com um i
à direita. Esta biblioteca suporta tipos de dados, em particular os tipos PHP são mapeados para influxdb desta forma por padrão:
E o mapeamento resultante será:
PHP | InfluxoDB |
---|---|
interno | int64 |
dobro | float64 |
booleano | booleano |
corda | corda |
$ client -> mark ( " serie " , [
" value " => 12 , // Marked as int64
" elem " => 12.4 , // Marked as float64
]);
Se você quiser garantir que um tipo seja analisado corretamente, você pode forçá-lo diretamente durante a operação de envio
$ 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
]);
Interessado em um Construtor de Consultas?
https://github.com/corley/dbal-influxdb
Graças ao Doctrine DBAL (Abstract Layer) você pode usar o construtor 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 );
A classe InfluxDBClient
não suporta nenhuma operação de banco de dados por si só. Isso significa que você não tem nenhuma função auxiliar para criar novos bancos de dados ou listar bancos de dados reais e assim por diante. Graças ao InfluxDBManager
você pode usar uma predefinição de consultas e criar suas próprias consultas pessoais que serão executadas na instância do Influxdb.
A instância Manager
é muito simples, você deve criá-la com uma instância do cliente.
$ manager = new Manager ( $ client ); // InfluxDBClient instance
O gerenciador permite anexar novas consultas por meio de um 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 você pode ver, você deve rotular sua função anônima e reutilizá-la através do gerenciador.
Para coletar e reutilizar consultas personalizadas você pode 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 você pode ver, o comando de consulta válido deve poder ser callable
por meio do método __invoke
e também serializável como strings por meio do método __toString
Este projeto sai com uma predefinição de consultas válidas:
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
Para verificar se você possui a extensão sockets
, basta emitir:
php -m | grep sockets
Se você não possui a extensão sockets
, pode proceder de duas maneiras:
--enable-sockets
sockets
extraindo-a do código-fonte do PHP.ext/sockets
phpize && ./configure && make -j && sudo make install
extension=sockets.so
ao seu php.iniAbandonamos o suporte ao Guzzle 4, mas o testamos como adaptador HTTP funcional até PHP 7.0 e é estável com este projeto na versão 0.9.3.
Se você precisar do Guzzle 4 como adaptador HTTP, exija a versão 0.9.3
compose require corley/influxdb-sdk:0.9. *