ส่งตัววัดไปยัง InfluxDB และค้นหาข้อมูลใดๆ
โปรเจ็กต์นี้รองรับ InfluxDB API >= 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 |
สองเท่า | ลอย64 |
บูลีน | บูลีน |
เชือก | เชือก |
$ 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 (Abstract Layer) คุณสามารถใช้ตัวสร้างแบบสอบถามได้
$ 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
โดยแยกมันออกจากแหล่ง PHPext/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. *