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 어댑터를 사용하려면 sockets
확장으로 PHP를 컴파일해야 합니다.
용법
$ reader = . . .
$ options = new Udp Options ();
$ writer = new Udp Writer ( $ options );
$ client = new Client ( $ reader , $ writer );
UDP/IP 옵션 세트에는 InfluxDB 구성에서 직접 데이터베이스 및 보존 정책을 구성하는 host
및 port
속성만 있습니다.
실제로 Guzzle은 HTTP 클라이언트 라이브러리로 사용됩니다.
<?php
$ http = new GuzzleHttp Client ();
$ writer = . . .
$ options = new Http Options ();
$ reader = new Http Reader ( $ http , $ options );
$ client = new Client ( $ reader , $ writer );
물론 UDP/IP 프로토콜로 데이터 포인트를 쓰되 HTTP를 사용하여 정보를 읽기 위해 UdpIp 및 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
query 메소드를 사용하여 시계열 데이터베이스를 쿼리할 수 있습니다.
$ client -> query ( ' select * from "mine" ' );
어댑터는 다음과 같이 InfluxDB 응답의 json 디코딩 본문을 반환합니다.
array(1) {
'results' =>
array(1) {
[0] =>
array(1) {
'series' =>
array(1) {
...
}
}
}
}
원래 응답보다 더 간단한 응답을 선호하는 경우 원래 InfluxDB 응답을 다음과 같이 더 간단한 응답으로 변환하는 corley/influxdb-http-handlers
사용할 수 있습니다.
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 | 인플럭스DB |
---|---|
정수 | 정수64 |
더블 | 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
보시다시피 유효한 쿼리 명령은 __invoke
메서드를 통해 callable
할 수 있어야 하며 __toString
메서드를 통해 문자열로 직렬화할 수도 있어야 합니다.
이 프로젝트는 유효한 쿼리가 사전 설정된 상태로 제공됩니다.
InfluxDBQueryCreateDatabase
InfluxDBQueryDeleteDatabase
InfluxDBQueryGetDatabases
$ manager -> addQuery ( new CreateDatabase ());
$ manager -> addQuery ( new DeleteDatabase ());
$ manager -> addQuery ( new GetDatabases ());
sockets
확장이 있는지 확인하려면 다음을 실행하십시오.
php -m | grep sockets
sockets
확장이 없으면 다음 두 가지 방법으로 진행할 수 있습니다.
--enable-sockets
플래그를 사용하여 PHP를 다시 컴파일하세요.sockets
확장을 추출하여 컴파일하세요.ext/sockets
디렉토리에 입력하세요.phpize && ./configure && make -j && sudo make install
실행extension=sockets.so
추가하세요.Guzzle 4 지원을 중단했지만 최대 PHP 7.0에서 작동하는 HTTP 어댑터로 테스트했으며 이 프로젝트 버전 0.9.3에서는 안정적입니다.
0.9.3 버전에 필요한 HTTP 어댑터로 Guzzle 4가 필요한 경우
compose require corley/influxdb-sdk:0.9. *