View Full Version : ODS et perfdata avec des espaces ? bis
boyerf
08-23-2007, 12:21 PM
Suite au thread (fermé) de Dontkishoot sur "ODS et perfdata avec des espaces ? "
Je suis en train d'essayer de grapher avec un plugin de Manubullon (check_snmp_storage) mais je ne remonte pas ni les metrics ni les donnees dans data_bin (par contre la declaration est bonne dans index_data). J'ai bien viré la quote dans les carateres macro interdit...
As tu une autre piste ?
DonKiShoot
08-23-2007, 12:30 PM
Vas dans le bug track j'y ai mis la solution :
http://bugs.oreon-project.org/?do=details&id=399
boyerf
08-23-2007, 12:42 PM
Ok, j'ai éffectué ta modif mais apres re-test, j'ai toujours le même problème...
Est ce la seule ligne que tu as modifiée ?
Autrement, j'ai bien purgé mes 2 services de test dans ODS et ils sont bien recréés mais sans metric (et donc sans data). J'ai bien vérifié, les données de perf arrivent bien dans le fichier perfdata avec des simples quotes...
Hum y'a une c.... quelque part...:confused:
DonKiShoot
08-23-2007, 12:46 PM
J'ai ajouté un quote dans la regex et ajouté une subsitution à $data[0]
Il y a 2 modif à faire puis :
stoper ODS
purger le service en panne
redemarrer ODS
boyerf
08-23-2007, 12:51 PM
Oups... je n'avais pas vu le ' dans la regex.... desole.
Mais tu rajoutes seulement ' ?
ou faut il rajouter \' ?
Bon je vais retester (merci pour ton aide !)
boyerf
08-23-2007, 03:28 PM
Bon, dans mes metric, il me prend toujours le dernier mot du metric...
Dans 'CPU - Minimal' il me prend comme metric : minimal
ATTENTION, j'ai vu un effet pervers de ta modif. Pour ceux qui utilisent des pluggins Centreon qui envoient des données Perfparse et Centreon en donnée de performance du type :
données_format_perfparse|Données_format_centreon
Du coup, pour ce type de pluggins, les données perfparse sont prisent en compte et plus les données centreon...
Du coup, ça foire toutes les courbes etablient avec les data centreon !
DonKiShoot
08-23-2007, 03:36 PM
Je savais pas que ca existait des plugins qui sortaient des perfdata classique et des perfdatas centreons :eek:
PS: Peut-être rajouté dans la regex : '\ ' (sans les quotes) pour prendre en compte les espaces.
Je vérifie chez moi car ça semblait fonctionner sans ça même si j'y avais pensé.
DonKiShoot
08-23-2007, 03:44 PM
Exact j'ai le même bug :D.
Je vais tenter ma modif ;).
if ($tab =~ /([a-zA-Z0-9\_\-\/\.\:'\ ]+)\=([0-9\.\,\-]+)([a-zA-Z0-9\_\-\/\\\%]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)/){
if (!defined($3)){$3 = "";}
if (!defined($4)){$4 = "";}
if (!defined($5)){$5 = "";}
@data = ($1, $2, $3, $4, $5); # metric, value, unit, warn, critical
}
if ($1 && defined($2)){
# Check if metric is known...
$data[0] =~ s/\//#S#/g;
$data[0] =~ s/\./\-/g;
$data[0] =~ s/\,/\-/g;
$data[0] =~ s/\:/\-/g;
$data[0] =~ s/\'//g;
boyerf
08-23-2007, 03:45 PM
./check_centreon_nt -H xx.xx.xx.xx -p 12489 -v USEDDISKSPACE -s password -l C -w 75 -c 95
C: - total: 19,53 Gb - utilisé: 11,20 Gb (57 pct) - libre 8,34 Gb (43 pct) | 'C: Espace utilisé'=11,20Gb;14,65;18,56;0.00;19,53 |total=19,53Mo used=11,20Mo free=8,34Mo
Regarde le retour de ce pluggins.....
DonKiShoot
08-23-2007, 03:48 PM
En effet il est louche ce plugin mais il ne devait pas fonctionner pour la partie perfdata car
'C: Espace utilisé'=
ODS ne sait pas le traiter sans ma modif.
PS: Son unité est le Gb cela me semble fort étonnant pour un espace disque.
Soit Go soit GB mais pas Gb.
Soit GigaOctet soit GigaByte mais pas Gigabit.
boyerf
08-23-2007, 03:51 PM
En effet il est louche ce plugin mais il ne devait pas fonctionner pour la partie perfdata car
'C: Espace utilisé'=
ODS ne sait pas le traiter sans ma modif.
C'est bien ce que je te dis... il est traité avec ta modif :D
Ce qui fait que tous ceux qui utilisent des pluggins Centreon vont avoir des gros problemes de courbes...
DonKiShoot
08-23-2007, 04:00 PM
ODS est censé traité les perfdatas officiels, cela me laisse perplexe c'est data supplémentaire derrière les perfdatas normal !!!
DonKiShoot
08-23-2007, 04:01 PM
Bon en rajoutant un espace dans la regex j'arrive à obtenir à peu près tout le nom de la métric mais il y a encore une partie de tronquer.
Je vais chercher où elle est tronquer.
boyerf
08-23-2007, 04:06 PM
Ca parrait dingue, mais ca fonctionne comme ça avec le Check_centreon_nt
DonKiShoot
08-23-2007, 04:46 PM
Je crois que c bon maintenant mais ca oblige à un controle supplémentaire.
J'ai ajouté le traitement ci dessous pour spliter les espaces de façon différentes selon si nous sommes en présence de quotes ou non :
my @Tab;
if ( $_[0] =~ /\s'/ ) {
@Tab = split(' \'', $_[0]);
} else {
@Tab = split(' ', $_[0]);
}
foreach my $tab (@Tab) {
# Cut perfdata
if ($tab =~ /([a-zA-Z0-9\_\-\/\.\:'\s]+)\=([0-9\.\,\-]+)([a-zA-Z0-9\_\-\/\\\%]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)/){
if (!defined($3)){$3 = "";}
if (!defined($4)){$4 = "";}
if (!defined($5)){$5 = "";}
@data = ($1, $2, $3, $4, $5); # metric, value, unit, warn, critical
}
if ($1 && defined($2)){
# Check if metric is known...
$data[0] =~ s/\//#S#/g;
$data[0] =~ s/\./\-/g;
$data[0] =~ s/\,/\-/g;
$data[0] =~ s/\:/\-/g;
$data[0] =~ s/\'//g;
DonKiShoot
08-23-2007, 04:52 PM
Mince les metrics c'est un varchar de 32, mes metrics sont coupées :(
HP NC7781 Gigabit Server Adapter_in_bps
devient
HP NC7781 Gigabit Server Adapter
Va falloir que je racourçisse tout ça ;)
boyerf
08-23-2007, 05:28 PM
Oui, ca a l'air de fonctionner !!! :D
De mon coté, j'ai rajouté la ligne :
$_[0] =~ s/\é/e/g;
Juste apres ton : my @Tab;
Ca me remplace le é par un e car j'ai des métriques en français avec l'accent :rolleyes:
Bon je passe en phase d'observation et si c'est ok, ben on fait remonter ca sur le BUG que tu as ouvert....
DonKiShoot
08-23-2007, 05:39 PM
J'ai encore modifié car j'avais des problèmes avec les RRD DS Name qui n'aiment pas les espaces alors j'ai fait sauter les espaces et plutôt que de couper à 32 comme je pensais à cause de la limitation mysql, je coupe à 19 pour être compatible avec le nom des DS RRD qui sont limitées à 19 caractères.
Et cela me donne ça :
my @Tab;
if ( $_[0] =~ /\s'/ ) {
@Tab = split(' \'', $_[0]);
} else {
@Tab = split(' ', $_[0]);
}
foreach my $tab (@Tab) {
# Cut perfdata
if ($tab =~ /([a-zA-Z0-9\_\-\/\.\:'\s]+)\=([0-9\.\,\-]+)([a-zA-Z0-9\_\-\/\\\%]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)/){
if (!defined($3)){$3 = "";}
if (!defined($4)){$4 = "";}
if (!defined($5)){$5 = "";}
@data = ($1, $2, $3, $4, $5); # metric, value, unit, warn, critical
}
if ($1 && defined($2)){
# Check if metric is known...
$data[0] =~ s/\//#S#/g;
$data[0] =~ s/\./\-/g;
$data[0] =~ s/\,/\-/g;
$data[0] =~ s/\:/\-/g;
$data[0] =~ s/\'//g;
$data[0] =~ s/\s//g;
if( length($data[0]) > 19 ) { $data[0] = substr($data[0],-19,19); }
boyerf
08-23-2007, 05:58 PM
Oui c'est pas mal... mais peut etre faudrait il gérer ça par une option.
Sur check_snmp_storage sous windows ca me ramene le no de serie du disque mais pas le lecteur logique .Du coup pour grapher quelque chose, le no de serie en metric c'est pas terrible :D
Donc peut etre une option pour prendre soit les 19 premiers caracters, soit les 19 derniers...
Autrement je me suis trompé, ma ligne c'est :
$_[0] =~ s/\é/e/g;
Merci de la prendre en compte lors de ta remonté d'info sur le bug
DonKiShoot
08-23-2007, 06:10 PM
Je ne pense pas que l'on puisse se permettre de substituer tous les caractères spéciaux. Si l'on est en utf-8 partout, les caractères spéciaux ne posent pas de souci en principe.
Par contre j'avais choisi de couper par la fin de la metrique car il me semblait que c'était à la fin que se trouvaient les choses les plus intéressantes dans les tests que j'ai effectué.
Ce sera une décision à prendre puis à chacun de se débrouiller avec son plugin.
Là on corrige car ODS ne respecte pas la gestion des metrics avec espaces mais on n'arrivera pas à qqchose d'idéal si il n'y a pas de norme plus avancé sur le contenu d'une metric.
boyerf
08-23-2007, 06:56 PM
Oui tu as raison...
Tu sais comment je peux configurer mon linux (Centos) et mes user pour être sur que tout le monde bosse en UTF8 ?
DonKiShoot
08-23-2007, 07:05 PM
Sur redhat depuis un moment ils sont en utf-8 par défaut.
Chez moi lorsque je fais export j'ai LANG="fr_FR.UTF-8"
slimfast
09-26-2008, 05:55 PM
Salut,
Suite à ce topic et au bugreport sur le flyspray j'ai entrepris de grapher les min;max;warn;crit pour mes chers graphes.
Centreon 1.4.2.7
Voici les différents éléments de ma configuration:
Nagios.cfg :
Illegal Object Name Characters ~!$%^&*"|'<>?,()=
Illegal Macro Output Characters `~$^&"|<>
IdentifyMetric.pm :
my @Tab;
if ( $_[0] =~ /\s'/ ) {
@Tab = split(' \'', $_[0]);
} else {
@Tab = split(' ', $_[0]);
}
foreach my $tab (@Tab){
# Cut perfdata
if ($tab =~ /([a-zA-Z0-9\_\-\/\.\:'\s]+)\=([0-9\.\,\-]+)([a-zA-Z0-9\_\-\/\\\%]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)[\;]*([0-9\.\,\-]*)/){
if (!defined($3)){$3 = "";}
if (!defined($4)){$4 = "";}
if (!defined($5)){$5 = "";}
@data = ($1, $2, $3, $4, $5); # metric, value, unit, warn, critical
}
if ($1 && defined($2)){
# Check if metric is known...
$data[0] =~ s/\//#S#/g;
$data[0] =~ s/\./\-/g;
$data[0] =~ s/\,/\-/g;
$data[0] =~ s/\:/\-/g;
$data[0] =~ s/\'//g;
$data[0] =~ s/\s//g;
if( length($data[0]) > 19 ) { $data[0] = substr($data[0],-19,19); }
Place aux outputs
output du plugin (interface oreon)
Données de Performance 'D:\ Label:PROG Serial Number 62cc822'=3347MB;10801;11402;0;12002
service-perfparse :
1222439616 AL-TMA SNMP_Disc_D D:\ Label:PROG Serial Number 62cc822: 28%used(3347MB/12002MB) (90%) : OK OK 'D:\ Label:PROG Serial Number 62cc822'=3347MB;10801;11402;0;12002
J'ai fait des arrêts ODS / vidage données / redémarrage ODS.
j'ai toujours en graphe:
http://img518.imageshack.us/img518/5653/45612180yg0.png
EDIT:
Je viens de remarquer un graphe qui graphe les 3 load:
load1=3.140;7.000;12.000;0; load5=2.110;8.000;12.000;0; load15=1.890;9.000;13.000;0;
et un autre tout nouveau qui ne graphe que la première valeur:
load_5_sec=6%;90;100,load_1_min=7%;80;100,load_5_m in=8%;70;100
parcontre pas de valeurs de min max warn ou crit. qqun peut m'éclairer?
DonKiShoot
09-29-2008, 01:00 PM
Centreon ne graph pas les valeurs min, max à ma connaissance.
Il n'affiche que les valeurs qui "bougent".
C'est dans la todolist je pense car j'en ai moi même fait la demande il y a longtemps si je me souviens bien.
slimfast
09-29-2008, 03:29 PM
Merci de ta réponse.
Pourtant il me semble avoir lu :
Comment by Julien Mathis (Julio) - Wednesday, 12 September 2007, 06:25PM
bon je trace aussi les warn crit min et max ;)
http://bugs.centreon.com/?do=details&id=399
Alors est-ce qu'il parlait de la version 2.0?
Sinon ça ne marcherait pas avec un IdentifyMetric.pm de la v 2.0?
Aussi sur mon graphe de disque après application de ton patch je n'ai toujours que le numéro de série du disque en légende.
Dernière question sur le load que j'ai mis en exemple il semble que centreon reconnaisse les espaces et pas les virgules pour grapher?
DonKiShoot
09-29-2008, 10:32 PM
Tu tombes sur un cas que je n'ai pas eu à traiter apparement, des espaces dans la description des metrics.
Il faut probablement améliorer les regex pour correspondre à ton cas mais je n'ai pas mis mon nez dans ce code depuis des lustres alors il faudra que tu cherches l'erreur seul.
slimfast
09-30-2008, 10:23 AM
ok merci de ta réponse
tu as une idée pour les min max warn et crit?
DonKiShoot
09-30-2008, 02:27 PM
Pour centreon 2 apparement mais je suis encore en 1.4.2.3
En tous cas ce n'est pas un truc que tu peux bidouiller facilement je pense.
slimfast
09-30-2008, 03:33 PM
Je lance un appel aux vaillants et courageux développeurs qui peuvent y faire quelque chose histoire d'avoir une version 1.x de centreon pas trop mal au final.