Chronograf

From air
Jump to: navigation, search
Définition d'un graphique dans Chronograf
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.

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/

  1. 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'
  1. Ajouter un graphique avec la requête SELECT * FROM cluster WHERE host='serverA'
  2. Ajouter un graphique avec la requête SELECT cpu FROM cluster WHERE host='serverA'
  3. Ajouter un graphique avec la requête SELECT cpu FROM cluster WHERE host='serverB'
  4. Ajouter un dashboard
  5. Ajouter les graphiques existants au dashboard
  6. 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