eLuna Graph System
eLuna Graph System is an application written in Perl based on RRDTool and distributed under GNU General Public License. Its aim is collection, and then presentation in graphic form, of data, to aid in monitoring of a Linux machine.
By default, the application allows monitoring of the load, the CPU usage as a percent, memory use as a percent, number of processes, quantity of data transmitted via eth0 (In/Out) and percentage of disc space in use on /. It is nevertheless possible to add personalized elements to this.
An application demo is available online at the following address: http://graphs.eluna.org. For more detailed information, please consult the README file.
Prerequisite
- A machine ;)
- A root access on this machine
- An http server (preferably Apache)
- RRDTool (preferably version >= 1.2)
- Perl (preferably version >= 5.8)
- Perl modules DateTime et HTML::Template::Expr










Je suis actuellement en train de le tester, et n'ai qu'un seul regret : celui de ne pas avoir par défaut l'ensemble des graphs présentés dans la démo. Néamoins, cela me permettra de me creuser un peu la tête pour trouver comment récupérer le nombre de Hits Apache
Merci
Merci pour ton commentaire !
Pour les graphs non disponibles, en fait la raison est la suivante: je n'ai mis que les graphs qui me semblaient être suffisamment génériques pour fonctionner sur une grande variété de systèmes, sans avoir à faire de modifications dessus, ou alors des modifications mineures.
Pour apache, j'utilise personnellement un truc qui me semble être un peu du bricolage, et donc je ne l'ai pas inclus dans le soft
Si cela t'intéresse, je fais comme cela:
root@eluna 10_apache_hits # cat create.sh
#!/bin/bash
rrdtool create apache_hits.rrd
--start `date +%s`
--step 300
DS:hits:DERIVE:600:0:U
RRA:AVERAGE:0.5:1:2016
RRA:AVERAGE:0.5:6:1344
RRA:AVERAGE:0.5:24:732
RRA:AVERAGE:0.5:144:1460
root@eluna 10_apache_hits # cat graph.pm
$GRAPH_TITLES{'apache_hits'} = "{#server#} - Apache Hits";
$GRAPH_CMDS{'apache_hits'} = <<"AH_GRAPH_CMD";
--title "{#server#} - Apache Hits"
--vertical-label="Hits Per Minute"
--units-exponent 0
--lower-limit 0
DEF:hits={#path#}apache_hits.rrd:hits:AVERAGE
CDEF:hits_mn=hits,60,*
AREA:hits_mn{#color2#}:"Hits Per Minute "
GPRINT:hits_mn:LAST:"Current\: %5.0lf "
GPRINT:hits_mn:AVERAGE:"Average\: %5.0lf "
GPRINT:hits_mn:MAX:"Maximum\: %5.0lf\n"
LINE1:hits_mn{#linecolor#}
AH_GRAPH_CMD
1; # Return true
root@eluna 10_apache_hits # cat update.pl
#!/usr/bin/perl
$dummy = `www-browser -dump http://localhost/server-status/ | grep "Total accesses"`;
$dummy =~ /.*Total accessess*:s*([0-9]*)s*/;
system("rrdtool update apache_hits.rrd -t hits N:$1");
Comme tu peux le voir, j'utilise le module server-status d'apache pour récupérer l'info... Y'a sans doute mieux à faire !
en effet, le module server-status, c'est pas très générique...
du coup, j'ai réécrit le update.pl pour qu'il soit plus générique, ce qui donne :
$ cat update.pl
#!/usr/bin/perl
$logpath="/usr/local/apache2/logs/access_log";
$daten=`date --rfc-2822`;
if($daten=~ m/^.*,s(.*)s(.*)s(.*)s(.*):(.*):(.*)s+(.*)$/gi){
$d=$1;$m=$2;$y=$3;$h=$4;$mn=$5;
$daten="$d/$m/$y:$h:$mn";
$daten1="$d/$m/$y:$h:".($mn-1);
$daten2="$d/$m/$y:$h:".($mn-2);
$daten3="$d/$m/$y:$h:".($mn-3);
$daten4="$d/$m/$y:$h:".($mn-4);
$daten5="$d/$m/$y:$h:".($mn-5);
}
open FICH, $logpath;
@filec= <FICH>;
close FICH;
$nbhits=0;
foreach $fich(@filec){
if ($fich =~ /$daten/){$nbhits++;}
if ($fich =~ /$daten1/){$nbhits++;}
if ($fich =~ /$daten2/){$nbhits++;}
if ($fich =~ /$daten3/){$nbhits++;}
if ($fich =~ /$daten4/){$nbhits++;}
if ($fich =~ /$daten5/){$nbhits++;}
}
system( "rrdtool update apache_hits.rrd -t hits N:$nbhits" );
du coup, il y a juste à lui fournir le chemin du log apache, et le tour est joué... en plus, ca marche aussi pour les erreurs.
(ici, j'ai pris pour postulat que le cron est lancé toutes les 5 minutes...)
Sinon, j'ai aussi écrit un graph netstat, qui donne le nombre de connexions réseaux ouvertes à un moment donné. Ca donne :
$ cat create.sh
#!/bin/bash
rrdtool create netstat.rrd
--start `date +%s`
--step 300
DS:netstat:GAUGE:600:U:U
RRA:AVERAGE:0.5:1:2016
RRA:AVERAGE:0.5:6:1344
RRA:AVERAGE:0.5:24:732
RRA:AVERAGE:0.5:144:1460
$ cat graph.pm
$GRAPH_TITLES{'netstat'} = "{#server#} - Nombre de connexions reseau";
$GRAPH_CMDS{'netstat'} = <<"NETSTAT_CMD";
--title "{#server#} - Nombre de connexions reseau"
--vertical-label="nb de connexions"
--lower-limit 0 --upper-limit 100
DEF:netstat={#path#}netstat.rrd:netstat:AVERAGE
AREA:netstat{#color5#}:"Nombre de connexions "
GPRINT:netstat:LAST:"Current\: %3.0lf "
GPRINT:netstat:AVERAGE:"Average\: %3.0lf "
GPRINT:netstat:MAX:"Maximum\: %3.0lf\n"
LINE1:netstat{#linecolor#}
NETSTAT_CMD
1; # Return true
$ cat update.pl
#!/bin/perl
$dummy = `netstat -net -4 |grep -v Active |grep -v Proto|wc -l`;
$dummy=~ /(.*)/;
system("rrdtool update netstat.rrd -t netstat N:$1");
Voilà.
Sinon, j'ai apporté quelques modifications à index.pl et template/index.html pour faire un affichage des graphs sur 2 colonnes. Si tu veux, je peux te les envoyer par mail
Le problème de la solution que tu donnes est qu'elle ne fonctionne pas dans le cas relativement courant où l'on héberge un grand nombre de sites avec pour chacun un fichier de log individuel, ce qui est notamment mon cas ! Il doit y avoir également des problème de logrotate qui doivent survenir à mon avis...
De plus, je ne sais pas comment fonctionne le module server-status, mais j'imagine que ça doit être plus performant que de parser un ou plusieurs fichiers de logs qui peuvent être relativement volumineux.
Pour les 2 colonnes, oui je veux bien que tu me les envoies par mail (steph@eluna.org), dès que j'ai un moment j'essaierai d'intégrer cette option
Par contre pour le nombre de connexion active sur le serveur WEB.
J'ai pondu cette commande :
netstat -tn | grep ESTABLISHED | grep :80 | wc -l
Comment placer cette comment dans la variable $dummy car je comprends pas trop le 2eme $dummy
Exemple :
$dummy = `netstat -net -4 |grep -v Active |grep -v Proto|wc -l`;
$dummy=~ /(.*)/;
Puis-je utiliser la même structure rrd que la solution de matao ?
Merci et dsl pour ces quesions qui sont peut être stupide.
... une question n'est jamais stupide
Dans le cas des commandes :
netstat -tn | grep ESTABLISHED | grep :80 | wc -l
netstat -net -4 |grep -v Active |grep -v Proto|wc -l
elles retournent directement le résultat sans "fioritures", et donc le "deuxième dummy" ne sers à rien.
Tu peux à la place faire ça:
$dummy = `netstat -net -4 |grep -v Active |grep -v Proto|wc -l`;
system( "rrdtool update apache_hits.rrd -t hits N:$dummy" );
(Attention à bien remplacer $1 par $dummy dans l'appel système par contre !)
Sinon oui, tu peux utiliser la même structure rrd que matao qui s'y prête parfaitement.
PS : Le site web est tout aussi propre que que le script
Ca marche pas
DEF:apache_hits={#path#}apache_hits.rrd:netstat:AVERAGE
au lieu de :
DEF:apache_hits={#path#}apache_hits.rrd:apache_hits:AVERAGE
netstat -tn | grep ESTABLISHED | grep :80 | wc -l me donne ce nombre la a un moment x. Si le script d'update s'execute a x+1 peut être que ce nombre aura changé. Si le script s'execute entre les connexions, mes graphs vont être foireux non ? Un moyen de remedier a cela ?
Tu peux pour remédier à cela utiliser une des deux solutions présentées dans les commentaire ci-dessus.
1/ Ma solution (2ème commentaire) :
Performante, mais demande d'installer et de configurer le module server-status d'apache.
2/ La solution de Matao (3ème commentaire) :
Moins performante et valable que si tu n'as qu'un seul fichier de log d'apache. Par contre plus facile à mettre en place, car pas besoin du module server-status.
J'ai installe eLuna Graph et suivi les conseils d'installation, mais les images des graphs ne sont pas affiches . J'ai la page index.pl mais a la place des images j'ai de "broken links". Est-ce que tu as une idee ?
Merci
Pas vraiment d'idée, mais essayes de vérifier ça:
- Est-ce que les fichiers /rrd/*/*.rrd sont bien mis à jour par lors du cron ? pour le savoir, vérifie si les dates de dernière modification sont bien mises à jour par exemple
- Est-ce lorsque tu affiches index.pl des fichiers png sont bin créés dans le répertoires "graphs" ? Si ce n'est pas le cas, es tu sûr que l'utilisateur qui exécute le script index.pl (apache ? nobody ? www-data ?) a bien les droits d'écriture dans ce répertoire ? ou a bien accès à rrdtool ?
- Si les images png sont bien générées, est-ce que le dossier est bien accessibles en lecture par l'utilisateur du qui exécute le script index.pl ?
Tiens moi au courant
J'ai instllé cf. aux instructions et j'ai les problemes suivantes :
- le cron ne s'execute pas car il n'y a pas de fichier rrd generé
- en accessant http://localhost/graphs le fichier index.pl n'est pas executé mais il m'est proposé pour telechargement .
Sur Apache 2.0.55(Ubuntu Desktop 6.10) j'ai les modules suivantes activées : svn, python, php, ssl, mod_perl.
Les repertoires sont en ecriture pour l'utilisateur www-data.
Merci pour ton aide
<Directory /var/www/graphs/>
AddHandler cgi-script .pl
Options +ExecCGI
DirectoryIndex index.pl
</Directory>
Si oui, as-tu bien redémarré apache ensuite ?
Pour le problème du crontab... je sais pas quoi dire...
Quelques pistes:
- As-tu bien installé, comme c'est marqué dans le fichier README les modules DateTime et HTML::Template::Expr ?
- As-tu bien installé RRDTool ?
- Si tu lances le fichier update.pl à la main, crée-t-il les fichiers rrd ? (dans ce cas le problème vient de la tâche cron, qui ne fait rien d'autre qu'éxécuter périodiquement ce script).
- Où as-tu spécifié la tache cron ? dans /etc/crontab ?
Est'ce que les images sont genere a la vole ou genere une fois et "cached" pour quelques minutes ?
Ovidiu
J'essaye d'installer le script eluna graph sur mon serveur ... mais en vain
quand je vais sur http://monsite/graphs/ j'obtiens : 500 Internal Server Error
j'ai bien suivi les instructions d'installation, mais j'ai du rater quelque chose quelque part ...
j'ai un serveur apache 2, perl avec les modules requis, rrdtool, ...
quand le lance index.pl en ligne de commande j'obtiens seulement le message "This script must be executed as a web script" mais pas d'autres erreur, donc ca semble etre ok
et quand je regarde les logs apache, j'ai ce message d'erreur : "Premature end of script headers: index.pl" et c'est tout
merci de m'eclairer parce que la je bloque completement
MAtthieu
A vue de nez, je dirais problème de droits: est-ce que le script est bien exécutable ? est-ce que l'utilisateur est correct ?
Pour tester, si tu fais un petit fichier de test avec les même permissions et le même user/group, cela fonctionne ?
Exemple de fichier de test:
#!/usr/bin/perl
print "Content-type: text/html
";
print "<H1>Hello World</H1>
";
et a vue de nez tu as absolument raison
les fichiers appartenaient a root ... j'ai changé les droits et ca marche parfaitement !
allez, maintenant je m'attaque à essayer de créer des graphs personalisés. et hop.
merci pour ta reponse rapide et désolé d'avoir posté pour un problème aussi simple mais linux en général est très nouveau pour moi (mais ca me plait de plus en plus !)
Je partage un peu mon expérience sous OS debian, et le problème des images qui s'affiche pas que j'ai fini par résoudre.
Pour debian : voici les paquets à installer :
#apt-get install perl libhtml-template-expr-perl libdatetime-perl rrdtool
Les dépendances suivront (bien sur). Les paquets à installer sont surement les mêmes ou presque sur les autres distribs.
Si le fichier index.pl se propose en téléchargement au lieu de s'afficher dans le navigateur, lancé la commande ./index.pl dans le rep d'install via la console, il doit retourner "This script must be.....", Si ça affiche autre chose, c'est qu'un paquet manque (je me suis rendu compte ainsi de l'absence de libhtml-template-expr-perl).
Problème d'image :
Je suis pas un pro d'apache (2.2) ni de perl, mais j'avais écrit ça dans mon 000-default :
ScriptAlias /eluna/ /var/www/eluna/
<Directory /var/www/eluna/>
AddHandler cgi-script .pl
Options +ExecCGI
DirectoryIndex index.pl
</Directory>
Je ne sais pas pourquoi, mais avec cette config, les images ne s'affichent pas du tout.
Tout fonctionne correctement une fois qu'on a commenté la ligne :
#ScriptAlias /eluna/ /var/www/eluna/
Après quoi, tout fonctionne correctement. Ormis les statistiques eth0 ?? Il y a marqué "nan" à la place des valeurs. Ce sera mon combat de demain
++ Stephanfo
Merci pour ce retour d'expérience en tout cas ! ... et vive Debian
Sinon, autre combat, autre victoire.
Concernant les traffics ETH0 IN et OUT, je viens de comprendre pourquoi ça marchait pas. Je suis sous debian testing "etch". Le cron génère un environnement différent de la console. Aussi, le répertoire /sbin n'est pas inclut dans $PATH. Résultat, ifconfig .... n'est pas trouvé. Une fois que j'ai mis le chemin complet (/sbn/ipconfig ....) dans le fichier ~/rrd/05_eth0_out/update.pl , ça fonctionne.
Je pense faire un script pour les quotas. Si j'y arrive, je le posterai.
++ Stéphane
PS : Je suis d'accord, vive debian
create.ssh :
#!/bin/bash
rrdtool create quota.rrd
--start `date +%s`
--step 300
DS:current:GAUGE:600:0:U
DS:soft:GAUGE:600:0:U
DS:hard:GAUGE:600:0:U
RRA:AVERAGE:0.5:1:2016
RRA:AVERAGE:0.5:6:1344
RRA:AVERAGE:0.5:24:732
RRA:AVERAGE:0.5:144:1460
update.pl :
#!/usr/bin/perl
$user = "server-cs";
$dummy = `/usr/bin/quota $user | tail -n 1`;
$dummy =~ s/s+/ /g;
$dummy =~ / (.*) (.*) (.*) (.*) (.*) (.*) (.*) /;
system("rrdtool update quota.rrd -t current:soft:hard N:$2"."000:$3"."000:$4"."000");
graph.pm :
$GRAPH_TITLES{'quota'} = "{#server#} - Quota de server-cs";
$GRAPH_CMDS{'quota'} = <<"QUOTA_GRAPH_CMD";
--title "{#server#} - Quota de server-cs"
--vertical-label="octets"
--units-exponent 9
--lower-limit 0
DEF:current={#path#}quota.rrd:current:AVERAGE
DEF:soft={#path#}quota.rrd:soft:AVERAGE
DEF:hard={#path#}quota.rrd:hard:AVERAGE
CDEF:currentmo=current,1000,/,1024,/
CDEF:softmo=soft,1000,/,1024,/
CDEF:hardmo=hard,1000,/,1024,/
AREA:current{#dcolor1#}:"Used Space "
GPRINT:currentmo:LAST:"Current\: %3.0lfMo "
GPRINT:currentmo:AVERAGE:"Average\: %3.0lfMo "
GPRINT:currentmo:MAX:"Max\: %3.0lfMo\n"
LINE2:soft{#color2#}:"Limit soft "
GPRINT:softmo:LAST:"Current\: %3.0lfMo "
GPRINT:softmo:AVERAGE:"Average\: %3.0lfMo "
GPRINT:softmo:MAX:"Max\: %3.0lfMo\n"
LINE3:hard{#color3#}:"Limit hard "
GPRINT:hardmo:LAST:"Current\: %3.0lfMo "
GPRINT:hardmo:AVERAGE:"Average\: %3.0lfMo "
GPRINT:hardmo:MAX:"Max\: %3.0lfMo\n"
QUOTA_GRAPH_CMD
1; # Return true
Voila, c'est surement perfectible, mais ça peut être une bonne base.
++ Stephanfo
voila je me suis fait un script pour monitorer le serveur de mail.
Ca fonctionne avec qmail sur gentoo, je ne sais pas ce que ca donne sur d'autres systemes ...
si ca interresse qqn voila le code :
create.sh :
#!/bin/bash
rrdtool create qmail.rrd
--start `date +%s`
--step 300
DS:all:GAUGE:600:0:U
DS:notyet:GAUGE:600:0:U
RRA:AVERAGE:0.5:1:2016
RRA:AVERAGE:0.5:6:1344
RRA:AVERAGE:0.5:24:732
RRA:AVERAGE:0.5:144:1460
graph.pm :
$GRAPH_TITLES{'qmail'} = "{#server#} - qmail queue";
$GRAPH_CMDS{'qmail'} = <<"QMAIL_GRAPH_CMD";
--title "{#server#} - qmail queue"
--vertical-label="Nb Messages"
--units-exponent 0
--lower-limit 0
DEF:all={#path#}qmail.rrd:all:AVERAGE
DEF:notyet={#path#}qmail.rrd:notyet:AVERAGE
AREA:all{#color3#}:"messages in queue"
GPRINT:all:LAST:"Current\: %5.0lf "
GPRINT:all:AVERAGE:"Average\: %5.0lf "
GPRINT:all:MAX:"Maximum\: %5.0lf\n"
AREA:notyet{#color1#}:"messages in queue but not yet preprocessed"
GPRINT:notyet:LAST:"Current\: %5.0lf "
GPRINT:notyet:AVERAGE:"Average\: %5.0lf "
GPRINT:notyet:MAX:"Maximum\: %5.0lf"
QMAIL_GRAPH_CMD
1; # Return true
update.sh :
#!/bin/bash
ALL=`/var/qmail/bin/qmail-qstat |grep "queue:" |cut -d":" -f2 |cut -d" " -f2`
NOTYET=`/var/qmail/bin/qmail-qstat |grep "preprocessed:" |cut -d":" -f2 |cut -d" " -f2`
rrdtool update qmail.rrd -t all:notyet N:$ALL:$NOTYET
the graph system looks nice! in fact the whole webby does!
back to the essentials!
BUY VIAGRA BUY VIAGRA BUY VIAGRA
Comme je suis un Hollandais je préfère écrire en Anglais, j'espère que tu comprends cela
First of all, very nice work! It looks very well.
However, I installed it using your readme, and here is the result: graph.chrysaor.nl.
As you can see, there are no reals graphs because there are no lines in the images. And the text in the images shows 'nan' everywhere. Am I missing something? I'd be glad if you could help me out.
Merci d'avantage
Thanks for your feedback.
Might be a problem of crontab not executed every 5 minutes. If you execute the update.pl script manually, does it works ? if yes => crontab problem. If not, what's happen exactly ? error ? When it works, *.rrd files must be updated every update (manually or crontab), does they ?
Running the script manually gave no errors and indeed I didn't configure cron correctly. But now it does. Thank you so much!
Sander
I tried to create the Apache_hits graph, so I enabled server-stats and created a folder 08_apache_hits in the rrd folder. In 08_apache_hits I created the files you mentioned above.
When I execute the 'main' update.pl, no errors are echoed. But when I open the page in my browser, the Apache hits graph is not shown and it is not in the graphs folder too.
What should I do?
I also noticed that no more graphs are created for the network traffic, all other graphs go fine.
Thanks,
Sander
For the network traffic, try to see if the command executed in the rrd/05_eth0_out/update.sh file returns a number that increases each time
Command is: ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1
Or maybe your interface is not named eth0 ?
For the apache hits, are you sure that you correctly configure it ? are you sure that www-browser http://localhost/server-status/ display server-status page ?
If yes, and so if the command www-browser -dump http://localhost/server-status/ | grep "Total accesses" works, try to see if you have created all files with correct rights / owners.
The network traffic command returns a number, here is the output:
root@alpha:~# ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1
453149737
root@alpha:~# ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1
453193979
root@alpha:~# ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1
453223291
root@alpha:~# ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1
453240455
The graphs have worked some time, but suddenly the disapeared after running the update script and they didn't come back. They still don't.
I figured out that I had to add "ExtendedStatus On" to my apache config file. Now running www-browser -dump http://localhost/server-status/ | grep "Total accesses" does give output. And after chowning the main graph tool folder to www-data, the apache graph shows up
Thanks mate
try to replace ifconfig by /sbin/ifconfig in update.sh files
Example:
#!/bin/bash
rrdtool update eth0_out.rrd
-t out
N:`/sbin/ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1`
Hope it works !
Now I've got another problem, again with the network graps. When there has been some high traffic, for example 12 MByte, it looks like there is no traffic when there is a normal network activity, for example 38 KByte, because of the automatic scaling.
Is there a solution for this?
For the second thing, there's no solution that I know...
CDEF:hits_mn=hits,60,*
to:
CDEF:hits_hr=hits,3600,*
(and replace hits_mn by hits_hr in the rest of the file)
************ update.sh ************
#!/bin/bash
a=`ps aux | grep btphptornado| wc -l | sed -e "s/ //g"`
a=`expr $a - 1`
rrdtool update torrent.rrd
-t all
N:$a
************ graph.pm ************
$GRAPH_TITLES{'torrent'} = "{#server#} - Active Torrents";
$GRAPH_CMDS{'torrent'} = <<"PROC_GRAPH_CMD";
--title "{#server#} - Active Torrents"
--vertical-label="Torrents"
--units-exponent 0
--lower-limit 0
DEF:all={#path#}torrent.rrd:all:AVERAGE
AREA:all{#color3#}:"Torrents "
GPRINT:all:LAST:"Current\: %5.0lf "
GPRINT:all:AVERAGE:"Average\: %5.0lf "
GPRINT:all:MAX:"Maximum\: %5.0lf\n"
PROC_GRAPH_CMD
************ create.sh ************
#!/bin/bash
rrdtool create torrent.rrd
--start `date +%s`
--step 300
DS:all:GAUGE:600:U:U
RRA:AVERAGE:0.5:1:2016
RRA:AVERAGE:0.5:6:1344
RRA:AVERAGE:0.5:24:732
RRA:AVERAGE:0.5:144:1460
J'ai l'intention d'utiliser ton appli pour monitorer des serveurs web distants.
Cela fonctionne en integrant des commandes SSH dans les update.pl et update.sh
Juste un détail, y a t'il un endroit où je puisse modifier le nom du serveur apparaissant sur les graphs, sans devoir modifier tous les fichiers graph.pm ?
Merci et encore bravo
Si j'ai bien compris ta question, le nom du serveur est modifiable dans la section "configuration", au début du fichier "index.pl". C'est ce nom de serveur qui sera utilisé ensuite dans les graphs.
Je n'avais pas regardé dans ce fichier !!!
J'en profite pour te poser une nouvelle question car je débute en rrdtool, y a t'il une commande pour vider les donnèes dans une base rrd, histoire de repartir sur un bon pied après différents tests ?
Merci,
Par contre, je tente d'ajouter un graphe pour avoir uniquement le load average des 5 dernieres minutes et je n'y arrive pas ! J'ai duplique rrd/01_load en rrd/01_load5mn.
Le fichier .rrd se crée bien, mais pas les fichiers graphe !
Voici mes fichiers de conf :
# cat create.sh
#!/bin/bash
rrdtool create load5mn.rrd
--start `date +%s`
--step 300
DS:load5mn:GAUGE:600:0:U
RRA:AVERAGE:0.5:6:1344
# cat graph.pm
$GRAPH_TITLES{'load5mn'} = "{#server#} - Load Average 5mn";
$GRAPH_CMDS{'load5mn'} = <<"LOAD5MN_GRAPH_CMD";
--title "{#server#} - Load Average 5mn"
--vertical-label=""
--units-exponent 0
--lower-limit 0
DEF:load5mn={#path#}load5mn.rrd:load5mn:AVERAGE
CDEF:mysum=load5mn,+
STACK:load5mn{#dcolor2#}:"load average 5mn"
GPRINT:load5mn:LAST:"Current\: %5.2lf "
GPRINT:load5mn:AVERAGE:"Average\: %5.2lf "
GPRINT:load5mn:MAX:"Max\: %5.2lf\n"
LINE1:mysum{#linecolor#}
LOAD5MN_GRAPH_CMD
1; # Return true
# cat update.sh
dummy=`ssh xxxwww.www.www "cat /proc/loadavg"`
V1=`echo $dummy | cut -d" " -f1`
V2=`echo $dummy | cut -d" " -f2`
V3=`echo $dummy | cut -d" " -f3`
rrdtool update load5mn.rrd -t load5mn N:$V2
-------
J'ai du faire une ou des erreurs
Merci de ton aide ...
... tu t'en es sorti ?
Est ce que quelqu'un a essayé d'installer eluna en multi-server.
Mecri pour vos réponse.
Est ce que une personne parmis vous peut m'aider, je souhaite faire le graph du trafic réseau sous solaris avec un netstat -i je recupere le nombre de packets et je l'insere dans la base eth0_in, Est ce que quelqu'un peut me dire quel mode je peux creer la base eth0_in en gauge ou counter, en sachant que mon script de collect toure tous les 5min et comment je peux afficher mon graph avec le nombre de packets par seconde.
merci par avane.
J'espère simplement que notre ami Steph n'aura pas oublié de programmer un backoffice pour dégager tous les comments foireux comme celui-ci !!!
A few comments about this nice and very usefull script:
- Sander 31/03/2007
rrdtools actually supports logarithmic scaling which with nowadays Gb networking works better than linear graphs, e.g. for log(kBytes/s):
DEF:out2={#path#}eth0_out.rrd:out:AVERAGE
CDEF:out3=out2,1000,/
CDEF:out4=out3,LOG
CDEF:out=out4,0.43429448,*
LINE3:out{#color3#}:"Outbound "
No very elegant. It should be possible to put all in one line.
I would be very pleased to find a simple Eluna script which checks postfix and cyrus IMAP server for ingoing, outgoing and rejected mails. Mailgraph exists, but it would be nice to have it all in one set of scripts and webpages.
Also monitoring SUN Gridengine Queuing system might be interesting: nb. of jobs running in different queues and nb. of jobs waiting.
Finally I'm a bit confused about the fact that the scripts should be run with root privileges. Even for a web server with restricted access this might be a security issue. And as for the update scripts in the Eluna sample package: none of them requires root access if one replaces 'ifconfig' with '/sbin/ifconfig'. I simply run them under a system wide user 'eluna'.
First, thanks for your feedabck... and my turn to be sorry, my english writing is quite awful ^^
I just have read your comment but I don't have many time for now, so quick answer :
- For logarithmic scaling, can you explain a bit more ? (why do you divide by 1000, and what is 0.43429448 ?) - no time to understand myself, sorry
- For other scripts, the goal of this soft is to provide a few "universal" scripts, and let users make their own scripts. For example, the two scripts you want would be useless for me. But feel free if you make some custom scripts to send them to me. Maybe I can put a section on this page "custom scripts made by users".
- For the root privileges, maybe you're right ! ... Don't have the time to check this for now, but I'll probably make a new version later with this idea. But I'm not agree with the security issue. If configured like it's said in the README file, I don't think there is.
For now, a new version will be available soon, but it's just one with a new README file translated in english. A translator is working on the translation of the website and the softwares.
My preferred unit is kByte, not Byte. The machine is part of a network with quite some background noise, so there is always something going on. As for the factor: CDEF calculates the logarithmic function with Euler's number as base, that is LN or LOG_e. In order to get LOG_10 one has to multiply with LOG_10 e: LOG_10 X = LOG_10 e * LN X.
As for the "costum scripts": I consider this to be a very interesting idea to have individual solutions for specific problems available on eluna.org. In fact I did choose your script from the examples at Tobi Oetiker's web site because Eluna is so flexible. I will use it for a networked system where on different machines different values are of interest for monitoring. So while the principle structure is the same the directories in ./rrd will differ, and I can still have the same index.pl for creating the web pages. Very nice.
Up to now I just did minor changes and wrote a rrd subdirectory for a temperature and humidity sensor. Here the work was mainly in getting the output of this specific sensor which might not be of general interest. But if I manage to write a script for the Gridengine system I will leave a message here and can send an example. This might take some time as I'm busy with other projects right now.
I'll look at the logarithmic thing as soon as I'll get a little bit of time
i installed your extension page comments in a website.
all is allright.
but i have noch idea how to display all comments and the form by default.
also not by using the link maybe "Comments"
is this possible
and when how?
many greeting
Ulrike
Not really the page for a comment on this extension (this page is dedicated to the software eLuna Graph System), but no problemo
To display all comments and the form by default, you juste have to erase the default value of startCode (that is "LINK")
So in your template, put the line :
plugin.tx_elunapagecomments_pi1.startCode =
Clear all caches, and it will be ok
Hope it helps !
Je vous écris ce message pour savoir si vous aviez enregistré des comportements étranges sur l'<Inbound Traffic>. En effet, j'ai essayé de copier un fichier de 700Mo de mon PC à mon serveur. ; le graphe ne monte pas au dessus de 100 k... alors que je devrais plutot avoir plusieurs Mo... des idées ?
Je pense ajouter qq "plugins" à la solution. Je les posterai ici quand je les aurai faits.
Merci!
Pour l'<Inbound Traffic>, non, aucune idée... c'est bizarre : je l'utilise également sur un serveur local chez moi, et donc sur lequel les taux de transferts sont assez gros, et le <Inbound Traffic> est bien correct.
Pour les plugins, oui, n'hésite pas à les poster ici !
A bientôt donc
Si oui comment pourrait on avoir la quantité de donnée transférée ?
J'avais pas compris que tu ne parlais pas de ça, mais effectivement, c'est ce que ce graphe fait.
Pour ce qui est de la quantité de données transférées, tu l'as en fait : 90 Ko multiplié par la période de temps en secondes doit correspondre à 700 Mo
Mais ceci dit, ce dont tu parles (la quantité de données transférée sur des périodes assez longues) aurait plus sa place dans un tableau récapitulatif que dans un graphe avec un axe de temps qui se veut continu non ? Sinon comment afficher ce types de données ? en extrapolant ? ce serait étrange...
Le calcul du traffic réseau est erroné au niveau de la génération du graphique.
Ex: Pour le traffic sortant, dans graph.pm
Il faut rajouter cette ligne après le DEF=
CDEF:outo=out,8,*
Et changer les 5 références suivantes à out en outo
Sinon le taux affiché ne correspond pas à la réalité (vérifié avec iptraf).
Il faut en faire de même pour le trafic entrant (avec in et ino)
Merci pour ton feedback.
Il est bien marqué sur les graphiques du traffic réseau que c'est des bytes qui sont affichés, c'est à dire des octets. En multipliant par 8 tu obtiens des bits, et non des bytes (j'imagine que iptraf t'affiche lui des bits, mais ici, c'est bien des octets que je veux afficher).
Si tu conserve cette multiplication par 8, n'oublie pas de changer la légende de bytes à bits
N'ayant pas de dans mon /proc/meminfo sur gentoo, le calcul s'en retrouve faussé.
J'ai donc changé le calcul pour $mem de la façon suivante dans update.pl :
my $mem = ($total?100-(int(($memfree/$total)*100)):0);
(méthode reprise du calcul de la consommation de swap)
(Je me suis laissé avoir par l'interface réseau et par la bande passant de mon serveur qui sont à 100Mbits/s).
Je vais donc revenir en arrière
J'avais tenté de le faire il y a quelques temps mais j'obtenais toujours des erreurs, à cause du format numérique de la valeur renvoyée par ping en perl, me semble-t-il.
Merci.
... essaye peut-être la documentation officielle : http://oss.oetiker.ch/rrdtool/doc/index.en.html
j'ai finalement trouvé une solution qui fonctionne :
# rrdtool dump mysql_queries.rrd > aaa.xml
editer aaa.xml à la main pour enlever la valeur pic
# rrdtool restore aaa.xml mysql_queries.rrd
Je suis en train de tester eLuna sur Ubuntu 8.10 sur x86_64 : très joli. J'ai un curieux problème sur Intrepid : on dirait qu'une commande cron n'est pas exécutée si on la fait précéder du nom de l'utilisateur ? il a fallu que je fasse sauter 'root' dans crontab pour que ça marche ? Ça aura été le seul ennui.
Merci à vous deux pour vos feedbacks.
@spirit : très sympa le skin en effet
J'ai implémenté les graphs apache_hits à partir des scripts donnés dans les commentaires. Mais j'ai eu quelques problèmes :
- dans la version proposée par matao il y a 3 ans, il manque le create.sh, le RRD doit être en ABSOLUTE et non pas en DERIVE comme la version de Steph, puisque dans la version de matao on ne traite que le nombre de connexions sur les 5 dernières minutes et non pas le total des connexions.
- c'est lent si les fichiers de logs sont gros.
- le filtre de logs par date n'est pas forcément correct suivant l'heure à laquelle c'est appelé.
Je propose donc la version suivante, utilisant grep :
$ cat ../08_apache_hits/create.sh
#!/bin/bash
rrdtool create apache_hits.rrd \
--start `date +%s` \
--step 300 \
DS:hits:ABSOLUTE:600:0:U \
RRA:AVERAGE:0.5:1:2016 \
RRA:AVERAGE:0.5:6:1344 \
RRA:AVERAGE:0.5:24:732 \
RRA:AVERAGE:0.5:144:1460
$ cat ../08_apache_hits/update.pl
#!/usr/bin/perl
$logpath="/var/log/apache2/pps.ipercom.lan-access_log";
$daten1 = `date -d 'now - 1 min' '+%d/%h/%Y:%H:%M'`;
$daten2 = `date -d 'now - 2 min' '+%d/%h/%Y:%H:%M'`;
$daten3 = `date -d 'now - 3 min' '+%d/%h/%Y:%H:%M'`;
$daten4 = `date -d 'now - 4 min' '+%d/%h/%Y:%H:%M'`;
$daten5 = `date -d 'now - 5 min' '+%d/%h/%Y:%H:%M'`;
chomp $daten1 ;
chomp $daten2 ;
chomp $daten3 ;
chomp $daten4 ;
chomp $daten5 ;
$nbhits = `grep -c -e $daten5 -e $daten4 -e $daten3 -e $daten2 -e $daten1 $logpath` ;
chomp $nbhits ;
system( "rrdtool update apache_hits.rrd -t hits N:$nbhits" );
$ cat graph.pm
$GRAPH_TITLES{'apache_hits'} = "{#server#} - Apache Hits";
$GRAPH_CMDS{'apache_hits'} = <<"AH_GRAPH_CMD";
--title "{#server#} - Apache Hits"
--vertical-label="Hits Per Minute"
--units-exponent 0
--lower-limit 0
DEF:hits={#path#}apache_hits.rrd:hits:AVERAGE
CDEF:hits_mn=hits,60,*
AREA:hits_mn{#color2#}:"Hits Per Minute "
GPRINT:hits_mn:LAST:"Current\\: %5.0lf "
GPRINT:hits_mn:AVERAGE:"Average\\: %5.0lf "
GPRINT:hits_mn:MAX:"Maximum\\: %5.0lf\n"
LINE1:hits_mn{#linecolor#}
AH_GRAPH_CMD
1; # Return true
Also when I try to run update.pl I get the following error:
eth0: error fetching interface information: Device not found
./update.sh: line 3: rrdtool: command not found
Error while trying to update RRD 'eth0_out'
eth0: error fetching interface information: Device not found
./update.sh: line 3: rrdtool: command not found
Error while trying to update RRD 'eth0_in'
./update.sh: line 9: rrdtool: command not found
Error while trying to update RRD 'process'
Could these two issues be connected?
Here's a screenshot of what I see: http://img85.imageshack.us/img85/4920/picture63s.png
... If update.pl doesn't work correctly, there's no sense of going further ^^
And so :
- Check that rrdtool is installed
- Check that the dir in which rdtool is installed is in the path
The strange thing is that you've got only errors for this 3 rrds ?
For the images, are they generated ?
If they are generated, (png files in the "graphs" directory), the problem come from web server rights.
How can I "check that the dir in which rdtool is installed is in the path"?
Thanks for the help!
I don't really have the time to help you more sorry.
Juste check :
- Which user is executing update.pl
- Is this user can execute rrdtool without specifying the path ? If not, you must add the rrdtool directory (/usr/bin ?) to the user PATH variable
... For the rest google is your friend
Can some one give me an example of how to show used space on /home folder. I tried to cp and edit the 08_space folder. But I had no suc6.
Thanks
You may give more details. What did you try ?
The command used is :
df | grep /home
Does this command work on your system ?
$dummy = `df | grep /dev/sdb1\$`;
$dummy=~ /(.*) (.*)%/;
in update.pl.
The output of "df | grep /dev/sdb1" is:
/dev/sdb1 1.8T 123G 1.7T 7% /media/data_a
There is no plot in the graph. You can find all my files below.
create.sh:
#!/bin/bash
rrdtool create sdb1.rrd \
--start `date +%s` \
--step 300 \
DS:space:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:2016 \
RRA:AVERAGE:0.5:6:1344 \
RRA:AVERAGE:0.5:24:732 \
RRA:AVERAGE:0.5:144:1460
update.pl:
#!/bin/perl
$dummy = `df | grep /dev/sdb1\$`;
$dummy=~ /(.*) (.*)%/;
system("rrdtool update sdb1.rrd -t space N:$2");
graph.pm:
$GRAPH_TITLES{'sdb1'} = "{#server#} - Used Space On /media/data_a";
$GRAPH_CMDS{'sdb1'} = <<"SPACE_GRAPH_CMD";
--title "{#server#} - Used Space On /media_data_a"
--vertical-label="Percent"
--lower-limit 0 --upper-limit 100
DEF:space={#path#}sdb1.rrd:space:AVERAGE
AREA:space{#color2#}:"Used Space "
GPRINT:space:LAST:"Current\\: %3.0lf%% "
GPRINT:space:AVERAGE:"Average\\: %3.0lf%% "
GPRINT:space:MAX:"Maximum\\: %3.0lf%%\\n"
LINE1:space{#linecolor#}
SPACE_GRAPH_CMD
1; # Return true
"df | grep /home" on my system give :
"/dev/sda2 721075720 147186264 537549336 22% /home"
Sizes are in bytes, not in "human readable" format.
Hope it helps
df output:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 29461480 3017476 24947428 11% /
none 1542208 264 1541944 1% /dev
none 1547808 284 1547524 1% /dev/shm
tmpfs 1547808 12 1547796 1% /tmp
none 1547808 676 1547132 1% /var/run
none 1547808 0 1547808 0% /var/lock
tmpfs 1547808 0 1547808 0% /var/tmp
/dev/sdb1 1922860900 192979372 1729881528 11% /media/data_a
/dev/sdc1 1922859912 200028 1922659884 1% /media/data_b
df | grep /media/data_a
/dev/sdb1 1922860900 205056396 1717804504 11% /media/data_a
Did you try to reinit it (by deleting the .rrd file) and wait for 10 minutes ? (two crontab tasks)
Thanks
It should be : rrdtool update sdb1.rrd -t space N:11
@@ -59,4 +59,4 @@
}
chdir('../../');
}
-chdir(origdir);
+chdir($origdir);
A Page Browser would be nice.
It would be also nice to be able to hide the comments again.
www.test.de
... but please, this page is about eLuna Graph System, not about the comment extension!