API MIKROTIK – Graficar el trafico de nuestros clientes y mostrar el log


Hola viejos amigos!. Algo que me han preguntado bastante es como hacer que el cliente o nosotros mismos veamos las graficas de consumo con el API de Mikrotik. Y para su sorpresa les cuento que esta parte se hace sin el API.

Estudiemos la ruta que nos da mikortik para ver el graph de un cliente:

Nota: Comprobar que en /tools/graphing  este graficando todos los queues.

http://200.20.30.40:8080/graphs/queue/%3Cpppoe-fduckardt52104%3E/

OK como veran.. aqui pueden haber 3 datos variables:

  1. La direccion IP del RouterOS.
  2. El puerto de www (/ip/services).
  3. El nombre del pppoe: fduckardt52104

Si Inspeccionamos el código de esta imagen con en el navegador veremos que solo se agrega /daily.gif al final de la URL quedando así:

http://200.20.30.40:8080/graphs/queue/%3Cpppoe-fduckardt52104%3E/daily.gif

consumo_cliente

Hagamoslo mas interesante:
Ahora que ya sabemos la ruta exacta de cada gráfica (no tuvimos que usar el api), es cuestión de armar esto con PHP, pero para que sea un poco mas interesante vamos dale uso del API para hacer que si el usuario pppoe esta activo, mostramos el Graph usando la ruta anterior, pero si no esta conectado, mostramos el log del usuario. Para ello vamos a armar un buscador de usuarios activos.

Si el usuario esta desconectado.

Si el usuario esta desconectado.

Si el usuario esta activo

Si el usuario esta activo

Archivos importantes:

  • log.php: Este es el archivo raiz principal, aquí esta el formulario y los contenedores desde donde se carga el JS, estilos, etc. Ademas, en este archivo debemos modificar las variables de Session.
<!--
////////////////////////////////////////////////////////////////////
// ESTE EJEMPLO SE DESCARGO DE www.tech-nico.com ///////////////////
// Creado por: Nicolas Daitsch. Guatrache. La Pampa ////////////////
// Contacto: administracion@tech-nico.com //////////////////////////
// RouterOS API: Busco Usuario PPPoE activo y muestro Graph o Log //
////////////////////////////////////////////////////////////////////
-->
<?php
session_start();
$_SESSION['api_ip'] ="192.168.0.1"; // Tu RouterOS
$_SESSION['api_user'] ="tu_usuario";
$_SESSION['api_pass'] ="tu_password";
$_SESSION['api_port'] =8728;
$_SESSION['www_port'] =80;
?>

Desde este archivo se configura todo!!. Solo tienes que modificar las variables que están justo aquí arriba en el archivo log.php.
Si sigues mirando un poco mas abajo de los seteos veras que en esta ocasión estoy usando el framework de Mootools, aunque por el poquito código que estamos usando tranquilamente podríamos hacerlo todo con javascript (ajax).  Lo dejo a tu criterio.

  •  api/isonline_soporte.php: Este archivo se ocupa de conectarse mediante el API, a tu servidor Mikrotik. Chequea si el usuario esta activo y muestra la grafica en una etiqueta IMG. Miren el código porque esta muy fácil de entender.
  • api/log.php: Este codigo trae todo el log y filtra por nombre de secret para mostrarte solo por usuario.

Importante: para buscar tienes que escribir el nombre exacto del secret. Y luego presionar la tecla Enter.

Buscar Secret con el API de Mikrotik.

Buscar Secret con el API de Mikrotik.

Espero que te haya gustado, puedes probar, investigar mi código y ademas modificarlo, pero asegúrate de no quitar las lineas del autor.

Descarga aqui el codigo de este ejemplo

Este post fue escrito por Nicolas. Primero en tech-nico.com/blog

23 comentarios en “API MIKROTIK – Graficar el trafico de nuestros clientes y mostrar el log

  1. Muy buen aporte.
    Estoy implementando algo parecido a lo que has posteado, la unica diferencia es que quiero hacerlo a tiempo real.

    Ahora mismo estoy algo atascado. He conseguido obtener los datos para la grafica.

    @$ARRAY = $API->comm(«/queue/simple/print
    =stats=»);

    $regtable = $ARRAY[12];
    $rate = $regtable[‘rate’];
    $updo = explode(‘/’,$rate);
    $up = $updo[0];
    $down = $updo[1];
    echo »;
    echo $up. ‘ ‘ ;
    echo $down ;
    echo »;

  2. OK, Yo tomaria el rate de cada interfaz y no del queue simple porque tiene un pequeño delay. Un gran saludo.! Nico

  3. Gracias por el aporte!
    en mi caso no uso queues simples, uso hotspot y queues tree+ pcq, hay forma de que pueda ver los graficos ?

  4. Si Laura, Mikrotik grafica solo interfaces o Queues Simples. Lo que yo haría en tu caso es generar un queue manual con la IP del cliente. (1 queue por cliente) y con un limite «data-rate» alto, supongamos 100 Mb cosa que no te encole a ningun cliente y simplemente grafique el trafico de navegacion. Recuerda que tienes que activar las graficas dentro del menu «Tools».
    Busca otro post que dice «API MIKROTIK – Crear queues simples con PHP (con validacion)». Saludos. Nico

  5. Hola buen día, viendo tu módulo de consulta (muy interesante, al aplicarlo me indica Undefined offset, me puedes indicar porque ocurre esto?

  6. Hola buen dia. Estoy utilizando hotspot. Requiero de logear y pueda ver una estadística: cuanta gente se conecta a navegar y ver cuánto MB fue lo que ésta consumio. Tengo un trabajo que podría ser bien remunerado. daniel.jorquera.j@gmail.com

  7. Muy buena la API tengo una pregunta si quisiera guardar las graficas de todos mis usuarios para poder consultarlas en cualquier momento tendiendo el historico con esta API se puede??

  8. Si se puede (con este ejemplo podrias guardar en mysql) pero vas a generar muchas peticiones de API cada X tiempo y a la base de datos. Es innecesario!! (imaginate que por cada cliente deberias tener un cron ejecutandose). Mikrotik RouterOS ya hace ese trabajo. Simplemente vas a Tools y en graphs le activas que grabe en disco asi no se borran al reiniciar.
    Para cada cliente vas a poder acceder a las graficas de cada queue. Saludos.

  9. nico consulta, el formulario funciona bien, pero tengo un problema, en unos de los mk que tengo los pppoe estan por nombre de lote y barrio, por ejemplo t-1 veo que la busqueda con funciona si esta con limitacion de caracter – podras decirme como se puede solucionar? desde ya muchas gracias

  10. Silvio, en la linea 17 del archivo /api/isonline_soporte.php tenes que agregar el «-» dentro de la expresion regular.
    Reemplazala por esto y proba nuevamente:

    	if (preg_match("/^([0-9a-zA-Z\@.-]){1,36}$/", $cadena,$resultado)){
    
  11. muchas gracias funciono de maravilla, lo modifique un poco para que me muestre la ip y el uptime debajo de conectado, lo que no logro hacer es tomar la ip que encuentra y asociarla a un formulario de ping, tendras una idea de como hacerlo? osea la idea es busco cliente. me muestra conectado, el grafico etc, y tener un boton que diga ping y al hacerle click me pase al form que publicaste en el blog pero tomando ya la ip

  12. Notice: Undefined index: name in C:\xampp\htdocs\api\log.php on line 45

    Notice: Undefined variable: receiveddone in C:\xampp\htdocs\api\api_mt_include2.php on line 301

    Intento implementar la solución y me arroja esos errores, sin embargo, muestra el contenido del archivo log del mk.
    Ojala puedas ayudarme.

  13. hola

    disculpa, si el usuario pppoe se descoencta, puedo tener un historial de grafica? o la grafica solo se veria desde que se vuelva a conectar?

    gracias

  14. Esse codigo é para ser adicionado dentro do mikrotik ? Caso não onde adiciono para conseguir poder usar ?

  15. Hola men, creo que el script dejo de funcionar en versiones recientes de la API, me esta tirando error del mootools

  16. Hola yo quiero monitorear una insterface tanto Tx rate y Rx rate y que cuando supero el 80% del trafico me envie un mail, con esto lo podria hacer?

  17. Estimado, buenas tardes! necesito guardar el historico de cada pppoe, actualmente cuando la conexion pppoe se interrumpe, la grafica se pierde. Como puedo lograr guardar las graficas??

  18. Seteando en RouterOS Queues estaticas en vez de dinamicas y configurando las graphs para que se almacenen en disco.

  19. Hola gente…. necesito ayuda….. quiero ver desde php, el rate de una placa, interface de un mikrotik para controlar si esta en 10gbps o 100 o 1gbps y no logro hacerlo. Desde mkt es ; put ([/interface ethernet monitor ether1 once as-value]->»rate»)

Deja un comentario