Chronograf: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[Image:chronograf-graph.png|300px|right|thumb|Définition d'un graphique dans Chronograf]] |
[[Image:chronograf-graph.png|300px|right|thumb|Définition d'un graphique dans Chronograf]] |
||
[[Image:chronograf- |
[[Image:chronograf-dashboard.png|300px|right|thumb|Affichage d'un dashboard dans Chronograf]] |
||
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. |
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. |
||
Line 23: | Line 23: | ||
ps wwwax | grep chronograf |
ps wwwax | grep chronograf |
||
</pre> |
</pre> |
||
Remarque: Chronograf stocke ses informations dans ~/chronograf.db |
|||
==Utilisation== |
==Utilisation== |
||
Naviguer sur https://localhost:10000/ |
Naviguer sur https://localhost:10000/ |
||
Ajoutant des entrées à la série cluster depuis le shell d’influx |
# Ajoutant des entrées à la série cluster depuis le shell d’influx |
||
<pre> |
<pre> |
||
CREATE DATABASE mycluster |
CREATE DATABASE mycluster |
||
Line 43: | Line 45: | ||
</pre> |
</pre> |
||
Ajouter un graphique avec la requête 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='serverA' |
||
# Ajouter un graphique avec la requête SELECT cpu FROM cluster WHERE host='serverB' |
|||
Ajouter un dashboard |
|||
Ajouter |
# Ajouter un dashboard |
||
# Ajouter les graphiques existants au dashboard |
|||
Tester l’affichage dynamique en ajoutant des entrées à la |
# Tester l’affichage dynamique des graphiques en ajoutant des entrées à la série cluster depuis le shell d’influx |
||
<pre> |
<pre> |
||
INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.30,disk=0.10 |
INSERT cluster,host=serverA,region=us_west cpu=0.64,mem=0.30,disk=0.10 |
||
Line 59: | Line 61: | ||
==Arret de Chronograf== |
|||
==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> |
|||
=Utilisation avancée avec [[Telegraf]]= |
|||
TODO |
|||
=Arret de Chronograf= |
|||
<pre> |
<pre> |
||
sudo service chronograf stop |
sudo service chronograf stop |
Latest revision as of 10:48, 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