martes, 16 de octubre de 2012

Tutorial de Monitoreo MRTG


¿Que es ICMP?

ICMP (Protocolo de mensajes de control de Internet) es un protocolo que permite administrar información relacionada con errores de los equipos en red. Si se tienen en cuenta los escasos controles que lleva a cabo el protocolo IP, ICMP no permite corregir los errores sino que los notifica a los protocolos de capas cercanas. Por lo tanto, el protocolo ICMP es usado por todos los routers para indicar un error.

ICMP difiere del propósito de TCP y UDP ya que generalmente no se utiliza directamente por las aplicaciones de usuario en la red. La única excepción es la herramienta ping y traceroute, que envían mensajes de petición Echo ICMP (y recibe mensajes de respuesta Echo) para determinar si un host está disponible, el tiempo que le toma a los paquetes en ir y regresar a ese host y cantidad de hosts por los que pasa.





¿Que es snmp?

SNMP (Simple Network Management Protocol o Protocolo Simple de administración de red) es uno protocolos del conjunto definido por la Fuerza de Trabajo en Ingeniería de Internet (IETF o Internet Engineering Task Force), clasificada en el nivel de aplicación del modelo TCP/IP y que está diseñado para facilitar el intercambio de información entre dispositivos de red y es ampliamente utilizado en la administración de redes para supervisar el desempeño, la salud y el bienestar de una red, equipo de computo y otros dispositivos.

Los dispositivos administrados son supervisados y controlados usando cuatro comandos SNMP básicos: lectura, escritura, notificación y operaciones transversales.

El comando de lectura es usado por un NMS para supervisar elementos de red. El NMS examina diferentes variables que son mantenidas por los dispositivos administrados.

El comando de escritura es usado por un NMS para controlar elementos de red. El NMS cambia los valores de las variables almacenadas dentro de los dispositivos administrados.

El comando de notificación es usado por los dispositivos administrados para reportar eventos en forma asíncrona a un NMS. Cuando cierto tipo de evento ocurre, un dispositivo administrado envía una notificación al NMS.

Las operaciones transversales son usadas por el NMS para determinar qué variables soporta un dispositivo administrado y para recoger secuencialmente información en tablas de variables, como por ejemplo, una tabla de rutas.
MRTG



MRTG (Multi Router Traffic Grapher) es una herramienta, escrita en C y Perl por Tobias Oetiker y Dave Rand, que se utiliza para supervisar la carga de tráfico de interfaces de red. MRTG  genera los resultados en archivos HTML con gráficos, que proveen una representación visual de este tráfico.

MRTG utiliza SNMP (Simple Network Management Protocol o Protocolo Simple de administración de red) para recolectar los datos de tráfico de un determinado dispositivo (dispositivos encaminamiento o servidores), por tanto es requisito contar con al menos un sistema a supervisar con SNMP  funcionando y con dicho servicio correctamente configurado.

FUNCIONAMIENTO

MRTG ejecuta como un demonio o invocado desde las tareas programadas del cron. Por defecto, cada cinco minutos recolecta la información de los dispositivos y ejecuta los scripts que se le indican en la configuración.

En un primer momento, MRTG consultaba la información, la procesaba y generaba el informe y las gráficas. En las últimas versiones, esta información es almacenada en una base de datos gestionada por RRDtool a partir de la cual, y de forma separada, se generan los informes y las gráficas

Instalación y configuración de MRTG

Para poder utilizar MRTG es necesario primero instalar un agente SNMP en los equipos que se desea monitorear. Para instalar dicho agente en Windows 7 debemos seguir los siguientes pasos:
1.    Vamos a Panel de Control (Categorias) -> Programas -> Turn Windows Features on or off.
2.    En la lista activamos Simple Network Management Protocol (SNMP) y hacemo click en Ok.
3.    Una vez instalado debemos configurarlo, para lo cual hacemos click derecho en Mi PC y seleccionamos Administrar.En la lista de la izquierda seleccionamos Servicios y Aplicaciones -> Servicios, y buscamos Servicio SNMP. Hacemos click derecho y seleccionamos propiedades. Seleccionamos la pestaña Seguridad y añadimos una nueva comunidad. Por defecto las comunidades son public para acceso READ_ONLY y private para acceso READ_WRITE.
Una vez hecho esto ya tenemos configurada nuestra computadora para monitorearla utilizando SNMP. Ahora es necesario configurar MRTG para realizar el monitoreo. MRTG utiliza scripts de Perl para su funcionamiento, por lo que es necesario instalar un intérprete de Perl. El intérprete que se utilizó es ActivePerl, el cual se instala como cualquier programa normal.
Para la utilización de MRTG se utilizan principalmente 3 scripts: cfgmaker, indexmaker y mrtg.
Cfgmaker genera un archivo de configuración utilizando información del host que se desea monitorear, esta información se obtiene a través de SNMP. Este comando debe ejecutarse con varios parámetros: la comunidad y el IP de la máquina que se desea monitorear, el directorio donde se generarán los reportes y el archivo de configuración que se desea crear. Estos parámetros se especifican de la siguiente manera:
perl cfmaker public@192.168.1.100 –global "WorkDir: c:\mrtghtml" –output pc1.cfg
Mrtg es el script que obtiene la información de monitoreo del equipo correspondiente, simplemente debe especificarse el archivo de configuración de dicha máquina:
perl mrtg pc1.cfg
Este script genera varios archivos para cada interfaz del dispositivo. Es conveniente, cuando se desea monitorear muchos equipos, obtener todos los reportes en una misma página html, para esto se utiliza el script indexmaker, al cual debe especificarse el archivo en el que se desea tener un resumen del monitoreo, y los archivos de configuración de los equipos a monitorear:
perl indexmaker –output resumen.html pc1.cfg pc2.cfg pc3.cfg
Una vez ejecutado el indexmaker debe ejecutarse el mrtg para cada uno de los archivos de configuración.
Es necesario tomar en cuenta que todos los archivos generados por mrtg deben encontrarse en la misma carpeta, y que esta sea accesible desde el servidor apache si se desea ejecutar el monitoreo desde la nube.

Utilización de MRTG desde PHP

Para la realización del monitoreo desde php se siguieron los siguientes pasos:
1.    Primeramente se creó la página principal (index.php) con un formulario para seleccionar una opción para monitoreo: agregar un nuevo equipo, remover un equipo y mostrar gráficas. Este formulario envía sus datos a la página snmp.php.
2.    Para tener una lista de los equipos a monitorear se utilizó una base de datos MySql.
3.    En caso de que se desee agragar un nuevo usuario, se muestra un formulario para llenar los datos correspondientes. Estos datos se envían a la misma página y se ejecuta el siguiente código para introducirlo a la base de datos y crear el archivo de configuración:
                if(isset($_POST['agregar'])){
                               exec("perl c:\AppServ\www\mrtg\bin\cfgmaker $_POST[comunidad]@$_POST[ip] --global \"WorkDir: c:\\AppServ\\www\\archivos\\practicas\\System\\snmp\" --output $_POST[archivo].cfg");
                               $db = new mysqli("localhost", "root", "yi2junte", "monitoreo");
                              $db->query("insert into equipos values(0, '$_POST[nombre]', '$_POST[ip]', '', '$_POST[archivo].cfg', '$_POST[comunidad]')");
                               echo "<p>El archivo de configuración ha sido creado correctamente.</p>";
                               echo '<p><a href=".">Volver</a></p>';
                }
4.    Para mostrar las gráficas de monitoreo se ejecuta el indexmaker para todos los equipos almacenados en la base de datos, y luego se ejecuta mrtg para cada uno de ellos:
                               elseif($_POST['action'] == 2){
                                               $db = new mysqli("localhost", 'root', 'yi2junte', 'monitoreo');
                                               $res = $db->query("select * from equipos");
                                               $aux = "";
                                               while($fila = $res->fetch_array()){
                                                               $aux .= ' '.$fila['Conf'];
                                               }
                                              echo $aux;
                                               exec('perl "c:\AppServ\www\mrtg\bin\indexmaker" --output "c:\AppServ\www\archivos\practicas\System\snmp\monitoreo.html"'.$aux);
                                               $res = $db->query("select * from equipos");
                                               while($fila = $res->fetch_array()){
                                                               exec('perl "c:\AppServ\www\mrtg\bin\mrtg" '.$fila[Conf]);
                                               }
                                               echo '<p><a href="snmp/monitoreo.html">Gráficas</a></p>';
                               }
Es necesario observar que como los archivos de mrtg y los de la interfaz php se encuentran en diferentes directorios es necesario especificar la ruta completa a los scripts de mrtg. También se observó que desde php la salida de los scripts no puede ser observada, esto es un problema de compatibilidad entre perl y php en windows, el cual no soporta redirecciones de la salida estándar.



No hay comentarios:

Publicar un comentario