IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

https://roure.act.uji.es/wiki/public/guifinet/doc/recetas/guifinetservidorgraficas

IMPORTANT: Aquest article s'hauria d'anomenar Servidor de gràfiques Guifi.net o snpservices però és millor no canviar-li el nom per què hi ha un gran nombre d'enllaços interns que caldria canviar!. Consulteu l'article Servidor Linux amb Guifi.net per veure com muntar un servidor Linux per a Guifi.net

Servidor de gràfiques guifi.net. Introducció

Aquest article fa referència al que a Guifi.net s'anomena el Servidor de Gràfiques.

Recursos:

Requeriments

És necessita un servidor web que estigui connectat tant a la xarxa Guifi.net com a Internet. El paquet snpservices té les següents dependències:

$ apt-cache depends snpservices
snpservices
 |Depèn: debconf
  Depèn: <debconf-2.0>
   cdebconf
   debconf
 Depèn: <httpd>
   ...
 Depèn: apache2
   apache2-mpm-itk
   apache2-mpm-event
   apache2-mpm-prefork
   apache2-mpm-worker
 Depèn: php5
 Depèn: php5-cli
 Depèn: php5-gd
 Depèn: rrdtool
 Depèn: librrdp-perl
 Depèn: librrds-perl
 Depèn: mrtg
 Depèn: mrtg-rrd

Com podeu veure requereix de:

  • Debconf: Necessita Debconf per tal de poder fer les preguntes de configuració del servidor de gràfiques que es fant durant la instal·lació del servidor.
  • httpd o Apache2: Necessita una servidor web. Normalment Apache 2
  • PHP: És una aplicació bàsicament PHP. S'executa via web per a mostrar les gràfiques però també per línia de comandes (php5-cli per tal de gestionar la creació de gràfiques i tasques automatitzades amb cron). No es tracta d'un LAMP per que no utilitza bases de dades MySQL. Les bases de dades de l'aplicació són les bases de dades de les gràfiques (Vegeu RRDTOOL)
  • RRDTool: és l'eina Open Source més coneguda per a la generació de gràfiques i bases de dades Round Robin
  • MRTG: MRTG és una eina que permet monitoritzar dispositius de xarxa mitjançant SNMP i que facilita la creació de gràfiques web per mostrar el trànsit que circula per les targetes de xarxa d'un dispositiu.

Versions

IMPORTANT: Alguns repositoris que hi ha per Internet són obsolets i contenen versions de snpservices obsoletes! No utilitzeu per exemple:

Hi ha dues versions del paquet snpservices la versió 1 i la 2. Actualment (--acacha 16:37, 27 gen 2012 (UTC)) als repositoris només pots trobar la versió 2 però es manté l'opció de posar la versió 1 per a servidors antics.

La diferència a la web de triar versió 1 o 2, és que la versió 2 activa als nodes que estan marcats per a ser gestionats per un proxy v2, les aplicacions Liveping i LiveTraceroute entre d'altres. Aquestes aplicacions només estan disponibles en instal·lacions del paquet snpservices v2.

Repositoris Debian

Repositori obsolet

deb http://tramuntana.evt.cat/mirror/debian/ ./

IMPORTANT: No l'utilitzeu a no se que sapigueu el que esteu fent

Repositori actual

Afegiu al fitxer /etc/apt/sources.list

deb http://repo.vic.guifi.net/debian guifi/

El repositori està firmat cal executar:

sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 2E484DAB

I fer un update:

sudo apt-get update

--acacha 19:20, 29 gen 2012 (UTC)

Text extret de les llistes

Per altre banda, s'ha millorat el tema del repositori dels paquets, ara els paquets estan firmats per els desenvolupadors i el repositori també, així quan hi hagi actualitzacions no us sortira el missatge del que el paquet no es pot validar. Per fer-lo servir només heu de modificar si ja teníeu el repositori afegit o afegir aquesta línia al fitxer /etc/apt/sources.list

deb http://repo.vic.guifi.net/debian guifi/

com que el repositori esta firmat, s'ha d'introduïr la clau publica el primer cop que ho feu servir, per fer-ho heu d'executar aquesta comanda:

sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 2E484DAB

m'he adonat que alguns cops aquest "keyserver" no respon, per lo que si us dona algun error, proveu amb aquest altre:

sudo apt-key adv --keyserver pgp.rediris.es --recv-keys 2E484DAB

executar:

sudo apt-get update
i ja podreu instalar els paquets del nou repositori.

Hem creat una nova branca per els paquets en desenvolupament, com ara el paquet guifi-proxy3 (amb LDAP enlloc de fitxer passwd), per fer-la servir, cal posar aquesta línia:

deb http://repo.vic.guifi.net/debian  guifi-testing/

al fitxer /etc/apt/sources.list

Com funciona?

Per tal de crear un servidor de gràfiques cal tenir disponible un servidor amb connexió a Internet. A més el servidor ha de ser accessible amb una IP pública d'Internet o nom DNS per tal de poder veure les gràfiques a la web de guifi.net si us hi connecteu a la web utilitzant la xarxa Internet i no pas la de guifi.

Gràfica obtinguda a https://roure.act.uji.es/wiki/public/guifinet/doc/recetas/guifinetservidorgraficas

L'adreça IP millor si és estàtica però sinó es poden utilitzar serveis de DNS dinàmic.

IMPORTANT: El servidor de gràfiques ha de ser una màquina disponible des de internet (amb un IP pública) però també amb connexió a guifi, és a dir que ha de tenir una IP del tipus 10.x.x.x. Si la màquina no té IP de guifi, però es pot connectar a guifi, aleshores cal tenir en compte el NAT o les rutes de tornada de tots els dispositius que voleu monitoritzar (cal que el dispositiu pugui fer un ping a la IP del servidor de gràfiques)

En aquest servidor cal instal·lar el servei snpservices.

Anem a veureu una explicació detallada del que fa un servidor de gràfiques mitjançant un exemple real (servidor de gràfiques de Santa Barbarà a la comarca del Montsià). Les dades guifi són:

Un servidor de gràfiques té 4 tasques:

  • Obtenir les dades dels dispositius que ha de monitoritzar: El servidor de gràfiques és basa en les dades de la web guifi.net per tal d'obtenir les dades dels dispositius que ha de monitoritzar. Aquestes dades s'obtenen a través d'un servei web que proporciona un fitxer de text en format CSV
  • Monitoritzar: El servidor periòdicament s'ha de posar en contacte amb els dispositius utilitzant pings i SNMP per tal de respectivament comprovar la disponibilitat i obtenir les dades de les interfícies de xarxa.
  • Emmagatzemar les dades de monitorització: les dades obtingudes al monitoritzar es guarden en base de dades Round Robin utilitzant l'eina RRDTool. Consulteu: Bases de dades RRD
  • Mostrar gràfiques: Finalment s'utilitza MRTG per mostrar les dades a través d'Internet (en format pàgina web HTML). Consulteu gràfiques proveïdes per tal de veure el tipus de gràfiques que es mostren.

IMPORTANT: snpservices utilitza MRTG però no en el format original (utilitzava uns fitxers de log) sinó utilitzant RRD com a logformat. Això es pot veure al fitxer /var/lib/snpservices/data/mrtg.cfg on s'ha indicat la variable: LogFormat: rrdtool. Vegeu també MRTG i RRDTool

Com sap la web de guifi.net quin són el conjunt de dispositius dels quals ha de fer gràfiques un servidor de gràfiques? Doncs per què cada vegada que és crear un node a la web de guifi, el node pertany a una zona i es pot assignar un servidor de gràfiques per defecte a una zona.

NOTA: Els usuaris a permisos d'administrador de nodes poden canviar el servidor de gràfiques per defecte d'un node

Cal tenir en compte que no es monitoritzen els nodes sinó els trastos que hi ha als nodes (i només si estan operatius)

El següent esquema mostra com s'obtenen les dades de la web de guifi.net per tal de complir amb la primera tasca:

Servidor de gràfiques <--- Connexió a través d'Internet <-- Servei web: Fitxer CSV <--- Web de guifi.net

La web de guifi.net proporciona la següent URL

http://guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=NUMERO_ID_DEL_SERVEI. 

Que s'encarregà de proporcionar el fitxer CSV amb la llista de dispositius a monitoritzar. Per exemple al servidor de Santa Barbara

IMPORTANT: Cal posar el ID del servei i no pas el del servidor

Per exemple en el nostre exemple el ID és 32729

http://guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=32729 

Aquesta URL retornarà quelcom similar a:

25020,#AlfredCidRd1,10.139.29.167,wifi0;SBrblfrdCdRd1CPE0,Working
25470,#DIFERRd1,10.139.29.138,wifi0;SBrbDFRRd1CPE0,Working
25370,#DPerezRd1,10.139.29.170,wifi0;SBrbDPrzRd1CPE0,Working
25275,#elsForneRd1,10.139.29.168,wifi0;SBrblsFrnRd1CPE0,Working
25438,#GemmaRd1,10.139.29.137,wifi0;SBrbGmmRd1CPE0,Working
28211,#Gnrltt4BRd1,10.139.29.107,wifi0;SBrbGnrltt4BRd1CPE0,Working
25203,#InfoPlanaRd1,10.139.29.135,wifi0;SBrbnfPlnRd1CPE0,Working
26662,#mestre017Rd1,10.139.29.103,wifi0;SBrbmstr017Rd1CPE0,Working
25962,#mestre17Rd1,10.139.29.140,wifi0;SBrbmstr17Rd1CPE0,Working
25212,#OHMITERRARd1,10.139.29.136,wifi0;SBrbHMTRRRd1CPE0,Working
27648,#SBESRd1,10.139.29.106,eth0;SBrbSBSRd1CPE0,Working
26121,#SBFranjadePonentRd1,10.139.29.99,wifi0;SBrbSBFrnjdPnntRd1CPE0,Working
26473,#SBFranjadePonentRd2,10.139.29.166,wifi0;SBrbSBFrnjdPnntRd2CPE0,Working
28762,#SBrbAjuntamentRd1,10.139.29.173,wifi0;SBrbSBrbjntmntRd1CPE0,Working
26332,#SBrbAmetller53Rd1,10.139.29.142,wifi0;SBrbSBrbmtllr53Rd1CPE0,Working
27046,#SBrbAngelGuimera22Rd1,10.139.29.105,wifi0;SBrbSBrbnglGmr22Rd1CPE0,Working

Ara el cas d'un supernode:

21282,#SBrbCampanarRd1,10.139.29.97,wlan1;SBrbCampanarRd1AP1|wlan2;SBrbCampanarRd1AP2|wlan3;SBrbCampanarRd1AP3|wlan4;SBrbCampanarAjuntament|wlan5;SBrbCampanarCentreCultural|wlan6;SBrbCampanarInsLesPlanes,Working

25313,#SBrbCastillejos3Rd1,10.139.29.169,wifi0;SBrbSBrbCstlljs3Rd1CPE0,Working
...

Un fitxer de text separat per comes amb les dades dels trastos que monitoritza el servidor de gràfiques. Els trastos poden ser de dos tipus:

  • Trastos simples/una sola radio/trastos client.
  • Trastos multiradio/supernodes: en aquest cas les diferents radios a monitoritzar estaran separades pel caràcter |.

Les columnes d'un node simple seran:

25020,#AlfredCidRd1,10.139.29.167,wifi0;SBrblfrdCdRd1CPE0,Working
  • Identificador del trasto: Es pot accedir al trasto amb la URL http://guifi.net/ca/guifi/device/TRASTO_ID. A l'exemple: http://guifi.net/ca/guifi/device/25020
  • Nom del trasto: Amb un caràcter # al davant (TODO: per què?)
  • Adreça Ip del trasto
  • Nom de la interfície: A l'exemple wifi0. El nom de la interfície depèn del tipus de trasto. Si s'utilitza unsolclic no és una qüestió important per què un solclic ja mirarà de posar el nom que pertoqui. En el cas que no s'utilitzi cal tenir en compte els noms per defecte que utilitzen els trastos dels dispositius. Sovint a la web de guifi no és pot canviar el nom de la interfície de xarxa i per aquesta raó s'acaba canviant el nom de la interfície de xarxa al dispositiu (per exemple al utilitzar nodes híbrids). Alguns valors útils:
  • Dispositius Ubiquiti: la interfície sol ser la wlan0
  • Dispositius Mikrotik: les interfícies solen ser la wlan1, wlan2, wlan3, etc...
  • Nom de la ràdio
  • Estat del dispositiu: Sempre posa working
21282,#SBrbCampanarRd1,10.139.29.97,wlan1;SBrbCampanarRd1AP1|wlan2;SBrbCampanarRd1AP2|wlan3;SBrbCampanarRd1AP3|wlan4;SBrbCampanarAjuntament|wlan5;SBrbCampanarCentreCultural|wlan6;SBrbCampanarInsLesPlanes,Working

És el mateix només canvia el camp Nom de la interfície que ara conté la llista de interfícies i el nom del SSID del AP que hi ha en aquella interfície.

El servidor de gràfiques consulta periòdicament aquest fitxer. Per defecte és cada 30 minuts tal i com es pot veure a l'apartat Cron. Consulteu /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php per a més detalls.

Ara ja sabem com s'obtenen les dades. Ara anem a veure com es configura la web. La zona de Santa Barbarà està definida a:

http://guifi.net/santabarbara

Si observeu les molletes de pa de la part superior de la pàgina veureu la jerarquia de zones:

Inici › Menú principal › guifi.net World › Europe › Iberian Peninsula › Catalunya › Terres de l'Ebre › Montsià ›  Santa Bàrbara

Veureu que hi ha un apartat que diu:

Servidor de gràfiques per defecte	32729-Santa Bàrbara, GrafSbrbCCultural

NOTA: Només el creador de la zona o un admin pot modificar les dades del servidor de gràfiques per defecte. Si no s'indica cap servidor s'hereta dels pares, és a dir, s'agafa com a servidor de gràfiques el per defecte de la zona superior i si la zona superior no té node el de la superior a la superior i així successivament.

Això ens indica quin és el servidor de gràfiques de la zona. El podeu trobar a la URL:

http://guifi.net/ca/node/32729

NOTA: Per assignar un servidor de gràfiques a una zona primer cal crear un node, dins del node crear un dispositiu de tipus servidor i al node assignar-li el servei de proxy. S'ha d'assignar una adreça IP al servidor per tal de poder realitzar aquesta operació. Tingueu en compte que per donar una adreça a un servidor cal enllaçar-lo per cable amb algun dispositiu de xarxa (consulteu Enllaçant el servidor a un trasto)

Les dades importants són:

Com podeu veure el servidor de gràfiques ha de tenir una IP pública estàtica (o sinó utilitzar algun sistema de Dinàmic DNS) per tal de que les gràfiques puguin ser consultables per Internet. A l'exemple la web és:

http://80.32.55.197/snpservices/graphs/graphs.php

NOTA: Algun cop us pot passar que les pàgines de guifi tardin en contestar però que no sigui culpa del servidor de guifi. Com acabem de veure les gràfiques no són ofertes pel servidor web principal de guifi sinó que hi ha un sistema distribuït on diversos servidors de gràfiques es reparteixen la feina de proporcionar gràfiques a les diferents xones de guifi.net

Instal·lació a Ubuntu Server

Amb paquets Debian

Cal donar d'alta un servidor de gràfiques (SNP Graph Server) a http://guifi.net/ca/node/add/guifi-service.

Afegir al fitxer /etc/apt/sources.list:

deb http://tramuntana.evt.cat/mirror/debian/ ./

IMPORTANT: Oco! Aquest repositori (Vegeu Servidor_Guifi.net#Repositoris_Debian ) és obsolet utilitzeu ha un altre repositori i crec que té versions més actualitzades:

deb http://repo.vic.guifi.net/debian guifi/

També hi ha un mirror a:

http://serveis.guifi.net/repo/debian/

El repositori està firmat cal executar:

 $ sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 2E484DAB

I fer un update:

$ sudo aptitude update

NOTA: També podeu utilitzar apt-get: sudo apt-get update

I:

$ sudo apt-get install snpservices

Us apareixerà el configurador (debconf). Primer segurament el de MRTG (si no el teniu instal·lat) i després el de snpservices. Us preguntarà per l'ID del servidor de gràfiques, per defecte us proporciona el del servidor bandoler de guifi. Heu de canviar aquest número per ID del servidor de gràfiques que esteu creant. El ID el podeu trobar a la web de guifi un cop hagiu crear el servidor. Per exemple a la zona de Tortosa (http://guifi.net/tortosa):

Veure un apartat que posa:

servidor de gràfiques per defecte	27276-Tortosa, SNP_INS_Ebre

La URL és:

http://guifi.net/node/27276

I per tant el ID és 27276. A la web del servidor posa que la URL accessible des de Internet és:

http://www.iesebre.com/snpservices/graphs/graphs.php

NOTA: Al instal·lar per a la versió 2 de CNML cal posar només la URL: http://www.iesebre.com/snpservices/

A Santa Barbara en canvi:

http://guifi.net/santabarbara

El servidor és:

servidor de gràfiques per defecte	32729-Santa Bàrbara, GrafSbrbCCultural

La URL:

http://guifi.net/node/32729

és a dir el ID és 32729

La URL des de Internet:

http://80.32.55.197/snpservices/graphs/graphs.php

Us heu d'assegurar que funciona el servidor de gràfiques a aquesta URL.

Podeu canviar la configuració amb:

$ sudo dpkg-reconfigure snpservices

Oco però que us farà més preguntes. En principi totes les opcions per defecte són les correctes.

També he instal·lat els paquets (cal?):

$ sudo apt-get install rrdtool librrdp-perl librrds-perl mrtg mrtg-rrd subversion php5-cli

IMPORTANT: A Ubuntu, ens indica que es desinstal·laran un munt de paquets! Provat el --acacha 19:24, 26 març 2011 (UTC) i ja no passa

Creeu i editeu el fitxer /etc/apache2/conf.d/servidorgrafiquesGuifiNet:

$ sudo joe /etc/apache2/conf.d/servidorgrafiquesGuifiNet

I afegiu la línia:

Alias /snpservices /var/www/snpservices/graphs
Alias /snpservices /usr/share/snpservices

Apliqueu els canvis a Apache

$ sudo /etc/init.d/apache2 restart

Fixeu-vos que el cron ja s'haurà configurat:

$ dpkg -L snpservices 
/.
/etc
/etc/cron.d
/etc/cron.d/snpservices
/etc/logrotate.d
/etc/logrotate.d/snpservices
/etc/snpservices
/etc/snpservices/config.php.template
/usr
/usr/share
/usr/share/doc
/usr/share/doc/snpservices
/usr/share/doc/snpservices/README.Debian
/usr/share/doc/snpservices/copyright
/usr/share/doc/snpservices/README
/usr/share/doc/snpservices/changelog.Debian.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/snpservices.1.gz
/usr/share/snpservices
/usr/share/snpservices/common
/usr/share/snpservices/common/qnodes.php
/usr/share/snpservices/common/refresh.sh
/usr/share/snpservices/common/refresh_cnml.php
/usr/share/snpservices/common/mrtg.sh
/usr/share/snpservices/common/cnml2ov2.php
/usr/share/snpservices/common/ping.sh
/usr/share/snpservices/common/refresh_mrtg.php
/usr/share/snpservices/common/misc.php
/usr/share/snpservices/misc
/usr/share/snpservices/misc/xml2ov2.php
/usr/share/snpservices/graphs
/usr/share/snpservices/graphs/LICENSE.txt
/usr/share/snpservices/graphs/graphs.php
/usr/share/snpservices/graphs/refresh.php
/usr/share/snpservices/graphs/config.php
/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php
/usr/share/snpservices/graphs/cnml2mrtgcsv.php
/var
/var/log
/var/log/snpservices
/var/www
/var/lib
/var/lib/snpservices
/var/lib/snpservices/tmp
/var/lib/snpservices/data
/var/lib/snpservices/rrimg
/var/lib/snpservices/rrdb
/var/www/snpservices

Recursos:

Sense paquet Debian

El primer que cal fer és crear el servei a la web de guifi.net. Aneu a:

http://guifi.net/ca/node/add/guifi-service

I afegiu un servei SNP Graph Server. Un cop creat el servei fixeu-vos en la URL. Per exemple:

http://guifi.net/node/22758

El número final és l'identificador del servidor de gràfiques. Apunteu-lo per què l'utilitzarem més endavant.

NOTA: Necessitareu un usuari de guifi.net per tal de poder crear un servei. Si encara no us heu fet un usuari creeu-lo aquí.

Cal instal·lar els següents paquets:

$ sudo apt-get install rrdtool librrdp-perl librrds-perl mrtg mrtg-rrd subversion php5-cli

Es dona per suposat que disposeu d'un servidor web amb Apache. Consulteu l'article Apache si voleu obtenir més informació sobre aquest servidor.

Al subversion de guifi.net (allotjat a la web de projectes de la farga) tenim el codi necessari per al servidor de gràfiques.

Aneu a la carpeta /var/www:

$ cd /var/www 

I obtingueu el codi amb:

$ sudo svn checkout http://anonymous@svn.projectes.lafarga.cat/svn/guifi/snpservices

L'usuari d'accés és anonymous amb qualsevol paraula de pas.

Això genera una carpeta anomenada snpservices. Ara cal publicar aquesta pàgina al servidor web Apache.

Creeu i editeu el fitxer /etc/apache2/conf.d/servidorgrafiquesGuigiNet:

$ sudo joe /etc/apache2/conf.d/servidorgrafiquesGuigiNet

I afegiu la línia:

Alias /guifigraphs /var/www/snpservices/graphs

També cal modificar els permisos dels fitxers:

$ sudo chmod a+rw /var/www/snpservices/tmp

I crear un parell de carpetes:

$ sudo mkdir /var/www/snpservices/rrdb
$ sudo mkdir /var/www/snpservices/rrimg

Ara procedim a configurar el servidor de gràfiques. Obtenim una còpia des de la plantilla del fitxer de configuració:

$ sudo cp /var/www/snpservices/common/config.php.template /var/www/snpservices/common/config.php

Cal ajustar els següents paràmetres al que correspongui per al vostre servidor. Cal modificar el ID del vostre servidor de gràfiques:

$snp_path='/var/www/snpservices';
$SNPGraphServerId = 22758; //Poseu aquí el valor que us correspongui
$MRTGConfigSource='http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=9039';
$CNMLSource='http://www.guifi.net/snpservices/common/qnodes.php?nodes=%s';
$rrddb_path='/var/www/snpservices/rrdb/';
$rrdimg_path='/var/www/snpservices/rrimg/';

Finalment cal configurar cron per automatitzar les tasques del servidor:

*/30 * * * * cd /var/www/snpservices/graphs; php mrtgcsv2mrtgcfg.php
*/5 * * * * env LANG=c /usr/bin/mrtg /var/www/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l

Per no haver d'esperar esperar, forceu la primera descàrrega dels trastos a fer gràfiques des de guifi.net executant:

$ cd /var/www/snpservices/graphs
$ php mrtgcsv2mrtgcfg.php

Ara cal editar el node:

http://guifi.net/node/22758/edit

I determinar la URL.

IMPORTANT:

També cal modificar el fitxer:

/var/www/snpservices/graphs$ cat config.php
<?php
$rrdtool_path='/usr/bin/rrdtool';
$rrddb_path='/var/www/snpservices/rrdb/';
// -------- XML file Load ---------------
$xml = simplexml_load_file('guifi.xml');
?>

Concretament fixeu-vos en la variable $rrddb_path.

Fitxers instal·lats

$ dpkg -L snpservices 
/.
/etc
/etc/cron.d
/etc/cron.d/snpservices
/etc/logrotate.d
/etc/logrotate.d/snpservices
/etc/snpservices
/etc/snpservices/config.php.template
/usr
/usr/share
/usr/share/doc
/usr/share/doc/snpservices
/usr/share/doc/snpservices/README.Debian
/usr/share/doc/snpservices/copyright
/usr/share/doc/snpservices/README
/usr/share/doc/snpservices/changelog.Debian.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/snpservices.1.gz
/usr/share/snpservices
/usr/share/snpservices/common
/usr/share/snpservices/common/qnodes.php
/usr/share/snpservices/common/refresh.sh
/usr/share/snpservices/common/refresh_cnml.php
/usr/share/snpservices/common/mrtg.sh
/usr/share/snpservices/common/cnml2ov2.php
/usr/share/snpservices/common/ping.sh
/usr/share/snpservices/common/refresh_mrtg.php
/usr/share/snpservices/common/misc.php
/usr/share/snpservices/misc
/usr/share/snpservices/misc/xml2ov2.php
/usr/share/snpservices/graphs
/usr/share/snpservices/graphs/LICENSE.txt
/usr/share/snpservices/graphs/graphs.php
/usr/share/snpservices/graphs/refresh.php
/usr/share/snpservices/graphs/config.php
/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php
/usr/share/snpservices/graphs/cnml2mrtgcsv.php
/var
/var/log
/var/log/snpservices
/var/www
/var/lib
/var/lib/snpservices
/var/lib/snpservices/tmp
/var/lib/snpservices/data
/var/lib/snpservices/rrimg
/var/lib/snpservices/rrdb
/var/www/snpservices

El fitxer de configuració principal /etc/snpservices/config.php no apareix a la llista per què es crea dinàmicament durant la instal·lació del paquet.

Configuració

Configuració de la web guifi.net

Creació del servidor a la web de guifi.net

Consulteu Creació d'un servidor a la web de guifi.net.

Creació del servei de gràfiques

TODO

Consulteu: https://roure.act.uji.es/wiki/public/guifinet/doc/recetas/guifinetservidorgraficas#dar_de_alta_el_servicio_en_guifinet

Configuració del servidor de gràfiques. /etc/snpservices

La carpeta principal de configuració és (seguint l'estàndard FHS):

/etc/snpservices

Aquí i trobareu dos fitxers:

$ ls /etc/snpservices
config.php  config.php.template

El fitxer principal de configuració és /etc/snpservices/config.php. L'altre és una plantilla d'exemple.

El contingut típic del fitxer és:

$ cat /etc/snpservices/config.php
<?php
 // SNPGraphServerID: Default Graph Server ID
 $SNPGraphServerId = 27276;
 
 // rootZone: which is the ROOT zone
 $rootZone = 3671;
 
 // SNPDataServer_url: without ending backslash, the url where the data is
 $SNPDataServer_url = 'http://guifi.net';
 
 // MRTGConfigSource: mrtg csv data
 // As a input, could be either a local (to be created from
 // cached CNML file, or remote
 // $MRTGConfigSource='http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php';
 $MRTGConfigSource='http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server='.$SNPGraphServerId;
 
 // CNMLSource: url for CNML node query, use sprintf syntax
 // MySQL-drupal source
 // $CNMLSource='http://proves.elserrat.guifi.net/guifi/cnml/%s/node';
 // Cached CNML source (prefered)
 $CNMLSource='http://www.guifi.net/snpservices/common/qnodes.php?nodes=%s';   
 
 $CNMLData='/var/lib/snpservices/data/guifi.cnml';
 
 // rrdtool parameters
 $rrdtool_path='/usr/bin/rrdtool';
 $rrddb_path='/var/lib/snpservices/rrdb/';
 $rrdimg_path='/var/lib/snpservices/rrimg/';
 
 // mrtg local header
 $rrdtool_header='# 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: %s
 ImageDir: %s 
 LogDir: %s
 LogFormat: rrdtool
 ThreshDir: %s
 Forks: 12
 ';
 
 // mrtg ping template
 $mrtg_ping_template ='Title[%s_ping]: Temps del ping de %s 
 PageTop[%s_ping]: <H1>Latència %s</H1>
      <TABLE
      <TR><TD>System:</TD>     <TD>%s</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>ping</TD></TR>
      <TR><TD>IP:</TD>         <TD>%s</TD></TR>
      </TABLE>
 Target[%s_ping]: `/usr/share/snpservices/common/ping.sh %s`
 MaxBytes[%s_ping]: 2000
 Options[%s_ping]: growright,unknaszero,nopercent,gauge
 LegendI[%s_ping]: Perduts %
 LegendO[%s_ping]: Temps mig
 Legend1[%s_ping]: Temps max. en ms
 Legend2[%s_ping]: Temps min. en ms
 YLegend[%s_ping]: RTT (ms)
 ';
  
 $mrtg_traffic_template='Target[%s_traf]: %s:public@%s:
 SetEnv[%s_traf]: MRTG_INT_IP="%s" MRTG_INT_DESCR="%s"
 MaxBytes[%s_traf]: 3000000
 Title[%s_traf]: Trafic a %s de %s
 PageTop[%s_traf]: <H1>Tràfic a %s de %s</H1>
      <TABLE>
      <TR><TD>System:</TD>     <TD>%s</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>%s</TD></TR>
      <TR><TD>Max Speed:</TD>  <TD>30.0 Mbits/s</TD></TR>
      </TABLE>
 ';  
 
 ?>

Es tracta d'un fragment d'un fitxer PHP que configura el servidor de gràfiques.

Les variables més importants són:

  • $SNPGraphServerId: és l'identificador del servidor de gràfiques a la web de guifi.net. Per exemple el id 27276 correspon al servidor:
http://guifi.net/ca/node/27276
  • $rootZone: el seu valor sol ser 3671 i no es canvia ja que correspon a la zona arrel de guifi.net:
http://guifi.net/ca/node/3671

La resta de variables són variables de configuració de l'eina MRTG o de les fonts de dades per a crear les gràfiques:


http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server='.$SNPGraphServerId;

és a dir que executa un PHP de la web de guifi per tal d'obtenir les dades d'un servidor de gràfiques. Per exemple la URL:

http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=27276

Obté un fitxer CSV amb la llista de nodes gestionats pel servidor de gràfiques:

30946,#Av.stadi5cRd1,10.36.253.201,wifi0;Tortosavstd5cRd1CPE0,Working
29200,#avjesusRd1,10.36.253.199,wifi0;TortosavjssRd1CPE0,Planned
27385,#avremolinsRd1,10.36.253.42,wifi0;TortosavrmlnsRd1CPE0,Working
28902,#camiManxa10Rd1,10.36.253.196,wifi0;TortosacmMnx10Rd1CPE0,Working
35998,#CanaletPauRd1,10.139.221.198,ath0;TortosaCnltPRd1CPE0,Testing
34484,#carreterasimpaticaRd2,10.139.221.164,ath0;TortosacrrtrsmptcRd2CPE0,Working
28294,#CodulsNodeRd1,10.139.220.161,eth0;TortosaCdlsNdRd1AP0,Planned
30298,#IesEbre_ProvesRB435G1,10.36.253.129,wlan1;TortosaProvesRB435AP1,Working
30358,#IesEbre_ProvesRB435G,10.139.221.1,wlan1;TortosasbrPrvsRB435GAP0,Working
27420,#JardiBesuldoTerol16Rd1,10.36.253.13,wifi0;TortosaJrdBsldTrl16Rd1CPE0,Working
24545,#raul1935Rd1,10.36.253.36,wifi0;Tortosarl1935Rd1CPE0,Planned
34414,#ReguersDGMRd1,10.140.94.36,ath0;TortosaRgrsDGMRd1CPE0,Working
36022,#RqtsOscarRd1,10.139.221.136,ath0;TortosaRqtsscrRd1CPE0,Planned
35249,#TortosavanesaRd1,10.36.253.2,wifi0;TortosaTrtsvnsRd1CPE0,Working
19637,#TortosaAlcanyiz26Rd1,10.36.253.99,wifi0;TortosaTrtslcnyz26Rd1CPE0,Working
25865,#TortosaAlcanyiz26_T1,10.36.253.169,Working
...

Les següents variables configuren el CNML:

I les següents configuren primer RRDTool i després MRTG

Finalment els templates de MRTG:

Es pot reconfigurar el paquet en qualsevol moment amb:

$ sudo dpkg-reconfigure snpservices

Configuració del servidor web. Aplicació web snpservices

L'aplicació és accessible per la URL:

http://nomdelservidor/snpservices

Si intenteu entrar un donarà un error Forbidden. Aquesta aplicació no està pensada per a ser accedida de forma interactiva sinó que és accessible des la web de guifi.net.

L'aplicació utilitza Apache

Fitxers de configuració

/var/lib/snpservices/data/mrtg.cfg

Configuració de MRTG. Aquest fitxer és creat dinàmicament per l'script PHP /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php

Consulteu per a més detalls:

/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php

NOTA: Tots dos fitxers són el mateix! un és un link de l'altre

Extracte d'exemple:

# 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[25020_ping]: Temps del ping de #AlfredCidRd1 
 PageTop[25020_ping]: <H1>Latència #AlfredCidRd1</H1>
      <TABLE
      <TR><TD>System:</TD>     <TD>#AlfredCidRd1</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>ping</TD></TR>
      <TR><TD>IP:</TD>         <TD>10.139.29.167</TD></TR>
      </TABLE>
 Target[25020_ping]: `/usr/share/snpservices/common/ping.sh 10.139.29.167`
 MaxBytes[25020_ping]: 2000
 Options[25020_ping]: growright,unknaszero,nopercent,gauge
 LegendI[25020_ping]: Perduts LegendO[25020_ping]: Temps mig
 Legend1[25020_ping]: Temps max. en ms
 Legend2[25020_ping]: Temps min. en ms
 YLegend[25020_ping]: RTT (ms)
 Target[25020-0_traf]: \wifi0:public@10.139.29.167:
 SetEnv[25020-0_traf]: MRTG_INT_IP="10.139.29.167" MRTG_INT_DESCR="#AlfredCidRd1"
 MaxBytes[25020-0_traf]: 3000000
 Title[25020-0_traf]: Trafic a SBrblfrdCdRd1CPE0 de #AlfredCidRd1
 PageTop[25020-0_traf]: <H1>Tràfic a SBrblfrdCdRd1CPE0 de #AlfredCidRd1</H1>
      <TABLE>
      <TR><TD>System:</TD>     <TD>#AlfredCidRd1</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>SBrblfrdCdRd1CPE0</TD></TR>
      <TR><TD>Max Speed:</TD>  <TD>30.0 Mbits/s</TD></TR>
      </TABLE>  
 Title[25470_ping]: Temps del ping de #DIFERRd1 
 PageTop[25470_ping]: <H1>Latència #DIFERRd1</H1>
       <TABLE
      <TR><TD>System:</TD>     <TD>#DIFERRd1</TD></TR>
     <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
     <TR><TD>Description:</TD><TD>ping</TD></TR>
 ...

cron

El servidor de gràfiques és una aplicació que bàsicament funciona executant de forma periòdica un script PHP i MRTG:

$ cat /etc/cron.d/snpservices
#
# Regular cron jobs for the snpservices package
#

*/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

Com podeu veure es llegeix un punt de les gràfiques cada 5 minuts i cada mitjà hora es comprova la disponibilitat. Més concretament:

  • /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php cada 30 minuts: s'executa aquest script PHP cada mitja hora. Cal tenir en compte però que l'script té un control per evitar que tothom executi l'actualització exactament en el mateix moment (hi ha un rang entre 60 i 90 minuts aleatori). Per tant, un cop poseu un trasto nou, podeu tenir que arribar a esperar fins a 90 minuts per tal que apareguin les seves gràfiques de disponibilitat (ping)
  • /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg cada 5 minuts: si la configuració s'actualitza cada 30 minuts (o com hem dit millor pot tardar fins a 90 minuts), amb l'última configuració cada 5 minuts s'executa mrtg. El resultat de l'execució la trobareu al fitxer de log /var/log/snpservices/mrtg.log

IMPORTANT: Observeu que els fitxers /var/lib/snpservices/data/mrtg.cfg i /usr/share/snpservices/graphs/data/mrtg.cfg són el mateix, un és un soft link de l'altre!

Vegeu també cron

Documentació

Gràfiques proveïdes

Els servidor proveïxen de les següents gràfiques:

Exemple Exemple de URL Paràmetres Descripció
GraficDisponibilitatGuifi.png
http://www.iesebre.com/snpservices/graphs/graphs.php?device=29363&format=short&type=availability
  • Type=availability
  • device=guifi_device_ID
  • format=short
Gràfica de disponibilitat en format curt. Les opcions possibles són Up (verd) o Down (vermell). Es mostren a la llista de trastos de un supernode i permet fer-se una idea de les disponibilitats dels trastos de un supernode.
GraficDisponibilitatGuifiLong.png
http://www.iesebre.com/snpservices/graphs/graphs.php?device=29363&format=long&type=availability
  • Type=availability
  • device=guifi_device_ID
  • format=long
Gràfica de disponibilitat en format llarg. Igual que l'anterior però a més mostra l'últim moment (hora) en que s'ha consultat l'estat. Els temps entre consultes de disponibilitats venen determinats per la configuració del cron. Normalment es pot observar a llocs com per exemple les pàgines de disponibilitat de una zona. Per exemple la zona de Tortosa: http://guifi.net/ca/node/17893/view/availability
GraficaGuifiSupernode.png
http://www.iesebre.com/snpservices/graphs/graphs.php?type=supernode&node=26725&direction=in
  • Type=supernode
  • node=guifi_device_ID
  • direction=in|out
Mostra els transits de dades dels APs d'un supernode ja siguin AP/client o WDS .Hi ha dos subtipus depenent si mostren el transit Wlan d'entrada (in) o de sortida (out). Es mostren a la pàgina principal dels supernodes. Per exemple http://guifi.net/ca/InstitutEbre
GraficaGuifiClients.png
http://www.iesebre.com/snpservices/graphs/graphs.php?type=clients&node=26725&radio=29363&direction=in
  • Type=clients
  • node=guifi_supernode_ID
  • radio=guifi_device_ID
  • direction=in|out
Es mostra als trastos que fan de Ap i tenen diversos clients.
GraficaGuifiDisponibilitat.png
http://guifi.net/guifi/graph_detail?type=pings&node=26725&device=29363
  • Type=pings
  • node=guifi_supernode_ID
  • device=guifi_device_ID
Aquestes gràfiques es mostren o als clients o als detalls de cada trasto de un supernode. Exemples:

Consulteu el fitxer /usr/share/snpservices/graphs/data/mrtg.cfg

Les gràfiques es generen amb RRDTool (excepte les de tipus availability que es generen amb la llibreria GD de php). ES pot consultar la comanda que s'utilitza activant el mode degub. Per exemple:

http://www.iesebre.com/snpservices/graphs/graphs.php?type=supernode&node=26725&direction=in&debug

L'ordre és:

/usr/bin/rrdtool graph - --font DEFAULT:7 --title="Supernode: TortosaINSEbre - wLANs in" --imgformat=PNG --width=600 --height=120 --vertical-label="Bytes/s" \ 
--start=-86400 --end=-300 --base=1000 -E DEF:val7="/var/lib/snpservices/rrdb/19633-4_traf.rrd":ds0:AVERAGE CDEF:val7a=val7,1,* LINE1:val7a#0000FF:" TortosaINSEbreSeminari in" \ 
GPRINT:val7a:LAST:"Ara\:%8.2lf %s" GPRINT:val7a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val7a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 1.12 GB\n" DEF:val6="/var/lib/snpservices \
/rrdb/19633-3_traf.rrd":ds0:AVERAGE CDEF:val6a=val6,1,* LINE1:val6a#FF0000:" TortosaINSEbreRd1Roser in" GPRINT:val6a:LAST:"Ara\:%8.2lf %s" GPRINT:val6a:AVERAGE:"Mig\:%8.2lf %s" \ 
GPRINT:val6a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 1.08 GB\n" DEF:val0="/var/lib/snpservices/rrdb/29363-0_traf.rrd":ds0:AVERAGE CDEF:val0a=val0,1,* LINE1:val0a#FFCC00:" \  
TortosaINSEbreWDSAlcanyiz26 in" GPRINT:val0a:LAST:"Ara\:%8.2lf %s" GPRINT:val0a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val0a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 811.87 MB\n" \
DEF:val4="/var/lib/snpservices/rrdb/19633-1_traf.rrd":ds0:AVERAGE CDEF:val4a=val4,1,* LINE1:val4a#66CCFF:" TortosaINSEbreRd1AP2 in" GPRINT:val4a:LAST:"Ara\:%8.2lf %s" \ 
GPRINT:val4a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val4a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 421.03 MB\n" DEF:val10="/var/lib/snpservices/rrdb/29442-0_traf.rrd":ds0:AVERAGE \ 
CDEF:val10a=val10,1,* LINE1:val10a#000000:" TortosaInsEbreFabreguesMotors in" GPRINT:val10a:LAST:"Ara\:%8.2lf %s" GPRINT:val10a:AVERAGE:"Mig\:%8.2lf %s" \
GPRINT:val10a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 270.62 MB\n" DEF:val9="/var/lib/snpservices/rrdb/29440-0_traf.rrd":ds0:AVERAGE CDEF:val9a=val9,1,* LINE1:val9a#00CC00:" \
TortosaInsEbreFabreguesNens in" GPRINT:val9a:LAST:"Ara\:%8.2lf %s" GPRINT:val9a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val9a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 137.88 MB\n" \ 
DEF:val3="/var/lib/snpservices/rrdb/19633-0_traf.rrd":ds0:AVERAGE CDEF:val3a=val3,1,* LINE1:val3a#990000:" TortosaINSEbreRd1AP1 in" GPRINT:val3a:LAST:"Ara\:%8.2lf %s" \ 
GPRINT:val3a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val3a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 48.12 MB\n" DEF:val5="/var/lib/snpservices/rrdb/19633-2_traf.rrd":ds0:AVERAGE \ 
CDEF:val5a=val5,1,* LINE1:val5a#FFFF00:" TortosaINSEbreRd1AP3 in" GPRINT:val5a:LAST:"Ara\:%8.2lf %s" GPRINT:val5a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val5a:MAX:"Max\:%8.2lf %s" \ 
COMMENT:"Total\: 12.32 MB\n" DEF:val1="/var/lib/snpservices/rrdb/29363-1_traf.rrd":ds0:AVERAGE CDEF:val1a=val1,1,* LINE1:val1a#800000:" TortosaINSEbreAPNordEst in" \
GPRINT:val1a:LAST:"Ara\:%8.2lf %s" GPRINT:val1a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val1a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 8.46 MB\n" 
DEF:val2="/var/lib/snpservices\/rrdb/29363-2_traf.rrd":ds0:AVERAGE CDEF:val2a=val2,1,* LINE1:val2a#C0FFC0:" TortosaHospitalINSEbre in" GPRINT:val2a:LAST:"Ara\:%8.2lf %s" \  
GPRINT:val2a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val2a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 0 B\n" \
DEF:val8="/var/lib/snpservices/rrdb/19633-5_traf.rrd":ds0:AVERAGE CDEF:val8a=val8,1,* \ LINE1:val8a#FFDCA8:" TortosaOmniaClubTennis in" GPRINT:val8a:LAST:"Ara\:%8.2lf %s" \ 
GPRINT:val8a:AVERAGE:"Mig\:%8.2lf %s" GPRINT:val8a:MAX:"Max\:%8.2lf %s" COMMENT:"Total\: 0 B\n" 

Per provar la generació de la imatge es pot executar al mateix servidor de gràfiques

$ l'ordre anterior > imatge.png

Hi ha altres paràmetres de la URL per defecte que només es modifiquen quan es vol consultar el detall de les gràfiques:

  • start: quantitat en segons des de el moment actual que indica el inici de la gràfica. Valor per defecte: -86400 (mostrar les últimes 24 hores). Per tant les gràfiques per defecte mostren les últimes 24h
  • end: Igual que l'anterior però per indicar l'instant final de la gràfica. El valor per defecte és -300 (5 minuts)
  • width: Amplada de la gràfica. El valor per defecte és 600
  • height: Alçada de la gràfica. El valor per defecte és 120
  • thumb: Mostra només les línies de la gràfica sense res mes.

Fitxers RRD. Bases de dades Round Robin i gràfiques

Les bases de dades de l'aplicació snpservices tal i com marca l'estàndard FHS es guarden a la carpeta:

/var/lib/snpservices 

Trobareu les subcarpetes

$ ls /var/lib/snpservices
data  rrdb  rrimg  tmp

On:


Manual

Està pendent de fer:

$ man snpservices
SNPSERVICES(SECTION)                                                                                                                 SNPSERVICES(SECTION)

NAME
      snpservices - program to do something

SYNOPSIS
      snpservices [options] files...
      bar [options] files...

DESCRIPTION
      This manual page documents briefly the snpservices and bar commands.

      snpservices is a program that...

OPTIONS
      These  programs  follow  the  usual  GNU  command line syntax, with long options starting with two dashes (`-').  A summary of options is included
      below.  For a complete description, see the Info files.

      -h, --help
             Show summary of options.

      -v, --version
             Show version of program.

SEE ALSO
      bar(1), baz(1).
      The programs are documented fully by The Rise and Fall of a Fooish Bar, available via the Info system.

AUTHOR
      snpservices was written by <upstream author>.

      This manual page was written by Carles Guadall Blancafort <carles@viladelpingui.net>, for the Debian project (but may be used by others).

Fitxers PHP

/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php

Aquest script és executat per Cron cada mitja hora, vegeu el fitxer:

/etc/cron.d/snpservices

NOTA: Observeu que el fitxer de log corresponent al resultat de l'execució d'aquest script és /var/log/snpservices/mrtgccfg.log

L'objectiu d'aquest script és actualitzar el fitxer:

/usr/share/snpservices/graphs/data/mrtg.cfg

o el que és el mateix, el fitxer:

/var/lib/snpservices/data/mrtg.cfg

Ja que un és un soft link de l'altre:

# ls -la /usr/share/snpservices/graphs/data/mrtg.cfg
lrwxrwxrwx 1 root root 34 mai 11 23:54 ../data/mrtg.cfg -> /var/lib/snpservices/data/mrtg.cfg

A partir de les dades de la web de guifi.net. El fitxer mrtg.cfg conté les dades MRTG de tots els nodes que estan sota la monitorització del servidor de gràfiques.

Podeu mirar de forçar-ne l'execució:

$ sudo su
# cd /usr/share/snpservices/graphs/
# env LANG=C /usr/bin/php mrtgcsv2mrtgcfg.php
Last: 2012/05/31 17:00:01
Now: 2012/05/31 17:22:41
ServerId: 48448
Still fresh.

Us pot passar que no faci res i us doni el missatge:

Still fresh.

Llegint el codi sembla que han de passar entre 60 i 90 minuts entre peticions. El valor exacte entre 60 i 90 minuts depèn del número de servidor de gràfiques que ho demana (es fa una operació de mòdul amb aquest número).

Tot seguit podeu veure el codi de l'script (--acacha (discussió) 17:30, 31 maig 2012 (CEST)):

<?php

if (file_exists("/etc/snpservices/config.php")) {
   include_once("/etc/snpservices/config.php");
} else {
  include_once("/etc/snpservices/config.php.template");
}


$hlastnow = @fopen($SNPDataServer_url."/guifi/refresh/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";
  exit();
}
print $last_now;

$hf = @fopen($MRTGConfigSource,"r") or die('Error reading MRTG csv input\n"');
$cf = @fopen('/var/lib/snpservices/data/mrtg.cfg','w+');

fputs($cf,sprintf($rrdtool_header,$rrdimg_path,$rrdimg_path,$rrddb_path,$rrddb_path));

while ( $buffer = fgets($hf, 4096) ) {
//  $buffer = substr($buffer,0,-1);
  $buffer = str_replace("\n","",$buffer);
  $dev=explode(',',$buffer);

  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])
       );
  if (!isset($dev[3]) or empty($dev[3]))
    continue;
  $t = explode('|',$dev[3]); 
  //print_r($t);

  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);

?>

En resum el que es fa és:

/var/lib/snpservices/data/mrtg.cfg. Si no ha canviat no és fa res més

  • Obtenir el fitxer CSV amb les dades dels trastos a monitoritzar pel servidor de gràfiques
  • Generar la configuració de MRTG: /var/lib/snpservices/data/mrtg.cfg, és a dir generar les plantilles de les gràfiques.

/usr/share/snpservices/graphs/cnml2mrtgcsv.php

TODO. És l'script que proporciona el servei web.

Fitxers de dades

/usr/share/snpservices/graphs/data/mrtg.cfg

Aquest fitxer es generat i actualitzat periòdicament (tasca cron) per l'script:

/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php

Conté les gràfiques de disponibilitat (pings, consulteu Gràfiques proveïdes) que proveïxen els servidors de gràfiques de la web de guifi.net.

Un extracte d'exemple:

# 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: 25
 Title[41295_ping]: Temps del ping de #CanaletTerrerRoigDGMRd1
 PageTop[41295_ping]: <H1>Latència #CanaletTerrerRoigDGMRd1</H1>
     <TABLE
     <TR><TD>System:</TD>     <TD>#CanaletTerrerRoigDGMRd1</TD></TR>
     <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
     <TR><TD>Description:</TD><TD>ping</TD></TR>
     <TR><TD>IP:</TD>         <TD>10.139.221.211</TD></TR>
     </TABLE>
 Target[41295_ping]: `/usr/share/snpservices/common/ping.sh 10.139.221.211`
 MaxBytes[41295_ping]: 2000
 Options[41295_ping]: growright,unknaszero,nopercent,gauge
 LegendI[41295_ping]: Perduts LegendO[41295_ping]: Temps mig
 Legend1[41295_ping]: Temps max. en ms
 Legend2[41295_ping]: Temps min. en ms
 YLegend[41295_ping]: RTT (ms)
 Target[41295-0_traf]: \ath0:public@10.139.221.211:
 SetEnv[41295-0_traf]: MRTG_INT_IP="10.139.221.211" MRTG_INT_DESCR="#CanaletTerrerRoigDGMRd1"
 MaxBytes[41295-0_traf]: 104857600
 Title[41295-0_traf]: Trànsit a TortosaCnltTrrrRgDGMRd1CPE0 de #CanaletTerrerRoigDGMRd1
 PageTop[41295-0_traf]: <H1>Trànsit a TortosaCnltTrrrRgDGMRd1CPE0 de #CanaletTerrerRoigDGMRd1</H1>
      <TABLE>
      <TR><TD>System:</TD>     <TD>#CanaletTerrerRoigDGMRd1</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>TortosaCnltTrrrRgDGMRd1CPE0</TD></TR>
      <TR><TD>Max Speed:</TD>  <TD>100 Mbytes/s</TD></TR>
      </TABLE>  
 

IMPORTANT: Fixeu-vos que tot i ser mrtg s'utilitza rrdtool a través del paràmetre logformat!

A l'exemple es tracta d'una gràfica de pings (disponibilitat). Els pings es fan amb l'ordre:

/usr/share/snpservices/common/ping.sh 10.139.221.211

Fitxers de log

/var/log/snpservices/mrtgccfg.log

Aquest és el fitxer de log on es guarda el resultat d'executar l'script:

/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php

Aquest script és executat per Cron cada mitjà hora (fitxer /etc/cron.d/snpservices)

$  sudo tail -f --lines=500 /var/log/snpservices/mrtgccfg.log
...
Last: 2012/05/31 14:00:01
Now: 2012/05/31 14:30:01
ServerId: 48448
Sever CNML dated as: 2012/05/31 14:18:31
Waiting for  283.8 seconds
2012/05/31 14:34:47
Last: 2012/05/31 15:30:01
Now: 2012/05/31 15:00:02
ServerId: 48448
Still fresh.
Last: 2012/05/31 15:30:01
Now: 2012/05/31 15:30:01
ServerId: 48448
Still fresh.
Last: 2012/05/31 15:30:01
Now: 2012/05/31 16:00:01
ServerId: 48448
Sever CNML dated as: 2012/05/31 15:36:29
Waiting for  283.8 seconds
2012/05/31 16:04:50
Last: 2012/05/31 17:00:01
Now: 2012/05/31 16:30:01
ServerId: 48448
Still fresh.

Podeu observar els intervals de cada 30 minuts...

/var/log/snpservices/mrtg.log

Aquest fitxers es poden observar la majoria d'errors:

$ sudo tail -f --lines=500 /var/log/snpservices/mrtg.log

També podeu forcar una execució manual de mrtg executant:

$ sudo su
# env LANG=C /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l

Desenvolupament

Paquet Debian

L'aplicació ha estat creada principalment per Miquel Martos i a més es va empaquetar per a Debian amb el nom de paquet snpservices

Durant la instal·lació del paquet no només s'instal·len els fitxers sinó que a més es configura el servidor de gràfiques utilitzant Debconf. Aquesta configuració és interactiva amb l'usuari i es pot tornar a fer en qualsevol moment executant:

NOTA: Vegeu l'eina debconf-set-selections si esteu interessats en automatitzar/preseed l'instal·lació del paquet

Els fitxers que intervenen en la configuració del paquet els podeu trobar a l'interior del paquet o també a la carpeta /var/lib/dpkg/info

$ geany /var/lib/dpkg/info/snpservices.          <-- Tabuleu dos cops
snpservices.conffiles  snpservices.list       snpservices.postinst  snpservices.templates
snpservices.config     snpservices.md5sums    snpservices.postrm 

El fitxer /var/lib/dpkg/info/snpservices.templates conté les plantilles de les preguntes que fa debconf:

Template: snpservices/SNPGraphServerId
Type: string
Default: 6559
Description: SNP Graph Server Id. (Default: bandoler=6559)

Template: snpservices/rootZone
Type: string
Default: 3671
Description: rootZone: which is the ROOT zone. (Default: 3671)

Template: snpservices/SNPDataServerurl
Type: string
Default: http://guifi.net
Description: SNPDataServer_url: without ending backslash, the url where the data is. (Default: http://guifi.net)

Template: snpservices/MRTGConfigSource
Type: string
Default: http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=
Description: MRTGConfigSource: mrtg csv data. (Only URL, Graph Server Id will be concatenated)

Template: snpservices/CNMLSource
Type: string
Default: http://www.guifi.net/snpservices/common/qnodes.php?nodes=%s
Description: CNMLSource: url for CNML node query, use sprintf syntax.

Template: snpservices/rrddbpath
Type: string
Default: /var/lib/snpservices/rrdb/
Description: rrddb path.

Template: snpservices/rrdimgpath
Type: string
Default: /var/lib/snpservices/rrimg/
Description: rddimg path.

Template: snpservices/forcefetch
Type: boolean
Default: true
Description: Force to fetch mrtg.cfg now.

Com podeu veure hi ha força preguntes però totes no us las farà durant la instal·lació (ni tan soses durant la reconfiguració). Les preguntes es mostres segons la prioritat que se'ls hi doni al fitxer:

$ cat /var/lib/dpkg/info/snpservices.config
#!/bin/sh -e

. /usr/share/debconf/confmodule

MY_ARCH=`dpkg --print-architecture`

if [ "$1" = configure -o "$1" = reconfigure ] ; then

	db_input high snpservices/SNPGraphServerId || true
	db_input medium snpservices/rootZone || true
	db_input medium snpservices/SNPDataServerurl || true
	db_input medium snpservices/MRTGConfigSource || true
	db_input medium snpservices/CNMLSource || true
	db_input medium snpservices/rrddbpath || true
	db_input medium snpservices/rrdimgpath || true
	db_input high snpservices/forcefetch || true
	db_go
 
fi

exit 0

Com podeu veure les úniques preguntes que es fan durant la instal·lació (Debconf per defecte només mostra preguntes high o superior) són:

db_input high snpservices/SNPGraphServerId
db_input high snpservices/forcefetch

L'script que fa la feina durant la instal·lació del paquet és:

$ cat /var/lib/dpkg/info/snpservices.postinst
#! /bin/sh
 #
 # $Id$ 
 #
 
 set -e
 
 configfile='/etc/snpservices/config.php';
 tmpfile=`/bin/tempfile -m 644`;
 
 case $1 in
 	configure|reconfigure)
 
 	. /usr/share/debconf/confmodule
 	db_version 2.0 || [ $? -lt 30 ]
 
 		
 	db_get snpservices/SNPGraphServerId
 	SNPGraphServerId=$RET
 	db_get snpservices/rootZone
 	rootZone=$RET
 	db_get snpservices/SNPDataServerurl
 	SNPDataServerurl=$RET
 	db_get snpservices/MRTGConfigSource
 	MRTGConfigSource=$RET
 	db_get snpservices/CNMLSource
 	CNMLSource=$RET
 	db_get snpservices/rrddbpath
 	rrddbpath=$RET
 	db_get snpservices/rrdimgpath
 	rrdimgpath=$RET
 	db_get snpservices/forcefetch
 	forcefetch=$RET
 
 
 	/bin/cat << EOT > $tmpfile
 <?php
 // SNPGraphServerID: Default Graph Server ID
 \$SNPGraphServerId = $SNPGraphServerId; 

 // rootZone: which is the ROOT zone
 \$rootZone = $rootZone;
 
 // SNPDataServer_url: without ending backs lash, the url where the data is
 \$SNPDataServer_url = '$SNPDataServerurl'; 
 
 // MRTGConfigSource: mrtg csv data
 // As a input, could be either a local (to be created from
 // cached CNML file, or remote
 // \$MRTGConfigSource='http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php';
 \$MRTGConfigSource='$MRTGConfigSource'.\$SNPGraphServerId;
 // \$MRTGConfigSource='/var/lib/snpservices/data/guifi_mrtg.csv'; 
 
 // CNMLSource: url for CNML node query, use sprintf syntax
 // MySQL-drupal source
 // \$CNMLSource='http://proves.elserrat.guifi.net/guifi/cnml/%s/node';
 // Cached CNML source (prefered)
 \$CNMLSource='$CNMLSource'; 
 
 \$CNMLData='/var/lib/snpservices/data/guifi.cnml'; 
 
 // rrdtool parameters
 \$rrdtool_path='/usr/bin/rrdtool';
 \$rrddb_path='$rrddbpath';
 \$rrdimg_path='$rrdimgpath';
 
 // mrtg local header
 \$rrdtool_header='# 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: %s
 ImageDir: %s 
 LogDir: %s
 LogFormat: rrdtool
 ThreshDir: %s
 Forks: 12
 '; 
 
 // mrtg ping template
 \$mrtg_ping_template ='Title[%s_ping]: Temps del ping de %s 
 PageTop[%s_ping]: <H1>Latència %s</H1>
       <TABLE
      <TR><TD>System:</TD>     <TD>%s</TD></TR>
      <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
      <TR><TD>Description:</TD><TD>ping</TD></TR>
      <TR><TD>IP:</TD>         <TD>%s</TD></TR>
      </TABLE>
 Target[%s_ping]: \`/usr/share/snpservices/common/ping.sh %s\`
 MaxBytes[%s_ping]: 2000
 Options[%s_ping]: growright,unknaszero,nopercent,gauge
 LegendI[%s_ping]: Perduts %
 LegendO[%s_ping]: Temps mig
 Legend1[%s_ping]: Temps max. en ms
 Legend2[%s_ping]: Temps min. en ms
 YLegend[%s_ping]: RTT (ms)
 ';
 
 \$mrtg_traffic_template='Target[%s_traf]: %s:public@%s:
 SetEnv[%s_traf]: MRTG_INT_IP="%s" MRTG_INT_DESCR="%s"
 MaxBytes[%s_traf]: 3000000
 Title[%s_traf]: Trafic a %s de %s
 PageTop[%s_traf]: <H1>Tràfic a %s de %s</H1>
     <TABLE>
     <TR><TD>System:</TD>     <TD>%s</TD></TR>
     <TR><TD>Maintainer:</TD> <TD>guifi@guifi.net</TD></TR>
     <TR><TD>Description:</TD><TD>%s</TD></TR>
     <TR><TD>Max Speed:</TD>  <TD>30.0 Mbits/s</TD></TR>
      </TABLE>
 ';
 
 
 ?>
 EOT
 
 	/usr/bin/ucf --three-way --debconf-ok $tmpfile $configfile
 	/bin/rm $tmpfile
 
 	if [ $forcefetch ]
 	then
 		echo "Fetching mrtg.cfg";
 		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
 	fi
 	# Force logrotate
 	touch /var/log/snpservices/mrtg.log
 	touch /var/log/snpservices/mrtgccfg.log
 	/usr/sbin/logrotate -f /etc/logrotate.d/snpservices
 
  exit 0
 	;;
 
 	*)
 		echo "postinst called with unknown argument \`$1'" 1>&2
 		exit 1
 		;;
 esac
 
 
 exit 0

Bàsicament el que fa és:

  • Aconseguir la informació de la configuració amb Debconf (com per exemple el ID del servidor de gràfiques que és l'ID de l servidor a la web de guifi.net)
  • Crear el fitxer principal de configuració /etc/snpservices/config.php a partir de les dades de la configuració amb Debconf.
  • Forçar l'execució de logrotate.

Trucs

Millorar les gràfiques augmentant la versió de RRDTool

IMPORTANT: Aquest apartat s'ha deixat només com a referència. Realment canviar la variable no és un tema important i a més cal llegir el text del final sobre com cal aplicar uns canvis al codi per que tingui una petita rellevància en el tema de les fonts.

Si editeu el fitxer:

$ sudo joe /usr/share/snpservices/common/config.php

Busqueu:

// which version does have this server? 
// currently supported versions are:
// 1.2
// 1.3
$rrdtool_version = '1.3';

I canvieu per:

// which version does have this server? 
// currently supported versions are:
// 1.2
// 1.3
#$rrdtool_version = '1.3';
$rrdtool_version = '1.4';

Compte que només canvia una qüestió de fonts i no pas que passem a utilitzar una versió diferent de RRDTOOL (s'utilitza el que hi ha instal·lat).

Consulteu:

Hola Sergi.
No te va a funcionar solo con cambiar la variable a '1.4'. He hecho los
cambios necesarios para que funcione en mi repositorio:

https://gitorious.org/~pablog/guifi/pablogs-snpservices
 
https://gitorious.org/guifi/snpservices/merge_requests/1

Al parecer el cambio solo sirve para añadir el tipo de fuente del texto
de las gráficas.

FWIW... changelog de rrdtool:
http://oss.oetiker.ch/rrdtool/pub/CHANGES

Resol·lució de problemes. Troubleshooting

No funciona el liveping

Si utilitzeu CNML 2 mireu que la URL que heu definit al servidor de gràfiques no sigui:

http://www.iesebre.com/snpservices/graphs/graphs.php

Sinó:

http://www.iesebre.com/snpservices

Hi ha dispositius que no mostres gràfiques

Els dispositius han de tenir activat SNMP i posar la comunitat (community) a

public

També és important que el nom de la interfície de xarxa que volem monitoritzar tingui el mateix nom a la web de guifi.net (la podeu consultar al CNML o al fitxer CSV del servidor de gràfiques) que el que té en la realitat.

Les dues coses indicades anteriorment són d'especial importància sobretot si no s'utilitza unsolclic (per exemple en la configuració de nodes híbrids)

Migració d'un servidor

Aquestes són unes notes sobre el que s'ha tingut que tenir en compte a l'hora de migrar el servidor de gràfiques de un servidor a un altre servidor (la migració del servidor web de l'Institut de l'Ebre realitzada al desembre de 2011).

Inicialment el que vam fer va ser tornar a instal·lar i configurar des de zero un servidor snpservices al nou servidor. Això té un problema important:

IMPORTANT: Al migrar cal copiar les base de dades existents per tal de no perdre l'històric d'informació!

Per fer-ho cal migrar/copiar de la màquina antiga a la nova la carpeta:

/var/lib/snpservices/rrdb

No apareixen gràfiques en nodes híbrids. WARNING: Could not match host:'public@10.139.221.33:' ref:'Descr' key:'wlan5'

Això em va passar per exemple al supernode de l'Hospital Verge de la Cinta:

https://guifi.net/node/39850

A les gràfiques apareixen els dispositius amb valors -nan. En el meu cas l'error ha estat que hem indicat que el trasto és una RB800 quan realment és una RB1200 (és fa expressament així per poder crear radios). Per defecte el snpservices (servidor de gràfiques) busca les interfícies de xarxa wlan1, wlan2, wlan3... però la RB1200 de sèrie anomena ether1, ether2, ether3 a les interfícies de xarxa. L'error es pot veure al fitxer:

$ cat /var/log/snpservices/mrtg.log
...
2011-11-17 18:55:02: WARNING: Could not match host:'public@10.139.221.33:' ref:'Descr' key:'wlan5'
...

Si canvieu les interfícies de xarxa de la RB1200 a wlanX aleshores us funcionarà.

Cal tenir en compte que sempre l'ordre és:

  • radio 0: wlan1
  • radio 1: wlan2
  • radio 2: wlan3
  • etc...

TODO

IMPORTANT: TODO:Per tal que el servidor de gràfiques grafiqui correctament cal que la interfície es digui Wlan/LAN? quelcom similar es va comentar al SAX 2011

Vegeu també

Enllaços externs

Block quote