Pavnay

 
  • Increase font size
  • Default font size
  • Decrease font size
FrançaisEnglish

[Supervision] Cacti - Part 2 : Création de rapport

Imprimer
Supervision
Cacti est un logiciel de supervision permettant de générer des rapports (graphiques) afin de suivre l'activité de serveurs et / ou de services.

La configuration de rapport sous cacti n'est pas une chose aisée car elle demande de passer par diverses étapes et parfois de revenir en arrière afin de faire des corrections.
Nous allons voir ici comment générer un graphique représentant (en "temps réel") la répartition des demandes de ressources à un serveur httpd entre les méthodes GET et POST. Ceci va de la rédaction du scripts de récupération des données à la mise en forme graphique en passant par la définition de templates.

  1. Création du script
  2. Création de la mécanique de récupération
  3. Création de la représentation des données
  4. Création d'une fonction CDEF
  5. Création des graphes
  6. Ajout du graphe dans un rapport

Création du script :

Ici le script permettant de faire la collecte des données est un simple script Bash parsant un fichier de log afin de récupérer le nombre de requêtes en GET et POST.
Il est tout à fait possible de produire des scripts dans d'autres langages (PHP, Perl, C, etc..), ceux-ci étant simplement exécuter en ligne de commande.

Le script doit produire une unique ligne en sortie qui soit de la forme :

 argument1:valeur1 argument2:valeur2
 


Il est possible de mettre ce script n'importe où mais il reste préférable de le mettre avec les autres scripts de cacti c'est-à-dire dans $CACTI_HOME/scripts.

Ici, le script prendra un paramètre, le fichier à analyser et indiquera le nombre de requête GET ainsi que les POST.

#!/bin/bash

if [ $# -ne 1 ];
then
        echo "Usage : $0 <filetoparse>"
        exit 1;
fi

FILE=$1

GET=$( grep -c "\"GET " $FILE)
POST=$( grep -c "\"POST " $FILE)
echo "GET_METHOD:$GET POST:$POST"



Création de la mécanique de récupération :

Maintenant que le script existe et qu'il est exécutable, il faut indiquer à cacti qu'il existe un nouveau collecteur de données correspondant à notre script.
Pour se faire, il faut aller dans Console > Data Input Methods puis faire Add et compléter le formulaire comme suit :

Name : Pavnay - WebHits
Input Type : Script / Command
Input String : <path_cacti>/scripts/pavnay.sh <filetoparse>

Input Fields :
Field : filetoparse
Friendly Name : File to parse
Regular expression Match : -
Allow Empty Input : -
Special Type Code : -

Output Field :
Field : GET_METHOD
Friendly Name : GET Hits
Update RRD File : checked

Field : POST
Friendly Name : POST Hits
Update RRD File : checked


Quelques explications :
  • La chaîne <path_cacti> est une variable gérée par cacti représentant le répertoire d'installation de cacti;
  • Les Inputs Fields sont les paramètres que prendront le script collecteur de données en entrée (ici, le fichier à ananlyser):
  • Les Output Fields sont les données produites par le script en sortie (ici, il y en a 2 : le nombre de requêtes en GET et le nombre en POST);
  • Il faut laisser les champs Update RRD File cochés car sinon la base de stockage des données collectées ne se mettra pas à jour.

Création de la représentation des données :


Maintenant que cacti connait une nouvelle méthode de récupération, il faut lui indiquer comment utiliser le nouveau collecteur pour un cas concret.
Les Data Templates sont des templates permettant de formaliser et configurer un source de données en configurant le collecteur de données.

Pour créer un Data Template, il faut aller dans Console > Data Templates, cliquer sur Add et remplir le formulaire comme suit :

Data Templates :
Name : Pavnay - WebHits

Data Source :
Name : WebHits
Data Input Method : Pavnay - WebHits

Data Source Item[] :

Internal Data Source Name : GET
(Save)
Output Field : GET_METHOD - GET Hits
(Save + New)
Internal Data Source Name : POST
Output Field : POST - POST Hits

Custom Data :
File to parse : /usr/local/apache2/logs/pavnay_access


Quelques explications :
  • Les lignes écrites en italique sont les actions à faire afin de faire apparaitre de nouveaux champs et / ou formulaire;
  • Le Data Template est le nom que nous donnons à ce template;
  • Le Data Source est la source d'alimentation des données que nous avons préalablement défini;
  • Les Data Source Item sont les données de sortie du collecteur de données;
  • Les Custom Data sont les paramètres à fournir au collecteur afin qu'il puisse fonctionner (ici le fichier à analyser)

Création d'une fonction CDEF :

Un fichier de log httpd ne faisant que s'accroitre (si il n'y a pas de rotation de logs), le graphique produit par notre script ne sera qu'une représentation du nombre de requêtes GET et POST cumulatifs, il n'indiquera pas le nombre de requêtes reçus ces 5 dernières minutes (par défaut suivant la configuration de cacti).

Afin de n'avoir que des données différentielles, il faut utiliser une fonction CDEF. Par défaut, cacti fournit un certain nombre de fonctions (sommes de toutes les données d'une source, conversion de byte en bits, etc...).
Malheureusement, cacti ne fournit pas de fonction permettant de soustraire la dernière valeur recueillie avec la précédente. Cependant, il est possible de créer de nouvelles fonctions et c'est ce que nous allons faire ici.

Pour créer une nouvelle fonctionCDEF, ilf faut tout d'abord modifier le fichier $CACTI_HOME/lib/rrd.php car il contient une erreur et il faut ajouter des doubles guillemets ("):

// Changer la ligne (1241 pour la version 0.8.7e)
$cdef_graph_defs .= "CDEF:cdef" . generate_graph_def_name(strval($i)) . "=";
// par
$cdef_graph_defs .= "CDEF:\"cdef". generate_graph_def_name(strval($i)) . "=";

// et la ligne suivante (1243 pour la version 0.8.7e)
$cdef_graph_defs .= " \\\n";
// par
$cdef_graph_defs .= "\"\\\n";


Enfin vient la création de la fonction elle même. Pour celà il faut aller dans Console > Graph Management > CDEFs, cliquer sur Add

Name :  Difference with 0 as minima
(Save + Add)

CDEF Items :
CDEF Item Type : Custom String
CDEF Item Value : CURRENT_DATA_SOURCE,PREV(CURRENT_DATA_SOURCE),-,0,LT,0,CURRENT_DATA_SOURCE,PREV(CURRENT_DATA_SOURCE),-,IF


Ici la fonction cherche à soustraire la denière valeur à la précédente en fixant la limite minimale à 0 (pour le cas de la rotation de log).
Une autre fonction faisant de même mais ne forçant pas de limite minimale :

Name : Difference
(Save + Add)

CDEF Items :
CDEF Item Type : Custom String
CDEF Item Value : CURRENT_DATA_SOURCE,PREV(CURRENT_DATA_SOURCE),-


Quelques remarques :
  • Il est à noter que les fonctions suivant la notation polonaise inverse

Création des graphes :


Ceci fait, il faut maintenant passer à la création du template du graphique.
Pour celà, il faut aller dans Console > Graph Templates puis cliquer sur Add :

Template :
Name : Pavnay- WebHits

Graph Template :
Title : WebHits
(Save)

Graph Template Items > Add :
Data Source : Pavnay - WebHits - (GET)
Color : F5F800
Graph Item Type : AREA
CDEF Function : Difference with 0 as minima
(Create + Add)
Data Source : Pavnay - WebHits - (GET)
Color : None
Graph Item Type : LEGEND
Insert Hard Return : checked

Data Source : Pavnay - WebHits - (POST)
Color : F51D30
Graph Item Type : STACK
CDEF Function : Difference with 0 as minima
(Create + Add)
Data Source : Pavnay - WebHits - (POST)
Color : None
Graph Item Type : LEGEND
(Save)

Quelques explications :
  • Les différents Graph Item Type correspondent aux représentations possibles des données. Il est possible de faire des lignes (LINE1, LINE2, LINE3 avec une épaisseur de trait allant du plus fin au plus épais), des zones (AREA et STACK, le premier étant la zone la plus basse sur laquelle s'empilent les autres STACKs), des indicateurs (GPRINT étant un indicateur simple et LEGEND étant une macro générant 3 indicateurs GPRINT précisant la moyenne des données affichées, la valeur maximale atteinte et la dernière valeur collectée);
  • La Consolidation Function doit impérativement être AVERAGE pour un Graph Item Type graphique;
  • Si il faut appliquer une fonction particulière à la représentation des données, on peut utiliser une fonction CDEF (ici Difference with 0 as minima créée précédement);
  • Le Text Format est le texte qui sera appliqué en légende du graphique;
  • Insert Hard Return permet de générer un saut de ligne à la fin de la légende (ainsi il est possible de mettre plusieurs indicateurs sur une même ligne puis ajouter un saut de ligne à la fin, comme le fait le Graph Item Type LEGEND)


Ajout du graphe dans un rapport :

Maintenant que toute la configuration concernant la collecte de données et leur réprésentation est faite, il ne reste plus qu'à créer un rapport affichant le graphique.
Ici nous avons des données ne correspondant pas à un serveur (Host) spécifique. Si tel était le cas nous attribuerions le graphique au dit serveur. Pour faire celà, il y a 2 méthodes :
  1. Ajout manuel du graphique au host
  2. Création d'un Host Template permettant d'attribuer plusieurs graphique à un type de serveur. Ainsi, si nous disposons de plusieurs machines ayant les mêmes tâches, il est possible des les enregistrer sous ce Host Template ce qui à pour conséquence de générer plusieurs graphiques par défaut (par exemple pour un serveur frontal, il sera possible de créer des graphiques pour la charge du CPU, de la mémoire vive, du nombre de pages délivrées, etc... en un seul clic)
Pour créer un rapport avec notre nouveau graphique, nous allons créer un host virtuel afin de rattacher le graphique même si il est possible de ne pas passer par cette étape.
Pour celà, il faut faire Console > Management > Devices puis cliquer sur Add et créer un host avec pour IP (Hostname) 127.0.0.1 et description Services.

Cette étape passée, il faut créer la DataSource correspondant au collecteur de données (en fait la base RDD) ensuite aller dans Console > Data Sources, cliquer sur Add :

Selected Data Template : Pavnay - WebHits
Host : Services

Et enfin la création du graphique entant que tel (dans Console > Graph Management puis Add ) :

Select Graph Template : Pavnay WebHits
Host : Services
(Save)

Supplemental Graph Template Data :
Data Source [GET] : WebHits (GET)
Data Source [POST] : WebHits (POST)

Le graphique n'est pas encore visible, pour corriger celà, aller dans Console > Graph Trees > Default Tree puis cliquer sur Add :

Parent Item : [root]
Tree Item Type : Graph
Graph : WebHits
(Create)

Maintenant il est possible de voir la répartition des requêtes GET et POST dans Graphs > Default Tree.

Commentaires
Ajouter un nouveau
+/-
Ecrire un commentaire
Nom:
Email:
 
Titre:
 
:D:):(:0:shock::confused:8):lol::x:P:oops::cry:
:evil::twisted::roll::wink::!::?::idea::arrow:
 
jean-luc  - bin, on va essayer touty ça ;s   |2009-11-03 23:12:30
ça me parrait bien cool et assez simple pour que j'y arrive !!

merci
Febbweiss   |2009-11-11 11:17:26
Si il y a des difficultés, ne pas hésiter à demander.
La "rédaction"
de rapport n'est pas toujours simple et il suffit d'un grain de sable pour les
faire échouer...
Clém  - CDEF, template ?   |2010-03-23 16:06:40
Bonjour,

Je suis actuellement entrain de découvrir Cacti.

Serait-il possible
qu'on m'explique ce qu'est exactement une fonction CDEF, ainsi que les templates
? Car à partir des docs écrites en anglais je n'y arrive pas...

Aussi si vous
avez de bonnes adresses, je suis preneur...!

Merci par avance!
Febbweiss   |2010-03-23 22:21:45
Les fonctions CDEF sont des fonctions permettant de personnaliser des
calculs.
Par défaut, Cacti gère la conversion bits / bytes et les totaux.
Je
ne me suis servis des fonctions CDEF seulement comme dans l\'exemple donné
dans cet article : pour faire des différences entre la valeur actuelle (la
dernière ou la dernière moyenne) et la précédente.

Les templates sont des
patrons définis en terme générique.
Les Data Template définissent les
méthodes de récupérations des données à partir des scripts (en fait,
l\'interface entre les scripts et cacti).
Les Host Templates permettent de
définir les graphiques par défaut à créer lors de l\'enregistrement
d\'un nouveau device (par exemple, le Host Template MySQL peut contenir des
graphiques sur le processeur, la mémoire, les disques durs et des statistiques
MySQL, ainsi un nouveau device créé à partir de ce template aura ces
graphiques p...
Febbweiss   |2010-03-23 22:20:22
(Suite...)
Les Graph Templates définissent les représentations graphiques
(courbes ou barres, échelles, axes, etc...) à partir des Data Templates.

Un
site qui m'a aidé à comprendre Cacti
:
http://linagora.org/contrib/supervision/document ation/introduction_cacti

et
plus précisément le document PDF
:
http://linagora.org/_media/contrib/supervision/d
ocumentation/20050627_introduction_cacti.pdf?id=co
ntrib%3Asupervision%3Adocumentation%3Aintroduction _cacti&cache=cache
Clém   |2010-03-24 10:50:25
Ok, merci! C'est un peu plus clair...! Je ferai mes propres tests pour voir si
j'arrive à quelque chose...

Je vais de ce pas aller voir les liens que tu m'as
fourni! Car s"autoformer sur Cacti n'est pas une chose simple je
trouve...

Merci encore!
Clém  - CDEF   |2010-04-08 14:08:05
Bonjour,

Je me retourne de nouveau vers vous pour tenter de résoudre un de mes
petits problèmes d'utilisation de Cacti. Peut-être allez-vous pouvoir m'aider
à avancer...

Je souhaiterais ajouter à mes graphes affichant le nombre
d'octets entrant, le pourcentage d'utilisation de la bande passante. Pour cela,
j'ai créé la CDEF suivante :
cdef=CURRENT_DATA_SOURCE,100,*,|query_ifSpeed|,/

que j'ai appliqué à un de mes graphes.

à suivre... (nouveau commentaire)
Clém   |2010-04-08 14:10:10
Le graphe sans CDEF s'affiche.
Le graphe avec CDEF ne s'affiche pas, et voici ce
que le RRDTool me dit :
RRDTool Command:
/usr/bin/rrdtool graph - \
...

DEF:a="/export/reseau/www/cacti/rra/..._traff
ic_in_20264.rrd":traffic_in:AVERAGE \

DEF:b="/export/reseau/www/cacti/rra/..._traff
ic_in_20264.rrd":traffic_in:LAST \

DEF:c="/export/reseau/www/cacti/rra/..._traff
ic_in_20264.rrd":traffic_in:MAX \
CDEF:cdefg=b,100,*,100000000,/ \

AREA:a#FF4105:"In Octets" \
GPRINT:b:LAST:"Current
\:%8.2lf %s" \
GPRINT:a:AVERAGE:"Average \:%8.2lf %s"
\
GPRINT:c:MAX:"Maximum \:%8.2lf %s\n" \

COMMENT:"\n" \
COMMENT:"******** Total Bandwidth
Utilization ********\n" \
GPRINT:cdefg:LAST:"Current Bandwidth
Utilization (%) \:%8.2lf %s\n"
RRDTool Says:
ERROR: bad format for
...
Clém   |2010-04-08 14:11:31
RRDTool Says:
ERROR: bad format for [G]PRINT in 'Current Bandwidth Utilization
(%) :%8.2lf %s\n'

Avez-vous une idée de mon erreur ?

Un grand
merci par avance!
Febbweiss   |2010-04-13 23:59:34
J'avoue ne pas avoir trop regarder les personnalisations spécifique du genre
les traffics réseau.
Par contre j'utilise beaucoup les graphes pré-créés
pour ça.
Par exemple, je sais qu'il existe un graphique qui fournit les volumes
d'entrée et de sortie mais aussi et surtout le 95 percentile... Pratique pour
les facturations de bande passante...

Je reposte prochainement pour vous
fournir le nom et les datas dudit graphique
nana  - help   |2010-05-10 19:18:01
bonjour;
je dois réaliser un projet en utilsant Cacti. le travail demandé est
de faire des requetes SNMP en utilsant un code JAVA et de stocker le résultat
dans une base de donnée Mysql, par exemple collecter et stocker les
informations provenant de la MIB du CPU d'un routeur.
Puis je dois tracer les
graphes de ces résultas à l'aide de Cacti.
Mon probleme c'est que je ne sais
pas comment exploiter les résultats stocké dans ma base
Aidez moi svp!!!!
Febbweiss   |2010-05-10 22:05:08
Bonjour,

Je n\'ai encore jamais essayé de stocker les datas collectées
non pas dans les rrd mais en base de données.
Celà dit,j\'ai fais une
petit recherche sur internet et j\'ai trouver ceci :
http://forums.cacti.net/viewtopic.php?t=9272&highl ight=cacti+mysql et le
collecter spine (recommandé d\'ailleurs)
http://www.cacti.net/spine_info.php.
Si vous avez trouvé et réussi, merci de
m\'en faire part, je suis interessé

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

Actualités

Peinture sur figurine