InfluxDB: Difference between revisions
| (48 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
La version courante est la version 0.10 |
|||
[[Image:InfluxDB-WebUI.png|400px|thumb|right|InfluxDB WebUI]] |
|||
Vers la page de la version 0.8 [[InfluxDB 0.8]] |
|||
http://influxdb.com/ |
http://influxdb.com/ |
||
| Line 5: | Line 8: | ||
https://github.com/influxdb/influxdb |
https://github.com/influxdb/influxdb |
||
open-source distributed time series database |
open-source distributed time series database for storing metrics, events, and analytics. |
||
(metrics, events, and analytics) |
|||
developped in [[Go]] language |
developped in [[Go]] language |
||
* retention policy : data is automatically deleted after the retention period |
|||
* sharding : |
|||
* replication : |
|||
Voir https://speakerdeck.com/pauldix/introducing-influxdb-an-open-source-distributed-time-series-database |
Voir https://speakerdeck.com/pauldix/introducing-influxdb-an-open-source-distributed-time-series-database |
||
| Line 22: | Line 27: | ||
http://influxdb.com/download/ |
http://influxdb.com/download/ |
||
==On Linux (Debian)== |
|||
On OS X |
|||
<pre> |
<pre> |
||
# for 64-bit systems |
|||
brew update |
|||
wget https://dl.influxdata.com/influxdb/releases/influxdb_0.13.0_amd64.deb |
|||
brew install influxdb |
|||
sudo dpkg -i influxdb_0.13.0_amd64.deb |
|||
sudo service influxdb start |
|||
sudo service influxdb status |
|||
</pre> |
</pre> |
||
==On OS X== |
|||
Démarrage |
|||
<pre> |
<pre> |
||
brew update |
|||
influxdb -config=/usr/local/etc/influxdb.conf |
|||
brew install influxdb |
|||
</pre> |
</pre> |
||
==With [[Docker]]== |
|||
Naviguez sur http://localhost:8083/ |
|||
See https://hub.docker.com/r/tutum/influxdb/ |
|||
username : root & password : root |
|||
=Démarrage= |
|||
Pensez à changer ces valeurs quand vous mettez influxdb en production |
|||
=Premiers Pas= |
|||
==Via l'interface Web== |
|||
Depuis l'interface web, Créez une base : mydb |
|||
==On Linux Debian== |
|||
Depuis ''Database > Explore Data'' |
|||
Configurer Influxdb si besoin en éditant /etc/influxdb/influxdb.conf |
|||
Depuis ''write point'', Ajoutez un point dans la série temporelle ''log_lines'' |
|||
<pre> |
<pre> |
||
sudo service influxdb start |
|||
{ "line":"here's some useful log info from paul@influx.com", "like":1, "star": 5 } |
|||
ps wwwax | grep influxdb |
|||
</pre> |
</pre> |
||
puis un autre |
|||
L'arrêt se fait avec |
|||
<pre> |
<pre> |
||
sudo service influxdb stop |
|||
{ "line":"here's another useful log info from paul@influx.com", "like":2, "star": 4 } |
|||
</pre> |
|||
puis un autre |
|||
<pre> |
|||
{ "line":"here's some useful log info from didier@donsez.com", "like":1, "star": 5 } |
|||
</pre> |
</pre> |
||
==On MacOS X== |
|||
Exécutez les requêtes suivantes depuis ''read point'': |
|||
La liste des séries temporelles |
|||
<pre> |
<pre> |
||
sudo /etc/init.d/influxdb start |
|||
list series |
|||
</pre> |
|||
<pre> |
|||
select * from /.*/ limit 1 |
|||
</pre> |
</pre> |
||
Naviguez sur http://localhost:8083/ |
|||
username : root & password : root |
|||
Pensez à changer ces valeurs dans /usr/local/etc/influxdb.conf quand vous mettez influxdb en production |
|||
Les points de la série log_lines |
|||
<pre> |
|||
select line from log_lines |
|||
</pre> |
|||
Le fichier de configuration peut être généré au moyen de : |
|||
<pre> |
<pre> |
||
/opt/influxdb/influxd config > /etc/influxdb/influxdb.generated.conf |
|||
select like, star from log_lines |
|||
</pre> |
</pre> |
||
Remarque: les interfaces pour UDP, Graphite, ... peuvent être activées. |
|||
'''Remarque: en production, il convient de sécuriser les ports (ie HTTPS, ...) si le serveur n'est pas derrière un firewall'''. |
|||
Les deux points les plus récents |
|||
<pre> |
|||
select * from log_lines limit 2; |
|||
</pre> |
|||
=[https://influxdb.com/docs/v0.9/concepts/schema_and_data_layout.html Schema Design]= |
|||
Les points de la série log_lines dont la colonne line contient paul@influx.com |
|||
Le schéma de la base est constituée de time series contenant des datapoints. |
|||
<pre> |
|||
select line from log_lines where line =~ /paul@influx.com/ |
|||
</pre> |
|||
Un datapoint est un n-uplets: |
|||
Les points de la série log_lines dont la colonne like est supérieure à 1 |
|||
<pre> |
<pre> |
||
timeserie,tag=value,tag=value, measure=value,measure=value timestamp |
|||
select line from log_lines where like > 1 |
|||
</pre> |
</pre> |
||
Les datapoints sont indexés sur le timestamp (primaire) et sur les tags (secondaires) |
|||
Les points de la série log_lines des 24 dernières heures |
|||
<pre> |
|||
select * from log_lines |
|||
where time > now() - 24h |
|||
</pre> |
|||
=Premiers Pas= |
|||
==Via le shell== |
|||
Agrégat temporel (les fonctions d'agrégat sont : count(), min(), max(), mean(), mode(), median(), distinct(), percentile(), histogram(), derivative(), sum(), stddev(), first(), last()). |
|||
<pre> |
<pre> |
||
influx |
|||
select sum(like) as number_of_likes, mean(star) as mean_of_star from log_lines |
|||
influx -host localhost |
|||
group by time(1m) |
|||
where time > now() - 1d |
|||
</pre> |
|||
<pre> |
|||
select star, sum(like) as number_of_likes from log_lines |
|||
group by star, time(1m) |
|||
where time > now() - 1d |
|||
</pre> |
</pre> |
||
Créer la base |
|||
Remplissage des intervalles vides de points (avec fill()) |
|||
<pre> |
<pre> |
||
CREATE DATABASE mydb |
|||
select count(like) from events |
|||
SHOW DATABASES |
|||
group by time(1h) fill(0) |
|||
USE mydb |
|||
where time > now() - 24h |
|||
</pre> |
</pre> |
||
Insérer des points |
|||
Fusion (merge) de séries |
|||
<pre> |
<pre> |
||
INSERT cpu,host=serverA,region=us_west value=0.64 |
|||
select count(type) from user_events merge admin_events group by time(10m) |
|||
INSERT cpu,host=serverA,region=us_east value=0.70 |
|||
</pre> |
|||
INSERT cpu,host=serverA,region=us_west value=0.70 |
|||
INSERT cpu,host=serverA,region=us_east value=0.90 |
|||
INSERT payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230 |
|||
INSERT stock,symbol=AAPL bid=127.46,ask=127.48 |
|||
Attention, cette requête n'est pas un produit cartésien (SQL) |
|||
<pre> |
|||
select * from log_lines, log_cpu; |
|||
</pre> |
|||
INSERT temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000 |
|||
Jointure entre 2 séries |
|||
<pre> |
|||
select errors_per_minute.value / page_views_per_minute.value as error_rate_per_minute. |
|||
from errors_per_minute |
|||
inner join page_views_per_minute |
|||
</pre> |
</pre> |
||
Consulter la base |
|||
Création d'un [http://influxdb.com/docs/v0.8/api/continuous_queries.html Requêtes continues] |
|||
<pre> |
<pre> |
||
show series |
|||
select count(star) from log_lines group by time(10m), star |
|||
into log_lines.count_per_star.10m |
|||
</pre> |
|||
SELECT * FROM cpu |
|||
<pre> |
|||
SELECT * FROM cpu WHERE value >= 0.7 |
|||
select * from log_lines.count_per_star.10m |
|||
SELECT * FROM cpu LIMIT 1 |
|||
</pre> |
|||
SELECT value from cpu WHERE time > now() - 7d |
|||
SELECT mean(value) FROM cpu WHERE time > now() - 1h GROUP BY time(10m); |
|||
SELECT * FROM temperature |
|||
<pre> |
|||
drop continuous query <id> |
|||
</pre> |
</pre> |
||
Consulter la base en continue (''[https://influxdb.com/docs/v0.9/query_language/continuous_queries.html Continuous Queries]'') |
|||
Supprimez les points de toutes les séries temporelles dont la date est antérieure de 24 heures. |
|||
<pre> |
<pre> |
||
TODO |
|||
delete from /.*/ where time < now() - 24h |
|||
select * from /.*/ |
|||
</pre> |
|||
# Create a CQ to sample the 95% value from 5 minute buckets of the response_times measurement |
|||
Suppression d'une série |
|||
CREATE CONTINUOUS QUERY response_times_percentile ON mydb BEGIN |
|||
<pre> |
|||
SELECT percentile(value, 95) INTO "response_times.percentiles.5m.95" FROM response_times GROUP BY time(5m) |
|||
drop series log_lines |
|||
END |
|||
</pre> |
</pre> |
||
==Via l'interface REST== |
|||
Execute a query (pretty=true --> the output is prettily formatted) |
|||
<pre> |
|||
curl -G 'http://localhost:8086/db/mydb/series?u=root&p=root&pretty=true' --data-urlencode "q=select * from log_lines" |
|||
</pre> |
|||
Lister et supprimer des requêtes en continu |
|||
Write points ([http://influxdb.com/docs/v0.8/api/reading_and_writing_data.html#specifying-time-and-sequence-number-on-writes with timestamp and sequence numbers : the time_precision can be s, us, ms]) |
|||
<pre> |
<pre> |
||
SHOW CONTINUOUS QUERIES |
|||
curl -X POST -d @points.json 'http://localhost:8086/db/mydb/series?u=root&p=root&time_precision=ms' |
|||
</pre> |
|||
DROP CONTINUOUS QUERY response_times_percentile ON mydb |
|||
'''points.json''' |
|||
<pre> |
|||
[ |
|||
{ |
|||
"name": "log_lines", |
|||
"columns": ["time", "sequence_number", "line"], |
|||
"points": [ |
|||
[1400425947368, 1, "this line is first"], |
|||
[1400425947368, 2, "and this is second"], |
|||
[1400425948368, 3, "and this is third"] |
|||
] |
|||
} |
|||
] |
|||
</pre> |
</pre> |
||
Changer la rétention de la base mydb (ie les données ne sont conservées qu'un jour) |
|||
===Administration=== |
|||
create a database |
|||
<pre> |
<pre> |
||
ALTER RETENTION POLICY monitor ON mydb DURATION 1d REPLICATION 1 DEFAULT |
|||
curl -X POST 'http://localhost:8086/db?u=root&p=root' -d '{"name": "site_development"}' |
|||
</pre> |
</pre> |
||
drop a database |
|||
<pre> |
|||
curl -X DELETE 'http://localhost:8086/db/site_development?u=root&p=root' |
|||
</pre> |
|||
Consulter les statistiques |
|||
Autre : http://influxdb.com/docs/v0.8/api/administration.html |
|||
==Dashboard avec Influga== |
|||
[[Image:Influga.png|400px|thumb|right|Influga]] |
|||
[https://github.com/hakobera/influga Influga] is a InfluxDB Dashboard and Graph Editor. |
|||
Installez influga |
|||
<pre> |
<pre> |
||
SHOW STATS |
|||
sudo npm install influx |
|||
sudo npm install -g influga |
|||
</pre> |
</pre> |
||
Editez la configuration dans influga-config.json |
|||
<pre> |
|||
{ |
|||
"dashboardDbPath": "./db/influga.db", |
|||
"host": "localhost", |
|||
"port": 8086, |
|||
"database": "mydb", |
|||
"username": "root", |
|||
"password": "root" |
|||
} |
|||
</pre> |
|||
Consulter le diagnostique |
|||
Lancez le service |
|||
<pre> |
<pre> |
||
SHOW DIAGNOSTICS |
|||
influga start -c influga-config.json |
|||
</pre> |
</pre> |
||
Consulter le cluster |
|||
Naviguez sur http://localhost:8089/ et configurez le panel avec |
|||
<pre> |
<pre> |
||
SHOW SERVERS |
|||
select star, like from log_lines |
|||
</pre> |
</pre> |
||
==Dashboard avec [[Grafana]]== |
|||
http://influxdb.com/docs/v0.7/ui/grafana.html |
|||
Téléchargez Grafana |
|||
Consulter la base interne '''_internal''' |
|||
Modifiez config.example.js avec |
|||
<pre> |
<pre> |
||
USE _internal |
|||
datasources: { |
|||
show measurements |
|||
'eu-metrics': { |
|||
show series limit 10 |
|||
type: 'influxdb', |
|||
select * from httpd limit 10 |
|||
url: 'http://localhost:8086/db/mydb', |
|||
select * from runtime limit 10 |
|||
username: 'test', |
|||
password: 'test', |
|||
}, |
|||
'grafana': { |
|||
type: 'influxdb', |
|||
url: 'http://localhost:8086/db/grafana', |
|||
username: 'test', |
|||
password: 'test', |
|||
grafanaDB: true |
|||
}, |
|||
}, |
|||
</pre> |
</pre> |
||
==Via l'interface REST== |
|||
et Sauvegardez dans config.js |
|||
Ouvrez index.html |
|||
=Premières Requêtes= |
|||
==[[Node.js]]== |
|||
* https://github.com/bencevans/node-influx |
|||
Installez |
|||
<pre> |
<pre> |
||
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode \ |
|||
sudo npm install influx |
|||
"q=SELECT value FROM cpu WHERE region='us_west'" |
|||
</pre> |
</pre> |
||
Requêtes multiples |
|||
Editez le programme testinflux.js |
|||
<pre> |
<pre> |
||
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode \ |
|||
var influx = require('influx'); |
|||
"q=SELECT value FROM cpu WHERE region='us_west';SELECT count(value) FROM cpu WHERE region='us_west'" |
|||
console.log("Connect to database"); |
|||
var username = 'root'; |
|||
var password = 'root'; |
|||
var database = 'mydb'; |
|||
var dbInflux = influx({host : 'localhost', username : username, password : password, database : database}); |
|||
/* |
|||
console.log("Create database"); |
|||
dbInflux.createDatabase('mydb', function(err) { |
|||
if(err) throw err; |
|||
console.log('Database Created'); |
|||
}); |
|||
*/ |
|||
console.log("Write points"); |
|||
var i=10; |
|||
while(i--) { |
|||
dbInflux.writePoint('log_lines', { line: 'Yo', like: Math.random() * 10, star: Math.random() * 5 }, function(err) { |
|||
if(err) throw err; |
|||
}); |
|||
console.log("+"); |
|||
} |
|||
console.log("Query series"); |
|||
var query = 'SELECT * FROM log_lines WHERE time > now() - 24h'; |
|||
dbInflux.query(query, function(err, body) { |
|||
if(err!=null) throw err; |
|||
console.log(JSON.stringify(body[0].columns, null, '\t')); |
|||
console.log(JSON.stringify(body[0].points, null, '\t')); |
|||
}); |
|||
</pre> |
</pre> |
||
Affichage en seconde |
|||
Lancez le programme |
|||
<pre> |
<pre> |
||
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" \ |
|||
node testinflux.js |
|||
--data-urlencode "epoch=s" --data-urlencode "q=SELECT value FROM cpu WHERE region='us_west'" |
|||
</pre> |
</pre> |
||
Affichage d'un 'chunk' de 20000 |
|||
==[[PubNub]] to InfluxDB== |
|||
<pre>curl |
|||
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" \ |
|||
Créez un compte gratuit sur http://pubnub.com et renseignez les clés récues par mail |
|||
--data-urlencode "chunk_size=20000" --data-urlencode "q=SELECT * FROM cpu" |
|||
(les clés demo & demo fonctionnent quand même) |
|||
Installez |
|||
<pre> |
|||
sudo npm install influx |
|||
npm install pubnub |
|||
</pre> |
</pre> |
||
==Via l'interface Web== |
|||
Depuis l'interface web http://localhost:8083/, Créez une base : mydb |
|||
=Clustering & Replication= |
|||
Lancez le programme ''node pubnub2influx.js'' dans un terminal |
|||
Influxdb utilise le protocole [[Raft]] pour l'élection d'un leader : il faut configurer au minimum 3 machines avec des noeuds '''meta'''. Remarque : une machine pour être un noeud '''meta''' seul, un noeud '''data''' seul, ou bien les deux. |
|||
<pre> |
|||
Le nombre de noeuds '''data''' dépend du niveau de réplication désiré. |
|||
var influx = require('influx'); |
|||
https://docs.influxdata.com/influxdb/v0.10/guides/clustering/ |
|||
/* |
|||
var pubnub = require("pubnub").init({ |
|||
publish_key: 'your publish key', |
|||
subscribe_key: 'your subscribe key' |
|||
}); |
|||
*/ |
|||
Vérifier la configuration sous le shell influx |
|||
var pubnub = require("pubnub").init({ |
|||
publish_key: 'demo', |
|||
subscribe_key: 'demo' |
|||
}); |
|||
var channel = 'test/influxdb'; |
|||
var dbhost = 'localhost'; |
|||
var database = 'mydb'; |
|||
var username = 'root'; |
|||
var password = 'root'; |
|||
var timeSerie = 'pubnub_test_influxdb'; |
|||
var dbInflux = influx({host : dbhost, username : username, password : password, database : database}); |
|||
pubnub.subscribe({ |
|||
channel : channel, |
|||
callback : function(message) { |
|||
console.log( " > ", message ); |
|||
dbInflux.writePoint(timeSerie,message,function(err) { |
|||
if(err) throw err; |
|||
}); |
|||
} |
|||
}); |
|||
console.log("PubNub to InfluxDB bridge is started"); |
|||
</pre> |
|||
Lancez le programme ''node pubnub-pub.js'' dans un autre terminal |
|||
<pre> |
<pre> |
||
SHOW SERVERS |
|||
/* |
|||
var pubnub = require("pubnub").init({ |
|||
publish_key: 'your publish key', |
|||
subscribe_key: 'your subscribe key' |
|||
}); |
|||
*/ |
|||
var pubnub = require("pubnub").init({ |
|||
publish_key: 'demo', |
|||
subscribe_key: 'demo' |
|||
}); |
|||
var channel = 'test/influxdb'; |
|||
function publish() { |
|||
var message= { line: 'Yo', like: Math.random() * 10, star: Math.random() * 5 }; |
|||
pubnub.publish({ |
|||
channel : channel, |
|||
message : message, |
|||
callback : function(e) { console.log( "SUCCESS!", e ); }, |
|||
error : function(e) { console.log( "FAILED! RETRY PUBLISH!", e ); } |
|||
}); |
|||
setTimeout(publish, 500); |
|||
} |
|||
publish(); |
|||
console.log("PubNub publishing is started"); |
|||
</pre> |
</pre> |
||
=Backup= |
|||
Naviguez dans la time serie ''pubnub_test_influxdb'' de la base ''mydb'' avec la requête |
|||
[https://docs.influxdata.com/influxdb/v0.10/administration/backup_and_restore/ Manuel] |
|||
<pre> |
|||
SELECT star FROM pubnub_test_influxdb |
|||
</pre> |
|||
==[[Node.js]] et [[MQTT]]== |
|||
[[Image:InfluxDB-WebUI.png|400px|thumb|right|InfluxDB WebUI]] |
|||
Installez |
|||
<pre> |
<pre> |
||
influxd backup -database telegraf -retention default -since 2016-02-01T00:00:00Z /tmp/backup/telegraf-2016-02-01.db.backup |
|||
sudo npm install influx |
|||
sudo npm install mqtt |
|||
</pre> |
</pre> |
||
=Restore= |
|||
Lancez le programme ''node mqtt2influx.js'' dans un terminal |
|||
<pre> |
<pre> |
||
sudo service influxdb stop |
|||
var mqtt = require('mqtt') |
|||
influxd restore -database telegraf -datadir /var/lib/influxdb/data /tmp/backup/telegraf-2016-02-01.db.backup |
|||
var influx = require('influx'); |
|||
sudo service influxdb start |
|||
influx -execute 'show databases' |
|||
var broker = 'test.mosquitto.org'; |
|||
var port = 1883; |
|||
var topic = 'test/influxdb'; |
|||
var dbhost = 'localhost'; |
|||
var database = 'mydb'; |
|||
var username = 'root'; |
|||
var password = 'root'; |
|||
var timeSerie = 'mqtt_test_influxdb'; |
|||
var dbInflux = influx({host : dbhost, username : username, password : password, database : database}); |
|||
client = mqtt.createClient(port, broker); |
|||
client.subscribe(topic).on('message', function (topic, message) { |
|||
console.log("<"); |
|||
dbInflux.writePoint(timeSerie,JSON.parse(message),function(err) { |
|||
if(err) throw err; |
|||
}); |
|||
}); |
|||
console.log("MQTT to InfluxDB bridge is started"); |
|||
</pre> |
</pre> |
||
==Projets connexes== |
|||
Lancez le programme ''node mqttpub.js'' dans un autre terminal |
|||
==[[Telegraf]]== |
|||
<pre> |
|||
https://github.com/influxdb/telegraf |
|||
var mqtt = require('mqtt') |
|||
''agent written in Go for collecting metrics from the system it's running on, or from other services, and writing them into InfluxDB. '' |
|||
==[[Chronograf]]== |
|||
var broker = 'test.mosquitto.org'; |
|||
''Chronograf is a single binary web application that you can deploy behind your firewall to do ad hoc exploration of your time series data in InfluxDB.'' |
|||
var port = 1883; |
|||
([https://influxdata.com/time-series-platform/chronograf/ lien]) |
|||
var topic = 'test/influxdb'; |
|||
Installation et utilisation détaillées [[Chronograf|ici]]. |
|||
client = mqtt.createClient(port, broker); |
|||
==[[Kapacitor]]== |
|||
client.subscribe(topic); |
|||
Kapacitor is a data processing engine. It can process both stream (subscribe realtime) and batch (bulk query) data from InfluxDB. Kapacitor lets you define custom logic to process alerts with dynamic thresholds, match metrics for patterns, compute statistical anomalies, etc. ([https://influxdata.com/time-series-platform/kapacitor/ lien]) |
|||
function publish() { |
|||
var message= { line: 'Yo', like: Math.random() * 10, star: Math.random() * 5 }; |
|||
client.publish(topic, JSON.stringify(message)); |
|||
console.log(">"); |
|||
setTimeout(publish, 500); |
|||
} |
|||
publish(); |
|||
console.log("MQTT publishing is started"); |
|||
</pre> |
|||
Naviguez dans la time serie ''mqtt_test_influxdb'' de la base ''mydb'' avec la requête |
|||
<pre> |
|||
SELECT mean(star) as Mean_Star FROM mqtt_test_influxdb GROUP BY time(10s) |
|||
</pre> |
|||
==[[Apache Kafka]] to InfluxDB== |
|||
TODO |
|||
https://www.npmjs.org/package/kafka-node |
|||
==[[STOMP]] to InfluxDB== |
|||
TODO |
|||
https://github.com/benjaminws/stomp-js |
|||
==[[Octoblu]] to InfluDB== |
|||
TODO |
|||
<pre> |
|||
npm install skynet |
|||
npm install request |
|||
</pre> |
|||
<pre> |
|||
</pre> |
|||
=Extra= |
|||
==[[Node-RED]]== |
|||
* [[Jmxtrans]] |
|||
* https://github.com/node-red/node-red/issues/462 |
|||
* [[Grafana]] |
|||
Latest revision as of 15:46, 1 September 2016
La version courante est la version 0.10
Vers la page de la version 0.8 InfluxDB 0.8
https://github.com/influxdb/influxdb
open-source distributed time series database for storing metrics, events, and analytics.
developped in Go language
- retention policy : data is automatically deleted after the retention period
- sharding :
- replication :
Voir https://speakerdeck.com/pauldix/introducing-influxdb-an-open-source-distributed-time-series-database
Demo sur http://play.influxdb.com/ (source code)
InfluxDB @ AIR
Installation
On Linux (Debian)
# for 64-bit systems wget https://dl.influxdata.com/influxdb/releases/influxdb_0.13.0_amd64.deb sudo dpkg -i influxdb_0.13.0_amd64.deb sudo service influxdb start sudo service influxdb status
On OS X
brew update brew install influxdb
With Docker
See https://hub.docker.com/r/tutum/influxdb/
Démarrage
On Linux Debian
Configurer Influxdb si besoin en éditant /etc/influxdb/influxdb.conf
sudo service influxdb start ps wwwax | grep influxdb
L'arrêt se fait avec
sudo service influxdb stop
On MacOS X
sudo /etc/init.d/influxdb start
Naviguez sur http://localhost:8083/ username : root & password : root
Pensez à changer ces valeurs dans /usr/local/etc/influxdb.conf quand vous mettez influxdb en production
Le fichier de configuration peut être généré au moyen de :
/opt/influxdb/influxd config > /etc/influxdb/influxdb.generated.conf
Remarque: les interfaces pour UDP, Graphite, ... peuvent être activées.
Remarque: en production, il convient de sécuriser les ports (ie HTTPS, ...) si le serveur n'est pas derrière un firewall.
Schema Design
Le schéma de la base est constituée de time series contenant des datapoints.
Un datapoint est un n-uplets:
timeserie,tag=value,tag=value, measure=value,measure=value timestamp
Les datapoints sont indexés sur le timestamp (primaire) et sur les tags (secondaires)
Premiers Pas
Via le shell
influx influx -host localhost
Créer la base
CREATE DATABASE mydb SHOW DATABASES USE mydb
Insérer des points
INSERT cpu,host=serverA,region=us_west value=0.64 INSERT cpu,host=serverA,region=us_east value=0.70 INSERT cpu,host=serverA,region=us_west value=0.70 INSERT cpu,host=serverA,region=us_east value=0.90 INSERT payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230 INSERT stock,symbol=AAPL bid=127.46,ask=127.48 INSERT temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
Consulter la base
show series SELECT * FROM cpu SELECT * FROM cpu WHERE value >= 0.7 SELECT * FROM cpu LIMIT 1 SELECT value from cpu WHERE time > now() - 7d SELECT mean(value) FROM cpu WHERE time > now() - 1h GROUP BY time(10m); SELECT * FROM temperature
Consulter la base en continue (Continuous Queries)
TODO # Create a CQ to sample the 95% value from 5 minute buckets of the response_times measurement CREATE CONTINUOUS QUERY response_times_percentile ON mydb BEGIN SELECT percentile(value, 95) INTO "response_times.percentiles.5m.95" FROM response_times GROUP BY time(5m) END
Lister et supprimer des requêtes en continu
SHOW CONTINUOUS QUERIES DROP CONTINUOUS QUERY response_times_percentile ON mydb
Changer la rétention de la base mydb (ie les données ne sont conservées qu'un jour)
ALTER RETENTION POLICY monitor ON mydb DURATION 1d REPLICATION 1 DEFAULT
Consulter les statistiques
SHOW STATS
Consulter le diagnostique
SHOW DIAGNOSTICS
Consulter le cluster
SHOW SERVERS
Consulter la base interne _internal
USE _internal show measurements show series limit 10 select * from httpd limit 10 select * from runtime limit 10
Via l'interface REST
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode \ "q=SELECT value FROM cpu WHERE region='us_west'"
Requêtes multiples
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode \ "q=SELECT value FROM cpu WHERE region='us_west';SELECT count(value) FROM cpu WHERE region='us_west'"
Affichage en seconde
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" \ --data-urlencode "epoch=s" --data-urlencode "q=SELECT value FROM cpu WHERE region='us_west'"
Affichage d'un 'chunk' de 20000
curl curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" \ --data-urlencode "chunk_size=20000" --data-urlencode "q=SELECT * FROM cpu"
Via l'interface Web
Depuis l'interface web http://localhost:8083/, Créez une base : mydb
Clustering & Replication
Influxdb utilise le protocole Raft pour l'élection d'un leader : il faut configurer au minimum 3 machines avec des noeuds meta. Remarque : une machine pour être un noeud meta seul, un noeud data seul, ou bien les deux. Le nombre de noeuds data dépend du niveau de réplication désiré.
https://docs.influxdata.com/influxdb/v0.10/guides/clustering/
Vérifier la configuration sous le shell influx
SHOW SERVERS
Backup
influxd backup -database telegraf -retention default -since 2016-02-01T00:00:00Z /tmp/backup/telegraf-2016-02-01.db.backup
Restore
sudo service influxdb stop influxd restore -database telegraf -datadir /var/lib/influxdb/data /tmp/backup/telegraf-2016-02-01.db.backup sudo service influxdb start influx -execute 'show databases'
Projets connexes
Telegraf
https://github.com/influxdb/telegraf agent written in Go for collecting metrics from the system it's running on, or from other services, and writing them into InfluxDB.
Chronograf
Chronograf is a single binary web application that you can deploy behind your firewall to do ad hoc exploration of your time series data in InfluxDB. (lien)
Installation et utilisation détaillées ici.
Kapacitor
Kapacitor is a data processing engine. It can process both stream (subscribe realtime) and batch (bulk query) data from InfluxDB. Kapacitor lets you define custom logic to process alerts with dynamic thresholds, match metrics for patterns, compute statistical anomalies, etc. (lien)