Difference between revisions of "Chronograf"
Jump to navigation
Jump to search
Line 58: | Line 58: | ||
INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.60,disk=0.21 |
INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.60,disk=0.21 |
||
INSERT cluster,host=serverB,region=us_west cpu=0.40,mem=0.80,disk=0.4 |
INSERT cluster,host=serverB,region=us_west cpu=0.40,mem=0.80,disk=0.4 |
||
+ | </pre> |
||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==Utilisation en continu== |
||
+ | Exécuter les 2 scripts Node.js suivants dans 2 terminaux. |
||
+ | |||
+ | <pre> |
||
+ | npm install mqtt |
||
+ | npm install influxdb |
||
+ | </pre> |
||
+ | |||
+ | |||
+ | <pre> |
||
+ | node mqtt2influxdb.js |
||
+ | </pre> |
||
+ | |||
+ | <pre> |
||
+ | node mqttpub.js |
||
+ | </pre> |
||
+ | |||
+ | |||
+ | |||
+ | mqtt2influxdb.js |
||
+ | <pre> |
||
+ | // MQTT to InfluxDB bridge |
||
+ | // (c) Didier DONSEZ, 2015-2016 |
||
+ | |||
+ | // Tested with InfluxDB v0.9 |
||
+ | |||
+ | var mqtt = require('mqtt') |
||
+ | var influx = require('influx'); |
||
+ | |||
+ | var mqtt_url = 'mqtt://test.mosquitto.org'; |
||
+ | var topic = 'test/influxdb'; |
||
+ | |||
+ | |||
+ | var dbhost = 'localhost'; |
||
+ | var database = 'xnet'; |
||
+ | var username = 'root'; |
||
+ | var password = 'root'; |
||
+ | |||
+ | |||
+ | var seriesName = 'cluster'; |
||
+ | var tags = { "host":"serverA","region":"us_west"}; |
||
+ | |||
+ | |||
+ | var dbInflux = influx( { |
||
+ | // single-host configuration |
||
+ | host : dbhost, |
||
+ | port : 8086, // optional, default 8086 |
||
+ | protocol : 'http', // optional, default 'http' |
||
+ | username : username, |
||
+ | password : password, |
||
+ | database : database |
||
+ | }) |
||
+ | |||
+ | client = mqtt.connect(mqtt_url); |
||
+ | |||
+ | client.on('connect', function () { |
||
+ | |||
+ | console.log("Connected to " + mqtt_url); |
||
+ | |||
+ | client.subscribe(topic).on('message', function (topic, message) { |
||
+ | var date=new Date(); |
||
+ | console.log(date.toISOString()+" <-- "+ message); |
||
+ | var values = JSON.parse(message); |
||
+ | values.time = date; |
||
+ | dbInflux.writePoint(seriesName, values, tags, function(err, response) { if(err) throw err; }) |
||
+ | }); |
||
+ | |||
+ | // TODO add other event handlers here |
||
+ | |||
+ | }); |
||
+ | |||
+ | console.log("MQTT to InfluxDB bridge is started"); |
||
+ | </pre> |
||
+ | |||
+ | mqttpub.js |
||
+ | <pre> |
||
+ | var mqtt = require('mqtt') |
||
+ | |||
+ | var mqtt_url = 'mqtt://test.mosquitto.org'; |
||
+ | var topic = 'test/influxdb'; |
||
+ | var publishing_period = 1000; // in ms |
||
+ | |||
+ | client = mqtt.connect(mqtt_url); |
||
+ | |||
+ | //client.subscribe(topic); |
||
+ | |||
+ | var mem = Math.random(); |
||
+ | var disk = Math.random(); |
||
+ | var cpu; |
||
+ | |||
+ | function publish() { |
||
+ | |||
+ | mem = mem+(Math.random()/10)-0.05; |
||
+ | if(mem<0) { mem=0 }; |
||
+ | if(mem>1) { mem=1 }; |
||
+ | |||
+ | disk = disk+(Math.random()/20)-0.025; |
||
+ | if(disk<0) { disk=0 }; |
||
+ | if(disk>1) { disk=1 }; |
||
+ | |||
+ | cpu = Math.random(); |
||
+ | |||
+ | |||
+ | var message= { |
||
+ | cpu: cpu, |
||
+ | mem: mem, |
||
+ | disk: disk, |
||
+ | }; |
||
+ | |||
+ | client.publish(topic, JSON.stringify(message)); |
||
+ | console.log(new Date().toISOString()+" --> "+ JSON.stringify(message)); |
||
+ | setTimeout(publish, publishing_period); |
||
+ | } |
||
+ | |||
+ | publish(); |
||
+ | |||
+ | console.log("MQTT publishing is started"); |
||
</pre> |
</pre> |
||
Revision as of 12:47, 4 February 2016
Interface de visualisation de séries temporelles stockées dans une base de données InfluxDB. Permet de créer des dashboards à partir des graphiques définis.
https://influxdata.com/time-series-platform/chronograf/
Installation
Il faut préalablement installer InfluxDB.
wget https://s3.amazonaws.com/get.influxdb.org/chronograf/chronograf_0.10.0-rc2_amd64.deb sudo dpkg -i chronograf_0.10.0-rc2_amd64.deb
Si besoin, Configurer Chronograf en éditant le fichier /opt/etc/chronograf.toml
Démarrer Chronograf
sudo service chronograf start ps wwwax | grep chronograf
Remarque: Chronograf stocke ses informations dans ~/chronograf.db
Utilisation
Naviguer sur https://localhost:10000/
- Ajoutant des entrées à la série cluster depuis le shell d’influx
CREATE DATABASE mycluster SHOW DATABASES USE mycluster SHOW SERVERS INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.67,disk=0.20 INSERT cluster,host=serverB,region=us_west cpu=0.50,mem=0.99,disk=0.30 INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.60,disk=0.20 INSERT cluster,host=serverB,region=us_west cpu=0.53,mem=0.97,disk=0.29 INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.70,disk=0.21 INSERT cluster,host=serverB,region=us_west cpu=0.50,mem=0.80,disk=0.22 SELECT * FROM cluster SELECT * FROM cluster WHERE host='serverA'
- Ajouter un graphique avec la requête SELECT * FROM cluster WHERE host='serverA'
- Ajouter un graphique avec la requête SELECT cpu FROM cluster WHERE host='serverA'
- Ajouter un graphique avec la requête SELECT cpu FROM cluster WHERE host='serverB'
- Ajouter un dashboard
- Ajouter les graphiques existants au dashboard
- Tester l’affichage dynamique des graphiques en ajoutant des entrées à la série cluster depuis le shell d’influx
INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.30,disk=0.10 INSERT cluster,host=serverB,region=us_west cpu=0.50,mem=0.95,disk=0.50 INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.60,disk=0.20 INSERT cluster,host=serverB,region=us_west cpu=0.53,mem=0.97,disk=0.19 INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.60,disk=0.21 INSERT cluster,host=serverB,region=us_west cpu=0.40,mem=0.80,disk=0.4
Utilisation en continu
Exécuter les 2 scripts Node.js suivants dans 2 terminaux.
npm install mqtt npm install influxdb
node mqtt2influxdb.js
node mqttpub.js
mqtt2influxdb.js
// MQTT to InfluxDB bridge // (c) Didier DONSEZ, 2015-2016 // Tested with InfluxDB v0.9 var mqtt = require('mqtt') var influx = require('influx'); var mqtt_url = 'mqtt://test.mosquitto.org'; var topic = 'test/influxdb'; var dbhost = 'localhost'; var database = 'xnet'; var username = 'root'; var password = 'root'; var seriesName = 'cluster'; var tags = { "host":"serverA","region":"us_west"}; var dbInflux = influx( { // single-host configuration host : dbhost, port : 8086, // optional, default 8086 protocol : 'http', // optional, default 'http' username : username, password : password, database : database }) client = mqtt.connect(mqtt_url); client.on('connect', function () { console.log("Connected to " + mqtt_url); client.subscribe(topic).on('message', function (topic, message) { var date=new Date(); console.log(date.toISOString()+" <-- "+ message); var values = JSON.parse(message); values.time = date; dbInflux.writePoint(seriesName, values, tags, function(err, response) { if(err) throw err; }) }); // TODO add other event handlers here }); console.log("MQTT to InfluxDB bridge is started");
mqttpub.js
var mqtt = require('mqtt') var mqtt_url = 'mqtt://test.mosquitto.org'; var topic = 'test/influxdb'; var publishing_period = 1000; // in ms client = mqtt.connect(mqtt_url); //client.subscribe(topic); var mem = Math.random(); var disk = Math.random(); var cpu; function publish() { mem = mem+(Math.random()/10)-0.05; if(mem<0) { mem=0 }; if(mem>1) { mem=1 }; disk = disk+(Math.random()/20)-0.025; if(disk<0) { disk=0 }; if(disk>1) { disk=1 }; cpu = Math.random(); var message= { cpu: cpu, mem: mem, disk: disk, }; client.publish(topic, JSON.stringify(message)); console.log(new Date().toISOString()+" --> "+ JSON.stringify(message)); setTimeout(publish, publishing_period); } publish(); console.log("MQTT publishing is started");
Utilisation avancée avec Telegraf
TODO
Arret de Chronograf
sudo service chronograf stop