Diferencia entre revisiones de «Servidor de gráficas»
De Guifi.net - Wiki Hispano
(→Definicion) |
(→Definicion) |
||
Línea 28: | Línea 28: | ||
El Master SNPServices consulta al servidor Web una lista de todos los nodos de una zona. Aquesta pregunta la fa amb el script php que es diu '''refresh_cnml.php.''' . El servidor web li torna una llista de nodes en format CNML que enmagatzema en un arxiu que es diu /var/lib/snpservices/data/guifi.cnml | El Master SNPServices consulta al servidor Web una lista de todos los nodos de una zona. Aquesta pregunta la fa amb el script php que es diu '''refresh_cnml.php.''' . El servidor web li torna una llista de nodes en format CNML que enmagatzema en un arxiu que es diu /var/lib/snpservices/data/guifi.cnml | ||
− | + | Mostro l'inici de l'arxiu guifi.cnml | |
− | + | <pre><?xml version="1.0"?> | |
+ | <cnml version="0.1" server_id="1" server_url="http://guifi.net" generated="20121105 1247"> | ||
+ | </pre> | ||
Línea 38: | Línea 40: | ||
− | '''Pas 5 i 6'''.-Tornem al nostre servidor client | + | '''Pas 5 i 6'''.-Tornem al nostre servidor client SNPServices que estem muntant. |
El servidor SNPServices te una direccio an on buscar l'arxiu cnml crear per el Master SNPServices | El servidor SNPServices te una direccio an on buscar l'arxiu cnml crear per el Master SNPServices | ||
Línea 45: | Línea 47: | ||
En aquesta direccio es descarrega la llista de nodes a monitoritzar i transforma el contingut en una arxiu que conte els nodes a monitotritzar i en un llenguatge que el pugui entendre el servei mrtg. | En aquesta direccio es descarrega la llista de nodes a monitoritzar i transforma el contingut en una arxiu que conte els nodes a monitotritzar i en un llenguatge que el pugui entendre el servei mrtg. | ||
+ | Mostro l'inici de l'arxiu mrtg.cfg | ||
+ | <pre> | ||
+ | # PathAdd: /usr/local/rrdtool-1.2.12/bin | ||
+ | # LibAdd: /usr/local/rrdtool-1.2.12/lib/perl/5.8.8/i386-linux-thread-multi | ||
+ | HtmlDir: /var/lib/snpservices/rrimg/ | ||
+ | ImageDir: /var/lib/snpservices/rrimg/ | ||
+ | LogDir: /var/lib/snpservices/rrdb/ | ||
+ | LogFormat: rrdtool | ||
+ | ThreshDir: /var/lib/snpservices/rrdb/ | ||
+ | Forks: 12 | ||
+ | Title[11833_ping]: Temps del ping de Futbol-Remei-VicRd1 | ||
+ | </pre> | ||
Línea 51: | Línea 65: | ||
Aquest cron (script que s'autoexecuta segons programació) esta aqui '''/etc/cron.d/snpservices''' | Aquest cron (script que s'autoexecuta segons programació) esta aqui '''/etc/cron.d/snpservices''' | ||
+ | <pre> | ||
*/30 * * * * root if [ -x /usr/bin/php ]; then env LANG=C /usr/bin/php /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php >> /var/log/snpservices/mrtgccfg.log 2>&1; fi | */30 * * * * root if [ -x /usr/bin/php ]; then env LANG=C /usr/bin/php /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php >> /var/log/snpservices/mrtgccfg.log 2>&1; fi | ||
*/5 * * * * root if [ ! -x /var/lock/mrtg ]; then mkdir /var/lock/mrtg ; fi; if [ -x /usr/bin/mrtg ] && [ -r /var/lib/snpservices/data/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l >> /var/log/snpservices/mrtg.log 2>&1; fi | */5 * * * * root if [ ! -x /var/lock/mrtg ]; then mkdir /var/lock/mrtg ; fi; if [ -x /usr/bin/mrtg ] && [ -r /var/lib/snpservices/data/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l >> /var/log/snpservices/mrtg.log 2>&1; fi | ||
/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php | /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php | ||
+ | </pre> | ||
Aquest ve a dir que mitjançant el script /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php, consulti l'arxiu guifi.cnml abans descrit i transformi el contingut en un xml disponible per al servei mrtg. Ho enmagatzema en /var/lib/snpservices/data/mrtg.cfg | Aquest ve a dir que mitjançant el script /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php, consulti l'arxiu guifi.cnml abans descrit i transformi el contingut en un xml disponible per al servei mrtg. Ho enmagatzema en /var/lib/snpservices/data/mrtg.cfg |
Revisión de 10:52 6 nov 2012
Definicion
El servidor de gráficas se baas en el servicio de GUIFI llamado SNPServices. El servidor SNPServices, y para ser mas exactos cliente SNPServices es un servidor linux, con php, apache, mrtg y rrdtool, no necesita nada mas. Le llamamos cliente porque el servidor Master SNPServices es un servidor que nos enviará informacion a nuestro servidor cliente SNPServices. Aqui tienes un esquema que te hará ver claro esta definicion.
Definicion para expertos
El cliente SNPServices consulta al Master snpservices la lista de nodos a monitorear, recogida previamente del servidor web mediante CNML, se parsea la lista y formatea scripts mrtg y los
ejecuta (pings y trafico) para generar un rrd y con consultas http desde el servidor web, se ejecuta un php que convierte los .rrd en imagenes y las muestra.
El servidor WEB de guifi.net conoce la url del servidor de graficas de la zona de un nodo, o sea, los SNPServices clientes de cada zona. La web muestra sus datos locales y los datos remotos.
Definicion extendida
Pas 1.-Un nodo crea un servicio de servidor de gráficas en la web. Este servicio le concede un numero que le identifica. A este valor le llamamos $SNPGraphServerId
Aquest servidor de gràfics, s'instalara un servei Apache, php i els ervei SNPServices. La direccio web l'anomenarem com $SNPDataServer_url
Este servicio puede ser ademas supernodo de una zona y por tanto tiene el código de la zona. A este valor el llamamos $rootZone
Pas 2,. Al crearse este nodo, se actualiza la BBDD de la web- Esta base de datos contiene toda la información de los nodos,servicios y demas de GUIFI.NET
Pas 3 i 4 Abans de continuar amb el treball que fa el servidor SNPServices client, el Master SNPServices ha de fer un treball. El Master SNPServices consulta al servidor Web una lista de todos los nodos de una zona. Aquesta pregunta la fa amb el script php que es diu refresh_cnml.php. . El servidor web li torna una llista de nodes en format CNML que enmagatzema en un arxiu que es diu /var/lib/snpservices/data/guifi.cnml
Mostro l'inici de l'arxiu guifi.cnml
<?xml version="1.0"?> <cnml version="0.1" server_id="1" server_url="http://guifi.net" generated="20121105 1247">
Exactament l'arxiu que obre es aixi $SNPDataServer_url."/guifi/cnml/".$rootZone."/detail"
El servidor web torna un arxiu i el servidor SNPServices el guarda a /var/lib/snpservices/data/guifi.cnml Aquest arxiu s'actualitza de tant en tant i es necessari fer-ho ja que els canvis a la web no es reflexarien en els serveis a monitoritzar.
Pas 5 i 6.-Tornem al nostre servidor client SNPServices que estem muntant.
El servidor SNPServices te una direccio an on buscar l'arxiu cnml crear per el Master SNPServices $MRTGConfigSource='$SNPDataServer_url."/graphs/cnml2mrtgcsv.php?server".='.$SNPGraphServerId;
En aquesta direccio es descarrega la llista de nodes a monitoritzar i transforma el contingut en una arxiu que conte els nodes a monitotritzar i en un llenguatge que el pugui entendre el servei mrtg.
Mostro l'inici de l'arxiu mrtg.cfg
# PathAdd: /usr/local/rrdtool-1.2.12/bin # LibAdd: /usr/local/rrdtool-1.2.12/lib/perl/5.8.8/i386-linux-thread-multi HtmlDir: /var/lib/snpservices/rrimg/ ImageDir: /var/lib/snpservices/rrimg/ LogDir: /var/lib/snpservices/rrdb/ LogFormat: rrdtool ThreshDir: /var/lib/snpservices/rrdb/ Forks: 12 Title[11833_ping]: Temps del ping de Futbol-Remei-VicRd1
Al instalar el serveis SNPServices , s'ens ha afegit un cron a
Aquest cron (script que s'autoexecuta segons programació) esta aqui /etc/cron.d/snpservices
*/30 * * * * root if [ -x /usr/bin/php ]; then env LANG=C /usr/bin/php /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php >> /var/log/snpservices/mrtgccfg.log 2>&1; fi */5 * * * * root if [ ! -x /var/lock/mrtg ]; then mkdir /var/lock/mrtg ; fi; if [ -x /usr/bin/mrtg ] && [ -r /var/lib/snpservices/data/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l >> /var/log/snpservices/mrtg.log 2>&1; fi /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php
Aquest ve a dir que mitjançant el script /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php, consulti l'arxiu guifi.cnml abans descrit i transformi el contingut en un xml disponible per al servei mrtg. Ho enmagatzema en /var/lib/snpservices/data/mrtg.cfg
Una vegada el nostre servidor SNPServices client te les dades dels nodes a monitoritzar, es qua s'executa el proces de recerca de dades al mon amb el sistema mrtg. Ho fa amb /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg
Pas 7 El servei mrtg
Manuales
- Servidor de gráficas 1 (Debian/Ubuntu) método apt + configuración virtualhost apache
- Servidor de gráficas 2 (Debian/Ubuntu) método dpkg
- Servidor de gráficas 3 (Debian/Ubuntu) extendido
Como trabaja el cliente SNPServices
El cliente SNPServices tiene varios passos a realizar para poder recopilar datos y hacer un escaneo en las direcciones cercanas.
La lista de nodos a buscar se hace mediante cnml2mrtgcsv.php Cuando tiene esta lista hace un escaneo a los nodos La información que ha de buscar en los nodos se hace mediante el archivo mrtgcsv2mrtgcfg.php
<?php if (file_exists("/var/www/guifi/snpservices/common/config.php")) { include_once("/var/www/guifi/snpservices/common/config.php"); } else { include_once("/var/www/guifi/snpservices/common/config.php.template"); } $now = time(); $mlast= @fopen("/tmp/last_mrtg", "r"); if ($mlast) $last = fgets($mlast); else $last = 0; print "Last: ".date('Y/m/d H:i:s',((int)$last)+(60*60))."\n"; print "Now: ".date('Y/m/d H:i:s',(int)$now)."\n"; print "ServerId: ".$SNPGraphServerId."\n"; # # Looks if the files has been refreshed at least between 60 an 90 mins ago # range 60..90 depends on $SNPGraphServerId mod 30 # if is still fresh, does not even looks to the server to check if it has changed # $secs = $SNPGraphServerId % 285; $mins = $SNPGraphServerId % 30; $nanos = $SNPGraphServerId % 10; if (($last) and ($now < ($last + ((60 + $mins) * 60)))) { fclose($mlast); echo "Still fresh.\n"; exit(); } # # Local file is not fresh, so looks to the server and cheks if has changed # $hlastnow = @fopen($SNPDataServer_url."/guifi/cnml", "r") or die('Error reading changes\n'); $last_now = fgets($hlastnow); fclose($hlastnow); $hlast= @fopen("/tmp/last_update.mrtg", "r"); if (($hlast) and ($last_now == fgets($hlast))) { fclose($hlast); echo "No changes.\n"; $hlast= @fopen("/tmp/last_mrtg", "w+") or die('Error!'); fwrite($hlast,$now); fclose($hlast); exit(); } } print "Sever CNML dated as: ".date('Y/m/d H:i:s',$last_now)."\n"; # # Server CNML has changed, so going to call the server for the new file # Befoge calling, sleep $SNPGrahServerId mod 285 (4 min, 45 segs) to spread across that # timeslot. # print "Waiting for ".$secs.".".$nanos." seconds\n"; time_nanosleep($secs,($nanos * 10000000)); print date('Y/m/d H:i:s')."\n"; $hf = @fopen($MRTGConfigSource,"r") or die('Error reading MRTG csv input\n"'); $cf = @fopen('../data/mrtg.cfg','w+'); fputs($cf,sprintf($rrdtool_header,$rrdimg_path,$rrdimg_path,$rrddb_path,$rrddb_path)); while ( $buffer = fgets($hf, 4096) ) { $node_line_array = explode(",",$buffer); $line = $node_line_array[count($node_line_array) - 1]; if ( substr($buffer,0,1) == '#' || $line == "Planned\n" || $line == "Dropped\n" || $line == "Building\n" || $line == "Reserved\n" ) continue; $buffer = str_replace("\n","",$buffer); $dev=explode(',',$buffer); if ( count($dev) != 5 ) { $dev[0] = $dev[0]; $dev[1] = $dev[1]; $dev[2] = $dev[2]; $dev[3] = 'eth0;'; $dev[4] = $dev[3]; } fputs($cf,sprintf($mrtg_ping_template, $dev[0], $dev[1], $dev[0], $dev[1], $dev[1], $dev[2], $dev[0], $dev[2], $dev[0], $dev[0], $dev[0], $dev[0], $dev[0], $dev[0], $dev[0], $dev[0]) ); $t = explode('|',$dev[3]); foreach ($t as $k=>$r) { // is the snmp Index given?? if (is_numeric($r)) { $rn = $dev[0].'-'.$r; $trap = $r; $wn = 'wLan'; } // end if numeric snmp Index else { $rn = $dev[0].'-'.$k; // snmp is given by interface name $d = explode(';',$r); $wn = $d[1]; $trap = '\\'.$d[0]; } fputs($cf,sprintf($mrtg_traffic_template."\n", $rn, $trap, $dev[2], $rn, $dev[2], $dev[1], $rn, $rn, $wn, $dev[1], $rn, $wn, $dev[1], $dev[1], $wn) ); } // foreach interface } fclose($hf); fclose($cf); $hlast= @fopen("/tmp/last_update.mrtg", "w+") or die('Error!'); fwrite($hlast,$last_now); fclose($hlast); $hlast= @fopen("/tmp/last_mrtg", "w+") or die('Error!'); fwrite($hlast,$now); fclose($hlast); ?>
este archivo es
<?php $rootZone = 52771; #3671; $minX = 999; $minY = 999; $maxX = -999; $maxY = -999; $members = array(); $hlastnow = @fopen("http://guifi.net/guifi/refresh/maps", "r") or die('Error reading changes\n'); $last_now = fgets($hlastnow); fclose($hlastnow); $hlast= @fopen("/tmp/last_update.cnml", "r"); if (($hlast) and ($last_now == fgets($hlast))) { fclose($hlast); echo "No changes.\n"; exit(); } echo "Getting CNML file\n"; $hcnml = @fopen("http://guifi.net/guifi/cnml/".$rootZone."/detail", "r"); $wcnml = @fopen("guifi.cnml", "w+"); while (!feof($hcnml)) { $buffer = fgets($hcnml, 4096); fwrite($wcnml,$buffer); } fclose($hcnml); fclose($wcnml); $hlast= @fopen("/tmp/last_update.cnml", "w+") or die('Error!'); fwrite($hlast,$last_now); fclose($hlast); ?>
PMF
- Regenerar los ficheros rrd
- tener en cuenta que al connectar un dispositivo por cable ponerlo en Lan o en la ubicacion que sea, sino puede que no grafique correctamente.