أرسل المقاييس إلى 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 |
مزدوج | 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. *