Diferencia entre revisiones de «SNPServices»

De Guifi.net - Wiki Hispano

Línea 1: Línea 1:
== Servicio SNPServices ==
+
SNPServices es un servicio de gráficas.
SNPServices es un servicio de gráficas...
+
  
 +
El sistema de monitorización de la red se realiza mediante 3 sistemas principales. El esquema general se puede consultar en [[Monitor]].
  
El sistema de monitorización de la red se realiza mediante 3 sistemas principales.
+
=== Configuración de servidor Cliente SNPServices ===
Vea este documento para ver el esquema general http://es.wiki.guifi.net/wiki/Monitor
+
 
+
 
+
 
+
 
+
'''Configuración de servidor Cliente SNPServices'''
+
 
El cliente SNPServices recoge información de su red mas cercana. La almacena y se la entrega al servidor web en modo de gráficas que incrusta en el entorno de guifi.net.
 
El cliente SNPServices recoge información de su red mas cercana. La almacena y se la entrega al servidor web en modo de gráficas que incrusta en el entorno de guifi.net.
 
Esta configuración es la que realizaras si quieres servir gráficos a la zona donde estas. Es muy probable que lo montes en el servidor proxy que tengáis, pero podría ser dedicado.
 
Esta configuración es la que realizaras si quieres servir gráficos a la zona donde estas. Es muy probable que lo montes en el servidor proxy que tengáis, pero podría ser dedicado.
Línea 15: Línea 9:
  
  
'''Servidor WEB'''
+
=== Servidor WEB ===
 
El servidor web de guifi, única ente que accede a las bases de datos del sistema.
 
El servidor web de guifi, única ente que accede a las bases de datos del sistema.
Para montar un servicio WEB idéntico a www.guifi.net, o sea, un entorno de desarrollo se realiza mediante este procedimiento
+
Para montar un servicio WEB idéntico a www.guifi.net, o sea, un entorno de desarrollo se realiza mediante este procedimiento: [[Preparando el entorno de desarrollo]].
http://es.wiki.guifi.net/wiki/Preparando_el_entorno_de_desarrollo
+
  
'''Configuración de servidor MASTER SNPServices'''
+
=== Configuración de servidor MASTER SNPServices ===
 
Este servicio solo es alcanzable desde el cliente SNPServices. Solo existe un servicio como este y esta en la central de GUIFI.NET.
 
Este servicio solo es alcanzable desde el cliente SNPServices. Solo existe un servicio como este y esta en la central de GUIFI.NET.
 
Desde aquí se crea el archivo CNML que se lo cede a los clientes SNPServices. Esta información se necesita para que los servicios SNPServices locales hagan sus comprobaciones de los sistemas cercanos.
 
Desde aquí se crea el archivo CNML que se lo cede a los clientes SNPServices. Esta información se necesita para que los servicios SNPServices locales hagan sus comprobaciones de los sistemas cercanos.
 
Básicamente SNPServices sirve recopilar información general de la red que esta en la BBDD de GUIFI. Cuando un cliente SNPServices le pide información de su red, el servidor se la concede en formato CNML.
 
Básicamente SNPServices sirve recopilar información general de la red que esta en la BBDD de GUIFI. Cuando un cliente SNPServices le pide información de su red, el servidor se la concede en formato CNML.
  
=== Instalacion del servicio SNPServices mediante GIT===
+
=== Instalacion del servicio SNPServices mediante GIT ===
  
<pre>Nota: Este metodo de instalacion depende de que el repositorio este actualizado y a fecha de 07/11/2012 no lo esta.  
+
<pre>Nota: Este método de instalación depende de que el repositorio esté actualizado y a fecha de 07/11/2012 no lo está.  
 
Me ha sido mas fácil la instalación mediante apt-get install.</pre>
 
Me ha sido mas fácil la instalación mediante apt-get install.</pre>
* [[Servidor de gráficas 1]] (Debian/Ubuntu) método apt + configuración virtualhost apache
+
 
 +
* [[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 2]] (Debian/Ubuntu) método dpkg
 
* [[Servidor de gráficas 3]] (Debian/Ubuntu) extendido
 
* [[Servidor de gráficas 3]] (Debian/Ubuntu) extendido
 
  
 
El servicio SNPServices Master y Cliente se instala del mismo modo.
 
El servicio SNPServices Master y Cliente se instala del mismo modo.
A diferencia entre ambos es que usan procedimientos diferentes en al ejecución de sus tareas. También alguno común.
+
La diferencia entre ambos es que usan procedimientos diferentes en la ejecución de sus tareas. También alguno común.
  
Para instalarlo se hace así
+
Para instalarlo se hace así:
Nos creamos una cuenta en el repositorio gitorius. Clonamos el servicio snpservices para poder enviar nuestras mejoras. Lo descargamos.
+
  
 +
# Nos creamos una cuenta en el repositorio Gitorious
 +
# Clonamos el servicio snpservices para poder enviar nuestras mejoras
 +
# Lo descargamos
  
 
<pre>
 
<pre>
Línea 46: Línea 41:
 
</pre>
 
</pre>
  
 
+
También se puede descargar mediante repositorio. Véase [[Configurar Repositorio apt guifi]].
También se puede descargar mediante repositorio.
+
http://es.wiki.guifi.net/wiki/Configurar_Repositorio_apt_guifi
+
 
+
 
+
* [[Configurar_Repositorio_apt_guifi|Configurar el Repositorio de apt de Guifi]]
+
  
 
Una vez configurado el repositorio, descargamos servicio.
 
Una vez configurado el repositorio, descargamos servicio.
  
<pre># apt-get install snpservices</pre>
+
# apt-get install snpservices
  
Si quieres instalar el servicio SNPServices para servir gráficas sigue los pasos aqui
+
Si quieres instalar el servicio SNPServices para servir gráficas sigue los pasos aquí: [[Servidor de gráficas]].
http://es.wiki.guifi.net/wiki/Servidor_de_gr%C3%A1ficas
+
  
A partir de ahora configuraremos el servicio SNPServices Master para servir datos a los clientes SNPServicves
+
A partir de ahora configuraremos el servicio SNPServices Master para servir datos a los clientes SNPServices.
  
 
=== Configuración del servicio SNPServices Master ===
 
=== Configuración del servicio SNPServices Master ===
  
.Se crea un alias que apunte a nuestra carpeta donde hemos instalado el servicio
+
Se crea un alias que apunte a nuestra carpeta donde hemos instalado el servicio
  
 
<pre> Alias /snpservices /var/www/html/snpservices </pre>
 
<pre> Alias /snpservices /var/www/html/snpservices </pre>
  
. Creas la rarpeta /tmp y le das permisos de escritura
+
Creas la carpeta /tmp y le das permisos de escritura
  
<pre>mkdir /tmp
+
mkdir /tmp
chmod a+rw snpservices/tmp
+
chmod a+rw snpservices/tmp
</pre>
+
 
 +
Crea el servicio en la base de datos usando esta dirección
 +
http://yourserver/snpservices
  
.Crea els ervicio en al base  de datos usando esta direccion
+
te saldrá una pagina así:
<pre> http://yourserver/snpservices</pre>
+
  
te saldra una pagina asi
 
 
<pre>
 
<pre>
 
ERROR: No service specified
 
ERROR: No service specified
Línea 91: Línea 80:
  
 
si fueras un cliente, el procedimiento continua cambiando el servidor root al que te conectas modificando el archivo /common/config.php.
 
si fueras un cliente, el procedimiento continua cambiando el servidor root al que te conectas modificando el archivo /common/config.php.
Es por esto que nos sale el error "ERROR: No service specified", pero en este caso nosotros somos el root y aqui tenemos que poner un que representa al servidor web. Para guifi tenemos un valor reservado. Si quieres contactar con el servidor root, debes de pedirlo en los foros abiertos en las listas de desarrollo. Para cualquier entorno podria valer con poner otro servidor de gráficas.
+
Es por esto que nos sale el error ''"ERROR: No service specified"'', pero en este caso nosotros somos el root y aquí tenemos que poner uno que representa al servidor web. Para guifi tenemos un valor reservado. Si quieres contactar con el servidor root, debes de pedirlo en los foros abiertos en las listas de desarrollo. Para cualquier entorno podría valer con poner otro servidor de gráficas.
  
Tenemos un archivo llamado common/config.php.template que nos servirá de plantilla
+
Tenemos un archivo llamado common/config.php.template que nos servirá de plantilla.
  
 
=== Configuración del archivo config.php ===
 
=== Configuración del archivo config.php ===
Vamos al grano.
+
Aquí se configura el directorio raiz del servicio SNP. Esta variable es usada en varios sitios.
  
Aquí se configura el directorio raiz del servicio SNP. Esta variable es usada en varios sitios.
 
 
<pre>
 
<pre>
 
<?php
 
<?php
Línea 106: Línea 94:
 
</pre>
 
</pre>
  
 +
Este es el numero de nodo que nos ha dado el servidor web al crear el servicio SNP Cliente:
  
Este es el numero de nodo que nos ha dado el servidor web al crear el servicio SNP Cliente.
 
 
<pre>
 
<pre>
 
// SNPGraphServerID: Default Graph Server ID
 
// SNPGraphServerID: Default Graph Server ID
 
$SNPGraphServerId = 6579;
 
$SNPGraphServerId = 6579;
 
 
</pre>
 
</pre>
  
Servicio root. El root de nuestro servidor guifi actual es la pagina web www.guifi.net
+
Servicio root. El root de nuestro servidor guifi actual es la pagina web www.guifi.net:
 +
 
 
<pre>
 
<pre>
 
// rootZone: which is the ROOT zone
 
// rootZone: which is the ROOT zone
Línea 121: Línea 109:
 
</pre>
 
</pre>
  
Aqui la direccion desde donde se enlaza a los servicios mediante web. Esta variable es usada en varios archivos de configuracion
+
Aquí la dirección desde donde se enlaza a los servicios mediante web. Esta variable es usada en varios archivos de configuración:
 +
 
 
<pre>
 
<pre>
 
// SNPDataServer_url: without ending backslash, the url where the data is
 
// SNPDataServer_url: without ending backslash, the url where the data is
Línea 128: Línea 117:
 
</pre>
 
</pre>
  
Configuracion del servicio MRTG creador de gráficas. Aqui le diremos donde almacenar los datos.
+
Configuración del servicio MRTG creador de gráficas. Aquí le diremos donde almacenar los datos. Tienes que crear el directorio mrtg en /snpservices/mrtg:
Tienes que crear el directorio mrtg en /snpservices/mrtg
+
 
 
<pre>
 
<pre>
  
Línea 136: Línea 125:
 
// cached CNML file, or remote
 
// cached CNML file, or remote
 
</pre>
 
</pre>
El programa cnml2mrtfcsv es el servicio SNPService principal y busca en la BBDD del servidor web los cambios que han habido. Si ha cambiado algo desde la ultima actualización, genera de nuevo el archivo CNML.
+
 
Se tiene que modificar a la ruta que tengamos nosotros, normalmente dentro de ./graphs
+
El programa cnml2mrtfcsv es el servicio SNPService principal y busca en la BBDD del servidor web los cambios que han habido. Si ha cambiado algo desde la ultima actualización, genera de nuevo el archivo [[CNML]]. Se tiene que modificar a la ruta que tengamos nosotros, normalmente dentro de ./graphs
 +
 
 
<pre>
 
<pre>
 
$MRTGConfigSource='http://proves.elserrat.guifi.net/snpservices/graphs/cnml2mrtgcsv.php';
 
$MRTGConfigSource='http://proves.elserrat.guifi.net/snpservices/graphs/cnml2mrtgcsv.php';
 
</pre>
 
</pre>
Aqui almacenamos los datos mrtg que recojamos. La carpeta data no esta creada por defecto. La tenemos que crear mediante mkdir data desde el directorio snpservice
+
 
 +
Aquí almacenamos los datos mrtg que recojamos. La carpeta data no esta creada por defecto. La tenemos que crear mediante ''mkdir'' data desde el directorio snpservice:
 +
 
 
<pre>
 
<pre>
 
//$MRTGConfigSource='../data/guifi_mrtg.csv';
 
//$MRTGConfigSource='../data/guifi_mrtg.csv';
  
 
</pre>
 
</pre>
Configuracino para la creacion de archivo CNML
+
 
 +
Configuración para la creación de archivo [[CNML]]:
 +
 
 
<pre>
 
<pre>
  
Línea 154: Línea 148:
 
// Cached CNML source (prefered)
 
// Cached CNML source (prefered)
 
</pre>
 
</pre>
Aqui almacenamos los datos CNML que recojamos
 
<pre>
 
  
 +
Aquí almacenamos los datos CNML que recojamos:
 +
 +
<pre>
 
$CNMLSource='http://proves.elserrat.guifi.net/snpservices/common/qnodes.php?nodes=%s';
 
$CNMLSource='http://proves.elserrat.guifi.net/snpservices/common/qnodes.php?nodes=%s';
 
$CNMLData='../data/guifi.cnml';
 
$CNMLData='../data/guifi.cnml';
 +
</pre>
  
 +
Configuración de herramienta rrdtool. transforma tdatos en archivos .rrd para poder ser exportados. No hace falta hacer nada aquí.
  
</pre>
 
Configuracion de herramienta rrdtool. transforma tdatos en archivi .rrd para poder ser exportado. No hace falta hacer nada aqui
 
 
<pre>
 
<pre>
  
Línea 177: Línea 172:
  
 
</pre>
 
</pre>
Configuracion de entorno MRTG. No hace falta hacer nada aqui
+
 
 +
Configuración de entorno MRTG. No hace falta hacer nada aquí.
 +
 
 
<pre>
 
<pre>
  
Línea 228: Línea 225:
  
 
=== Arrancamos y actualizamos datos ===
 
=== Arrancamos y actualizamos datos ===
Para arrancar y actualizar datos se hace mediante un comando llamado refresh.sh
+
Para arrancar y actualizar datos se hace mediante un comando llamado ''refresh.sh''. Más adelante configuraremos para que refresque solo. Primero lo ejecutaremos manualmente.
Mas adelante configuraremos para que refresque solo. Primero lo ejecutaremos manualmente
+
 
 +
Lo he arrancado y me da el siguiente error:
  
Lo he arrancado y me da el siguiente error
 
 
<pre>
 
<pre>
 
root@webserver:/var/www/guifi/snpservices/common# ./refresh.sh  
 
root@webserver:/var/www/guifi/snpservices/common# ./refresh.sh  
Línea 237: Línea 234:
 
Error redaing CNML source\nroot
 
Error redaing CNML source\nroot
 
</pre>
 
</pre>
Esto es porque no hay configurado algu parametro. Entramos en refresh.sh y este nos envia a refresh.cnml.php
+
 
refress.sh llama a dos archivos php.
+
Esto es porque no hay configurado algún parámetro. Entramos en ''refresh.sh'' y este nos envia a ''refresh.cnml.php''.
 +
 
 +
''refress.sh'' llama a dos archivos php.
  
 
<pre>
 
<pre>
Línea 248: Línea 247:
  
 
=== Configurar refresh.cnml.php ===
 
=== Configurar refresh.cnml.php ===
Veamos ahora el archivo de configuracion refresh.cnml.php
+
Veamos ahora el archivo de configuracion ''refresh.cnml.php''
  
Si queremos ejecutar este archivo lo hacemos mediante la llamada a php
+
Si queremos ejecutar este archivo lo hacemos mediante la llamada a php. Aquí vemos que error genera y podremos ir a ver donde está ocurriendo.
Aqui vemos que error genera y podremos ir a ver donde esta ocurriendo.
+
  
 +
Este es el archivo. Primero carga una configuración común en el archivo ''config.php''. Sino busca la plantilla ''config.php.template'':
  
Este es el archivo. Primero carga una configuración común en el archivo config.php. Sino busca la plantilla config.php.template
 
 
<pre>
 
<pre>
 
<?php
 
<?php
Línea 272: Línea 270:
  
 
</pre>
 
</pre>
 +
 
Intenta abrir archivo ya creado. Tenemos que modificar la ruta donde almacena esta informacion. Compara la fecha de actualización anterior y la actual para decidir si hacer un refresco completo o no.
 
Intenta abrir archivo ya creado. Tenemos que modificar la ruta donde almacena esta informacion. Compara la fecha de actualización anterior y la actual para decidir si hacer un refresco completo o no.
si todo esta actualizado, ejecuta exit() y acaba.
+
si todo esta actualizado, ejecuta ''exit()'' y acaba.
 
+
  
 
<pre>
 
<pre>
 
 
   $hlastnow = @fopen($SNPDataServer_url."/guifi/refresh/cnml", "r")
 
   $hlastnow = @fopen($SNPDataServer_url."/guifi/refresh/cnml", "r")
 
     or die('Error reading last timestamp\n');
 
     or die('Error reading last timestamp\n');
 
   $last_now = fgets($hlastnow);
 
   $last_now = fgets($hlastnow);
 
   fclose($hlastnow);
 
   fclose($hlastnow);
 
  
 
   $hlast= @fopen("/tmp/last_update.cnml", "r");
 
   $hlast= @fopen("/tmp/last_update.cnml", "r");
Línea 289: Línea 285:
 
     echo "No changes.\n";
 
     echo "No changes.\n";
 
     exit();
 
     exit();
 
 
</pre>
 
</pre>
  
Si está mal configurado estos parámetros, tendremos el siguiente error
+
Si está mal configurado estos parámetros, tendremos el siguiente error:
 +
 
 
<pre>
 
<pre>
 
root@webserver:/var/www/guifi/snpservices/common# php refresh_cnml.php  
 
root@webserver:/var/www/guifi/snpservices/common# php refresh_cnml.php  
Línea 300: Línea 296:
 
</pre>
 
</pre>
  
 +
Aquí es cuando empieza la búsqueda de cambios.
  
 +
El primer open abre un archivo de la web con los contenidos. Éstos son comparados con el archivo que tenemos en /tmp. Si son diferentes, realiza una descarga y lo actualiza.
  
Aqui es cuando empieza la búsqueda de cambios.
 
El primer open abre un archivo de la web con los contenidos. estos son comparados con el archivo que tenemos en /tmp. Si son diferentes, realiza una descarga y lo actualiza.
 
 
<pre>
 
<pre>
 
 
echo "Getting CNML file\n";
 
echo "Getting CNML file\n";
 
   $hcnml = @fopen($SNPDataServer_url."/guifi/cnml/".$rootZone."/detail", "r")
 
   $hcnml = @fopen($SNPDataServer_url."/guifi/cnml/".$rootZone."/detail", "r")
Línea 324: Línea 319:
 
                    
 
                    
 
   }
 
   }
 
 
</pre>
 
</pre>
  
Si esta mal configurado, recibiremos este error. Tambien puede identificar falta de recursos para Apache.Mira el log de Apache.
+
Si esta mal configurado, recibiremos este error. Tambien puede identificar falta de recursos para Apache. Mira el log de Apache:
 +
 
 
<pre>
 
<pre>
 
root@webserver:/var/www/guifi/snpservices/common# php refresh_cnml.php  
 
root@webserver:/var/www/guifi/snpservices/common# php refresh_cnml.php  
Línea 334: Línea 329:
 
root@webserver:/var/www/guifi/snpservices[Sat May 22 00:39:01 2010] [notice] child pid 14787 exit signal Segmentation fault (11)/common#
 
root@webserver:/var/www/guifi/snpservices[Sat May 22 00:39:01 2010] [notice] child pid 14787 exit signal Segmentation fault (11)/common#
 
</pre>
 
</pre>
El sistema dentro de la web que crea el archivo CNML es un proceso de un modulo de Drupal del sistema guifi
 
Lo encontraras aqui
 
  
<pre>
+
El sistema dentro de la web que crea el archivo [[CNML]] es un proceso de un modulo de Drupal del sistema guifi. Lo encontraras en ''/sites/all/modules/guifi/guifi_cnml.inc.php''.
/sites/all/modules/guifi/guifi_cnml.inc.php
+
</pre>
+
  
Ahora tenemos dentro de /data dos archivos iguales llamados guifi.cnml i guifi.cnml.tmp con os contenidos encontrados.
+
Ahora tenemos dentro de /data dos archivos iguales llamados ''guifi.cnml'' y ''guifi.cnml.tmp'' con los contenidos encontrados. También actualiza datos en ''/tmp/last_update.cnml'' que se usara nuevamente en la próxima actualización.
También actualiza datos en /tmp/last_update.cnml que se usara nuevamente en la próxima actualizacion
+
  
 
=== Prueba de servicio ===
 
=== Prueba de servicio ===
  
Un cliente con servici SNPService usara el servicio SNPService Master recien creado para preguntar informacion acerca un nodo de esta manera
+
Un cliente con servicio SNPService usará el servicio SNPService Master recien creado para preguntar información acerca un nodo de esta manera:
http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=6558
+
http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=6558
  
Esto nos devuelve un archivo CNML como este
+
Esto nos devuelve un archivo [[CNML]] como este:
 
<pre>
 
<pre>
 
46491,#VicPuigsacalm2Rd1,10.138.48.51,wlan1;VicVcPgsclm2Rd1CPE0,Planned
 
46491,#VicPuigsacalm2Rd1,10.138.48.51,wlan1;VicVcPgsclm2Rd1CPE0,Planned
Línea 368: Línea 358:
 
</pre>
 
</pre>
  
La configuracion puede que no funcione. Para ver errores, pedir a apache que nos mustre su log
+
La configuración puede que no funcione. Para ver errores, pedir a apache que nos muestre su log:
 +
 
 
<pre>
 
<pre>
 
root@webserver:~# tail -f /var/log/apache2/*.log
 
root@webserver:~# tail -f /var/log/apache2/*.log
 
</pre>
 
</pre>
  
Yo me he encotnrado este error
+
Yo me he encotnrado este error:
 
<pre>
 
<pre>
 
[Mon Oct 22 23:27:07 2012] [error] [client 192.168.1.40] PHP Warning:  DOMDocument::load():  
 
[Mon Oct 22 23:27:07 2012] [error] [client 192.168.1.40] PHP Warning:  DOMDocument::load():  
 
Premature end of data in tag html line 3 in /var/www/drupal-6.26/snpservices/data/guifi.cnml, line: 149 in /var/www/drupal-6.26/snpservices/graphs/cnml2mrtgcsv.php on line 270
 
Premature end of data in tag html line 3 in /var/www/drupal-6.26/snpservices/data/guifi.cnml, line: 149 in /var/www/drupal-6.26/snpservices/graphs/cnml2mrtgcsv.php on line 270
 
 
</pre>
 
</pre>
  
Tambien este. Parece que al intentar cargar la zona, da un error Apache a causa de falta de memoria al cargar todos los datos en una variable
+
También este. Parece que al intentar cargar la zona, da un error Apache a causa de falta de memoria al cargar todos los datos en una variable.
Para solucioanrlo se tiene que modificar el limite d ememoria para php dentro de /etc/php5/apache/php.ini
+
Para solucionarlo se tiene que modificar el límite de memoria para php dentro de ''/etc/php5/apache/php.ini''. La variable se llama '''memory_limit = 128M'''. Si lo pones a -1 equivale a que no tenga limite [http://es1.php.net/manual/es/ini.core.php#ini.memory-limit].
La variable se llama  
+
memory_limit = 128M
+
Parece que si lo pones a -1 equivale a que no tenga limite.
+
http://es1.php.net/manual/es/ini.core.php#ini.memory-limit
+
  
 
<pre>
 
<pre>
Línea 392: Línea 378:
 
</pre>
 
</pre>
  
De todas maneras, los recursos son limitados. Este mensaje en Apache identifica lo msimo. Falta de recursos. En mi caso, como no tengo mas, hago una consulta mas pequeña para poder probar.el error que me salia es este
+
De todas maneras, los recursos son limitados. Este mensaje en Apache identifica lo msimo. Falta de recursos. En mi caso, como no tengo más, hago una consulta mas pequeña para poder probar el error que me salía es este:
 +
 
 
<pre>
 
<pre>
 
[Sat May 22 00:39:01 2010] [notice] child pid 14787 exit signal Segmentation fault (11)
 
[Sat May 22 00:39:01 2010] [notice] child pid 14787 exit signal Segmentation fault (11)
 
</pre>
 
</pre>
He aprendido la causas aquí http://www.webhostingtalk.com/showthread.php?t=950165
+
 
 +
He aprendido la causas aquí: http://www.webhostingtalk.com/showthread.php?t=950165
  
 
=== Migración de un servidor a otro ===
 
=== Migración de un servidor a otro ===
Si quieres migrar un servidor de gráficas a otro servidor manteniendo las gráficas es tan simple como configurar el snpservices con el mismo ID que el antiguo y copiar los ficheros .rrd de /var/lib/snpservices/rrdb de la máquian vieja a la nueva.
+
Si quieres migrar un servidor de gráficas a otro servidor manteniendo las gráficas es tan simple como configurar el snpservices con el mismo ID que el antiguo y copiar los ficheros .rrd de ''/var/lib/snpservices/rrdb'' de la máquian vieja a la nueva.
  
 
Si la máquina nueva funciona con una arquitectura (por ejemplo, antes 32bits y ahora 64bits), los ficheros .rrd deben ser reconvertidos. Para ello hay que convertir el .rrd a XML y volver a crear el fichero .rrd a partir del XML.
 
Si la máquina nueva funciona con una arquitectura (por ejemplo, antes 32bits y ahora 64bits), los ficheros .rrd deben ser reconvertidos. Para ello hay que convertir el .rrd a XML y volver a crear el fichero .rrd a partir del XML.
  
 
En la máquina de 32bits ejecutamos esto:
 
En la máquina de 32bits ejecutamos esto:
:rrdtool dump fitxer_32bits_.rrd > fitxer.xml
+
:rrdtool dump fichero_32bits_.rrd > fichero.xml
  
Copiamos el ficheor a la nueva máquina de 64bits y ejecutamos:
+
Copiamos el fichero a la nueva máquina de 64bits y ejecutamos:
:rrdtool restore fitxer.xml
+
:rrdtool restore fichero.xml
  
 
Y queda generado el fichero .rrd
 
Y queda generado el fichero .rrd
  
 
[[Categoría:SNPServices]]
 
[[Categoría:SNPServices]]

Revisión de 09:26 5 ago 2013

SNPServices es un servicio de gráficas.

El sistema de monitorización de la red se realiza mediante 3 sistemas principales. El esquema general se puede consultar en Monitor.

Configuración de servidor Cliente SNPServices

El cliente SNPServices recoge información de su red mas cercana. La almacena y se la entrega al servidor web en modo de gráficas que incrusta en el entorno de guifi.net. Esta configuración es la que realizaras si quieres servir gráficos a la zona donde estas. Es muy probable que lo montes en el servidor proxy que tengáis, pero podría ser dedicado. El procedimiento lo encontrarás aquí http://es.wiki.guifi.net/wiki/Servidor_de_gr%C3%A1ficas


Servidor WEB

El servidor web de guifi, única ente que accede a las bases de datos del sistema. Para montar un servicio WEB idéntico a www.guifi.net, o sea, un entorno de desarrollo se realiza mediante este procedimiento: Preparando el entorno de desarrollo.

Configuración de servidor MASTER SNPServices

Este servicio solo es alcanzable desde el cliente SNPServices. Solo existe un servicio como este y esta en la central de GUIFI.NET. Desde aquí se crea el archivo CNML que se lo cede a los clientes SNPServices. Esta información se necesita para que los servicios SNPServices locales hagan sus comprobaciones de los sistemas cercanos. Básicamente SNPServices sirve recopilar información general de la red que esta en la BBDD de GUIFI. Cuando un cliente SNPServices le pide información de su red, el servidor se la concede en formato CNML.

Instalacion del servicio SNPServices mediante GIT

Nota: Este método de instalación depende de que el repositorio esté actualizado y a fecha de 07/11/2012 no lo está. 
Me ha sido mas fácil la instalación mediante apt-get install.

El servicio SNPServices Master y Cliente se instala del mismo modo. La diferencia entre ambos es que usan procedimientos diferentes en la ejecución de sus tareas. También alguno común.

Para instalarlo se hace así:

  1. Nos creamos una cuenta en el repositorio Gitorious
  2. Clonamos el servicio snpservices para poder enviar nuestras mejoras
  3. Lo descargamos
cd /var/www/html
git clone git://gitorious.org/guifi/snpservices.git

También se puede descargar mediante repositorio. Véase Configurar Repositorio apt guifi.

Una vez configurado el repositorio, descargamos servicio.

# apt-get install snpservices

Si quieres instalar el servicio SNPServices para servir gráficas sigue los pasos aquí: Servidor de gráficas.

A partir de ahora configuraremos el servicio SNPServices Master para servir datos a los clientes SNPServices.

Configuración del servicio SNPServices Master

Se crea un alias que apunte a nuestra carpeta donde hemos instalado el servicio

 Alias /snpservices /var/www/html/snpservices 

Creas la carpeta /tmp y le das permisos de escritura

mkdir /tmp
chmod a+rw snpservices/tmp

Crea el servicio en la base de datos usando esta dirección

http://yourserver/snpservices

te saldrá una pagina así:

ERROR: No service specified
CNML services
Version: 2.0
USAGE:
index.php?call=[service][&parameter[=value]]

services: help version phpinfo serverinfo [service]
  help
...sigue...

si fueras un cliente, el procedimiento continua cambiando el servidor root al que te conectas modificando el archivo /common/config.php. Es por esto que nos sale el error "ERROR: No service specified", pero en este caso nosotros somos el root y aquí tenemos que poner uno que representa al servidor web. Para guifi tenemos un valor reservado. Si quieres contactar con el servidor root, debes de pedirlo en los foros abiertos en las listas de desarrollo. Para cualquier entorno podría valer con poner otro servidor de gráficas.

Tenemos un archivo llamado common/config.php.template que nos servirá de plantilla.

Configuración del archivo config.php

Aquí se configura el directorio raiz del servicio SNP. Esta variable es usada en varios sitios.

<?php

// snp_pat: full directory where snp services are located
$snp_path='/var/www/html/snpservices';

Este es el numero de nodo que nos ha dado el servidor web al crear el servicio SNP Cliente:

// SNPGraphServerID: Default Graph Server ID
$SNPGraphServerId = 6579;

Servicio root. El root de nuestro servidor guifi actual es la pagina web www.guifi.net:

// rootZone: which is the ROOT zone
$rootZone = ****; (valor reservado por seguridad)

Aquí la dirección desde donde se enlaza a los servicios mediante web. Esta variable es usada en varios archivos de configuración:

// SNPDataServer_url: without ending backslash, the url where the data is
$SNPDataServer_url = 'http://guifi.net';

Configuración del servicio MRTG creador de gráficas. Aquí le diremos donde almacenar los datos. Tienes que crear el directorio mrtg en /snpservices/mrtg:


// MRTGConfigSource: mrtg csv data
// As a input, could be either a local (to be created from
// cached CNML file, or remote

El programa cnml2mrtfcsv es el servicio SNPService principal y busca en la BBDD del servidor web los cambios que han habido. Si ha cambiado algo desde la ultima actualización, genera de nuevo el archivo CNML. Se tiene que modificar a la ruta que tengamos nosotros, normalmente dentro de ./graphs

$MRTGConfigSource='http://proves.elserrat.guifi.net/snpservices/graphs/cnml2mrtgcsv.php';

Aquí almacenamos los datos mrtg que recojamos. La carpeta data no esta creada por defecto. La tenemos que crear mediante mkdir data desde el directorio snpservice:

//$MRTGConfigSource='../data/guifi_mrtg.csv';

Configuración para la creación de archivo CNML:


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

Aquí almacenamos los datos CNML que recojamos:

$CNMLSource='http://proves.elserrat.guifi.net/snpservices/common/qnodes.php?nodes=%s';
$CNMLData='../data/guifi.cnml';

Configuración de herramienta rrdtool. transforma tdatos en archivos .rrd para poder ser exportados. No hace falta hacer nada aquí.


// rrdtool parameters
$rrdtool_path='/usr/bin/rrdtool';
$rrddb_path='/home1/comesfa/mrtg/logs/';
$rrdimg_path='/home1/comesfa/mrtg/images/';

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

Configuración de entorno MRTG. No hace falta hacer nada aquí.


// 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]: `/etc/mrtg/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]: 104857600
Title[%s_traf]: Trànsit a %s de %s
PageTop[%s_traf]: <H1>Trànsit 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>100.0 Mbytes/s</TD></TR>
     </TABLE>
';


?>

Arrancamos y actualizamos datos

Para arrancar y actualizar datos se hace mediante un comando llamado refresh.sh. Más adelante configuraremos para que refresque solo. Primero lo ejecutaremos manualmente.

Lo he arrancado y me da el siguiente error:

root@webserver:/var/www/guifi/snpservices/common# ./refresh.sh 
Getting CNML file
Error redaing CNML source\nroot

Esto es porque no hay configurado algún parámetro. Entramos en refresh.sh y este nos envia a refresh.cnml.php.

refress.sh llama a dos archivos php.

root@webserver:/var/www/guifi/snpservices/common# cat refresh.sh 
#!/bin/bash
# Refreshing CNML local file (optional)
php refresh_cnml.php

Configurar refresh.cnml.php

Veamos ahora el archivo de configuracion refresh.cnml.php

Si queremos ejecutar este archivo lo hacemos mediante la llamada a php. Aquí vemos que error genera y podremos ir a ver donde está ocurriendo.

Este es el archivo. Primero carga una configuración común en el archivo config.php. Sino busca la plantilla config.php.template:

<?php

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

  $minX = 999;
  $minY = 999;
  $maxX = -999;
  $maxY = -999;

  $members = array();

Intenta abrir archivo ya creado. Tenemos que modificar la ruta donde almacena esta informacion. Compara la fecha de actualización anterior y la actual para decidir si hacer un refresco completo o no. si todo esta actualizado, ejecuta exit() y acaba.

  $hlastnow = @fopen($SNPDataServer_url."/guifi/refresh/cnml", "r")
    or die('Error reading last timestamp\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();

Si está mal configurado estos parámetros, tendremos el siguiente error:

root@webserver:/var/www/guifi/snpservices/common# php refresh_cnml.php 
Getting CNML file
Error reading last timestamp
root@webserver:/var/www/guifi/snpservices/common# 

Aquí es cuando empieza la búsqueda de cambios.

El primer open abre un archivo de la web con los contenidos. Éstos son comparados con el archivo que tenemos en /tmp. Si son diferentes, realiza una descarga y lo actualiza.

echo "Getting CNML file\n";
  $hcnml = @fopen($SNPDataServer_url."/guifi/cnml/".$rootZone."/detail", "r")
    or die ('Error redaing CNML source\n');
  $wcnml = @fopen("../data/guifi.cnml.tmp", "w");
  while (!feof($hcnml)) {
    $buffer = fgets($hcnml, 4096);
    fwrite($wcnml,$buffer);
  }
  fclose($hcnml);
  fclose($wcnml);
  exec ("/bin/cp ../data/guifi.cnml.tmp ../data/guifi.cnml");

  $hlast= @fopen("/tmp/last_update.cnml", "w") or die('Error!');
  fwrite($hlast,$last_now);
  fclose($hlast);
?>
                  
  }

Si esta mal configurado, recibiremos este error. Tambien puede identificar falta de recursos para Apache. Mira el log de Apache:

root@webserver:/var/www/guifi/snpservices/common# php refresh_cnml.php 
Getting CNML file
Error redaing CNML source\n
root@webserver:/var/www/guifi/snpservices[Sat May 22 00:39:01 2010] [notice] child pid 14787 exit signal Segmentation fault (11)/common#

El sistema dentro de la web que crea el archivo CNML es un proceso de un modulo de Drupal del sistema guifi. Lo encontraras en /sites/all/modules/guifi/guifi_cnml.inc.php.

Ahora tenemos dentro de /data dos archivos iguales llamados guifi.cnml y guifi.cnml.tmp con los contenidos encontrados. También actualiza datos en /tmp/last_update.cnml que se usara nuevamente en la próxima actualización.

Prueba de servicio

Un cliente con servicio SNPService usará el servicio SNPService Master recien creado para preguntar información acerca un nodo de esta manera:

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

Esto nos devuelve un archivo CNML como este:

46491,#VicPuigsacalm2Rd1,10.138.48.51,wlan1;VicVcPgsclm2Rd1CPE0,Planned
38297,#VicCnvntCrmltsRd1,10.138.160.39,ath0;Vic-1-NOVcCnvntCrmltsRd1CPE0,Working
45489,#Vic11Set38Rd1,10.138.168.170,wlan1;Vic-1-NOVc11St38Rd1CPE0,Planned
44406,#Vic11set40Rd2,10.138.101.4,ath0;Vic-1-NO11st40Rd2CPE0,Working
33929,#Vic11setembre25Rd1,10.138.22.87,wifi0;Vic-1-NOVc11stmbr25Rd1CPE0,Working
18809,#VicAGrifollRd2,10.138.14.104,6,Working
40356,#VicAlbergCanongeRd2,10.138.10.80,Lan/Lan;Vic-1-NOVclbrgCnngRd2CPE0,Working
22068,#VicAlemanyRd1,10.138.14.135,wifi0;Vic-1 NOVclmnyRd1CPE0,Working
30303,#VicAlemanyRd2,10.138.14.201,wifi0;Vic-1 NOVclmnyRd2CPE0,Planned
36620,#VicAlinaRd2,10.138.10.72,wlan1;Vic-1-NOVclnRd2CPE0,Working
7211,#VicAngladaRd1,10.138.10.73,Lan/Lan;VicAngladaRadio1-0,Working
19857,#VicAnnaBRd2,10.138.11.62,wifi0;VicVcnnBRd2CPE0,Working
14203,#VicAnnaMaxenchsRd1,10.138.22.41,wifi0;VicVcnnMxnchsRd1CPE0,Working
13655,#VicAnnaPratRd1,10.138.11.51,;VicVcnnPrtRd2CPE0,Working
17035,#VicAnnaSolerRd3,10.138.22.196,6,Working

La configuración puede que no funcione. Para ver errores, pedir a apache que nos muestre su log:

root@webserver:~# tail -f /var/log/apache2/*.log

Yo me he encotnrado este error:

[Mon Oct 22 23:27:07 2012] [error] [client 192.168.1.40] PHP Warning:  DOMDocument::load(): 
Premature end of data in tag html line 3 in /var/www/drupal-6.26/snpservices/data/guifi.cnml, line: 149 in /var/www/drupal-6.26/snpservices/graphs/cnml2mrtgcsv.php on line 270

También este. Parece que al intentar cargar la zona, da un error Apache a causa de falta de memoria al cargar todos los datos en una variable. Para solucionarlo se tiene que modificar el límite de memoria para php dentro de /etc/php5/apache/php.ini. La variable se llama memory_limit = 128M. Si lo pones a -1 equivale a que no tenga limite [1].

==> /var/log/apache2/error.log <==
[Tue Oct 23 20:54:16 2012] [error] [client 192.168.1.44] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20 bytes) in /var/www/drupal-6.26/includes/database.mysqli.inc on line 150

De todas maneras, los recursos son limitados. Este mensaje en Apache identifica lo msimo. Falta de recursos. En mi caso, como no tengo más, hago una consulta mas pequeña para poder probar el error que me salía es este:

[Sat May 22 00:39:01 2010] [notice] child pid 14787 exit signal Segmentation fault (11)

He aprendido la causas aquí: http://www.webhostingtalk.com/showthread.php?t=950165

Migración de un servidor a otro

Si quieres migrar un servidor de gráficas a otro servidor manteniendo las gráficas es tan simple como configurar el snpservices con el mismo ID que el antiguo y copiar los ficheros .rrd de /var/lib/snpservices/rrdb de la máquian vieja a la nueva.

Si la máquina nueva funciona con una arquitectura (por ejemplo, antes 32bits y ahora 64bits), los ficheros .rrd deben ser reconvertidos. Para ello hay que convertir el .rrd a XML y volver a crear el fichero .rrd a partir del XML.

En la máquina de 32bits ejecutamos esto:

rrdtool dump fichero_32bits_.rrd > fichero.xml

Copiamos el fichero a la nueva máquina de 64bits y ejecutamos:

rrdtool restore fichero.xml

Y queda generado el fichero .rrd

Herramientas personales