Dashing un tableau de bord pour votre supervision

Posted by on 16 Juil 2015 in Supervision | 1 comment

Les tableaux de bord occupent de plus en plus de place dans le monde de la supervision. En effet les DSI, administrateurs système, etc ont besoin d’outils de ce genre afin de ne pas « manquer » des alertes provenant du système de supervision, disposer d’une vision en temps réel de l’état de santé du SI, etc. Un tableau de bord commun sur une télévision ou un écran géant (par exemple) est une solution idéale.

Souvent les utilisateurs ont en visuel ce genre d’écran commun. Cependant, les interfaces web des outils de supervision n’ont pas été faites pour ce cas d’utilisation particulier et quelques ajustements (zoom, rotation d’onglets, …) sont nécessaires pour que les données soient exploitables. Et si l’on doit afficher des données externes au système de supervision dans le tableau de bord, la complexité augmente très fortement.

Nous pensons que Dashing peut être une des solutions répondant à ce type de besoin. Dashing va représenter vos données sur un tableau de bord selon votre souhait et vous aider au quotidien. C’est pour cela que nous vous présentons cette solution aujourd’hui.

Lors du salon Monitorama en 2014, Daniel Beauchamp (un des créateurs de Dashing) avait présenté le logiciel Dashing. Une solution de tableau de bord en Ruby utilisant aussi les technologies javascript, HTML et coffee script.

Dashing vous permet de faire facilement un tableau de bord pour afficher diverses statistiques provenant de sources diverses. Par exemple, les statistiques de votre supervision, de votre outil de gestion d’incidents, la météo (très utile pour les FAI), … Le tout sur un seul et unique tableau de bord.

La solution Dashing possède son propre lexique, voici quelques définitions afin de vous permettre de mieux comprendre la suite de l’article :

  • « Dashboard » : Tableau de bord
  • « Job » : Tâche permettant de récupérer les informations afin de les afficher dans un widget
  • « Widget » : outil d’affichage des données

Voici un exemple de job permettant de récupérer des données de supervision:

#!/bin/env ruby
# encoding: utf-8
require 'net/http'
require 'json'

SCHEDULER.every ’30s’, :first_in => 0 do |job|
uri = URI(« http://mymonitoringapi.mycompany.tld/dashing_stats.json »)
res = Net::HTTP.get_response(uri)
data = JSON::parse(res.body)

# Parsing interesting fields
hosts_down = data[1][0][‘hosts_down’]
services_critical_ack = data[1][0][‘services_critical_ack’]
services_critical_onduty = data[1][0][‘services_critical_onduty’]
services_critical_unhandled = data[1][0][‘services_critical_unhandled’]
services_warning_ack = data[1][0][‘services_warning_ack’]
services_warning_unhandled = data[1][0][‘services_warning_unhandled’]

# Send data to the dashboard
send_event(‘services_critical_onduty’, value: services_critical_onduty)
send_event(‘hosts_down’, value: hosts_down)
send_event(‘services_critical_handled’, current: services_critical_ack)
send_event(‘services_critical_unhandled’, value: services_critical_unhandled)
send_event(‘services_warning_handled’, current: services_warning_ack)
send_event(‘services_warning_unhandled’, value: services_warning_unhandled)
end

Voici un exemple permettant de récupérer les métriques dans Graphite :

require "rest-client"
require "json"

continents = {
« eu » => [« PARIS », « BERLIN » , »DUBLIN »],
« us » => [« SANJOSE », « NEWYORK », « DALLAS »],
« as » => [« TAIPEI », « TOKYO », « BEIJING »]
}

SCHEDULER.every ‘5m’, :first_in => 0 do
continents.each do |continent, sites|
graphite_json_data = []
sites.each do |site|
target = « alias(sumSeries(metrics.website.visits.*-#{site.downcase}),\ »#{site}\ ») »
url = URI::encode « http://web.graphite.mycompany.tld/render?format=json&target=#{target}&from=-1days&until=-5minutes »
raw_data = RestClient.get url
symbolized_data = JSON.parse(raw_data[1…-1], :symbolize_names => true)
graphite_json_data.push(symbolized_data)
end
send_event « clicks_#{continent} », { series: graphite_json_data }
end
end

Voici des exemples de widgets:

  • Tickets ouverts dans JIRA
  • Graphs dans Graphite

Voici quelques captures d’écran de widgets:

dashing-widget-1dashing-widget-2dashing-widget

Afin de mieux vous faciliter le travail, dashing fournit des widgets de base:

  • Text: Permettant d’afficher du texte
  • Number: Permettant d’afficher des chiffres
  • List: Permettant d’afficher une liste

Bien entendu vous avez la possibilité d’installer des widgets provenant de la communauté:

https://github.com/Shopify/dashing/wiki/Additional-Widgets

Vous pouvez aussi créer vos propres widgets.

L’un des buts de Dashing est la simplicité. Deux méthodes sont fournies pour récupérer des données dans un widget :

  • « Pull », nous l’appellerons la méthode active.
  • « Push », nous l’appellerons la méthode passive.

La méthode active permet de récupérer les données de votre widget en exécutant une tâche depuis le serveur sur lequel est installé Dashing. C’est à dire que vous devez créer un « job » (tâche) en Ruby vous permettant de récupérer les données de votre widget.

La méthode passive vous permet de récupérer les données de votre widget en exécutant une tache depuis un serveur tiers. Dans ce mode de fonctionnement, le serveur ne va exécuter aucune tâche, il va se contenter de recevoir les données et les afficher.

Certains d’entre vous commencent certainement à cogiter en disant « mais comment ces tâches vont être exécutées ? ».

Et bien ne vous inquiétez pas, Dashing a pensé à tout puisqu’il fournit aussi un ordonnanceur appelé RUFUS scheduler.

Afin de compléter sa panoplie, Dashing comprend aussi une API vous permettant deux actions:

  1. Recharger votre tableau de bord
  2. Envoyer les données à un widget

La réorganisation du tableau de bord se fait en mode web par l’intermédiaire d’un « glisser/déposer« . Malheureusement lorsque vous faite ces ajustements Dashing vous propose de sauvegarder les changement sauf qu’il faut copier/coller une ligne de code afin de les rajouter dans la configuration de votre tableau de bord. C’est dommage …

Afin de vous donner un peu d’inspiration, voici un exemple de tableau de bord que nous avons réalisé:

Dashboard-dashing

A vos tableaux de bord ! 😉

One Comment

  1. 17-7-2015

    Un exemple de dashboard avec les données du meetup supervision sur Paris: http://status.monitoring.paris/