Отправьте метрики в InfluxDB и запросите любые данные.
Этот проект поддерживает API InfluxDB >= 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" ' );
На самом деле мы поддерживаем два сетевых адаптера
Чтобы использовать адаптер UDP/IP, у вас должен быть скомпилирован PHP с расширением sockets
.
Использование
$ 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
Вы можете запросить базу данных временных рядов, используя метод запроса.
$ client -> query ( ' select * from "mine" ' );
Адаптер возвращает декодированное в формате json тело ответа InfluxDB, что-то вроде:
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 отмечает все точки добавления этих тегов.
Вы можете установить политику хранения по умолчанию, используя
$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 |
---|---|
интервал | 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 (Абстрактный уровень) вы можете использовать построитель запросов.
$ 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
Как вы можете видеть, допустимую команду запроса следует callable
с помощью метода __invoke
, а также сериализовать как строки с помощью метода __toString
.
Этот проект поставляется с набором допустимых запросов:
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
Чтобы проверить, есть ли у вас расширение sockets
, просто введите:
php -m | grep sockets
Если у вас нет расширения sockets
, вы можете действовать двумя способами:
--enable-sockets
sockets
, извлекая его из исходного кода PHP.ext/sockets
phpize && ./configure && make -j && sudo make install
extension=sockets.so
в ваш php.ini.Мы отказались от поддержки Guzzle 4, но мы протестировали его как рабочий HTTP-адаптер до PHP 7.0 и он стабилен в этом проекте с версией 0.9.3.
Если вам нужен Guzzle 4 в качестве HTTP-адаптера, требуется версия 0.9.3.
compose require corley/influxdb-sdk:0.9. *