Kirim metrik ke InfluxDB dan tanyakan data apa pun.
Proyek ini mendukung InfluxDB API >= 0.9
- Untuk cabang checkout InfluxDB v0.8 0.3 (tidak lagi didukung)
Adaptor yang didukung:
Cukup gunakan komposer
$ composer require corley/influxdb-sdk: ~ 1
Atau tambahkan ke file composer.json
Anda
{
"require" : {
"corley/influxdb-sdk" : " ~1 "
}
}
Tambahkan poin baru:
$ client -> mark ( " app-search " , [
" key " => " this is my search "
]);
Atau gunakan pesan langsung InfluxDB
$ client -> mark ([
" tags " => [
" dc " => " eu-west-1 " ,
],
" points " => [
[
" measurement " => " instance " ,
" fields " => [
" cpu " => 18.12 ,
" free " => 712423 ,
],
],
]
]);
Ambil poin yang ada:
$ results = $ client -> query ( ' select * from "app-search" ' );
Sebenarnya kami mendukung dua adaptor jaringan
Untuk menggunakan adaptor UDP/IP, Anda harus memiliki PHP yang dikompilasi dengan ekstensi sockets
.
Penggunaan
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
Rangkaian opsi UDP/IP hanya memiliki properti host
dan port
yang Anda konfigurasikan database dan kebijakan penyimpanannya langsung di konfigurasi InfluxDB Anda
Sebenarnya Guzzle digunakan sebagai perpustakaan klien HTTP
<?php
$ http = new GuzzleHttp Client ();
$ writer = . . .
$ options = new Http Options ();
$ reader = new Http Reader ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
Tentu saja Anda dapat menggabungkan adaptor UdpIp dan Http untuk menulis titik data dengan protokol UDP/IP tetapi membaca informasi menggunakan 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
Atau gunakan hanya 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
Anda dapat mengkueri database deret waktu menggunakan metode kueri.
$ client -> query ( ' select * from "mine" ' );
Adaptor mengembalikan isi respons InfluxDB yang didekodekan json, seperti:
array(1) {
'results' =>
array(1) {
[0] =>
array(1) {
'series' =>
array(1) {
...
}
}
}
}
Jika Anda lebih menyukai respons yang lebih sederhana daripada respons asli, Anda dapat menggunakan corley/influxdb-http-handlers
yang mengonversi respons InfluxDB asli, menjadi respons yang lebih sederhana, seperti:
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 "
}
}
}
Anda dapat menetapkan serangkaian tag default yang akan ditambahkan SDK ke metrik Anda:
$ options = new Http Options ();
$ options -> setTags ([
" env " => " prod " ,
" region " => " eu-west-1 " ,
]);
SDK menandai semua titik menambahkan tag tersebut.
Anda dapat menyetel kebijakan retensi default menggunakan
$options->setRetentionPolicy("myPolicy");
Dengan cara itu SDK menggunakan kebijakan tersebut, bukan kebijakan default
.
Jika Anda memproksi InfluxDB, biasanya Anda memiliki awalan di titik akhir Anda.
$ 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 " ]);
Dari versi InfluxDB >=0.9.3
tipe integer ditandai dengan i
tambahan. Pustaka ini mendukung tipe data, khususnya tipe PHP yang dipetakan ke influxdb dengan cara ini secara default:
Dan hasil pemetaannya adalah:
PHP | masuknyaDB |
---|---|
ke dalam | int64 |
dobel | float64 |
boolean | boolean |
rangkaian | rangkaian |
$ client -> mark ( " serie " , [
" value " => 12 , // Marked as int64
" elem " => 12.4 , // Marked as float64
]);
Jika Anda ingin memastikan bahwa suatu tipe diurai secara efektif dengan benar, Anda dapat memaksanya secara langsung selama operasi pengiriman
$ 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
]);
Tertarik dengan Pembuat Kueri?
https://github.com/corley/dbal-influxdb
Berkat Doctrine DBAL (Abstract Layer) Anda dapat menggunakan pembuat kueri
$ 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 );
Kelas InfluxDBClient
tidak mendukung operasi database apa pun dengan sendirinya. Itu berarti Anda tidak memiliki fungsi pembantu untuk membuat database baru, atau membuat daftar database aktual dan sebagainya. Berkat InfluxDBManager
Anda dapat menggunakan preset kueri dan membuat kueri pribadi Anda yang akan dijalankan pada instance Influxdb.
Contoh Manager
sangat sederhana, Anda harus membuatnya dengan contoh klien.
$ manager = new Manager ( $ client ); // InfluxDBClient instance
Manajer mengizinkan untuk melampirkan kueri baru melalui metode pembantu addQuery
.
$ manager -> addQuery ( " getExceptionsInMinutes " , function ( $ minutes ) {
return " SELECT * FROM app_exceptions WHERE time > now() - { $ minutes } m " ;
});
$ manager -> getExceptionsInMinutes ( 10 ); // The callable name
Seperti yang Anda lihat, Anda harus memberi label pada fungsi anonim Anda dan menggunakannya kembali melalui pengelola.
Untuk mengumpulkan dan menggunakan kembali kueri khusus, Anda dapat menentukan objek kueri:
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
Seperti yang Anda lihat, perintah kueri yang valid harus dapat callable
melalui metode __invoke
dan juga dapat diserialkan sebagai string melalui metode __toString
Proyek ini keluar dengan serangkaian pertanyaan yang valid:
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
Untuk memverifikasi apakah Anda memiliki ekstensi sockets
, cukup keluarkan:
php -m | grep sockets
Jika Anda tidak memiliki ekstensi sockets
, Anda dapat melanjutkan dengan dua cara:
--enable-sockets
sockets
dengan mengekstraknya dari sumber PHP.ext/sockets
phpize && ./configure && make -j && sudo make install
extension=sockets.so
ke php.ini AndaKami menghentikan dukungan Guzzle 4, tetapi kami mengujinya sebagai adaptor HTTP yang berfungsi hingga PHP 7.0 dan stabil dengan proyek ini dengan versi 0.9.3.
Jika Anda memerlukan Guzzle 4 karena adaptor HTTP memerlukan versi 0.9.3
compose require corley/influxdb-sdk:0.9. *