Ir al contenido

mikroscope

La API de RouterOS informa de la carga de CPU una vez por segundo. mikroscope corre en el router, en un contenedor, y lee los contadores del propio kernel a entre 1 y 100 Hz: para quien tiene que contar qué hizo un equipo MikroTik dentro de ese segundo. Dos binarios con licencia MIT y lo que el observador le cuesta al router medido, no prometido, justo aquí abajo.

Medido, no presupuestado

Las tres primeras, desde el propio cgroup del agente y /metrics; la cuarta, desde los tres destinos a los que reenviaba el colector; en un RB5009 (4 × 1,4 GHz Cortex-A72, RouterOS 7.24.2), ventanas de 60 s en régimen estacionario, 2026-09-15. Las cifras a 10 Hz superan el presupuesto de ≤ 2 % y ≤ 16 MiB.

Una media de un segundo es un informe sobre un segundo

La API de RouterOS publica cpu-load una vez por segundo. Un núcleo saturado 100 ms y ocioso los otros 900 mueve la media de un segundo de cuatro núcleos en 2,5 %. Es aritmética, no una medida, y la cifra es cierta: solo que no puede decir cuándo.

El agente lee /proc/stat, /proc/interrupts, /proc/softirqs y /proc/net/softnet_stat desde dentro del router, a 10 Hz por defecto, y envía los deltas crudos de ticks con el intervalo que cubre cada uno. Nunca calcula un porcentaje; la ventana la eliges tú.

El suelo es del kernel, no de la herramienta. /proc/stat cuenta en ticks de 10 ms, así que una muestra de 100 ms resuelve un núcleo en escalones de 10 %. En el RB5009 (RouterOS 7.24.2, Linux 5.6.3) no hay PSI ni schedstat con los que afinar: ambos ficheros faltan, comprobado el 2026-09-11.

Lo que cuesta, a tres cadencias

Cada fila es una ventana de 60 s con el anillo ya lleno. La memoria cambia por fila porque cambian el anillo y el límite de memoria.

Medido en RB5009UG+S+ · 4 × 1,4 GHz Cortex-A72 · RouterOS 7.24.2 · · ventanas de 60 s en régimen estacionario (con el anillo ya lleno), conjunto completo de fuentes, colector reenviando a la vez a fichero, a una exposición Prometheus y a InfluxDB 3

Las ejecuciones medidas
cadenciasuelosCPU de un núcleoµs/muestraRSSticks retrasadoshuecos / descartes
10 Hz (por defecto)por defecto2,85 %2 85631,3 MiB00 / 0
50 Hzpor defecto10,13 %2 02651,9 MiB00 / 0
100 Hzpor defecto17,81 %1 78176,5 MiB5 (0,08 %)0 / 0

No se perdió nada a ninguna de estas cadencias: todos los destinos informaron de 0 huecos y 0 descartes, y la cadencia entregada coincidió con la configurada a tres cifras. Con los suelos por defecto y a 100 Hz, todas las fuentes de un tick se leyeron en menos de 2 ms en el 97,5 % de las muestras, dentro de un periodo de 10 ms.

Las cinco ejecuciones, incluida la de todas las fuentes en cada tick →

La CPU del router desde el kernel, sus interfaces desde la API

Capa del kernel · el agente · de 10 a 100 Hz

Globales dentro del contenedor, así que son los del propio router: ticks de CPU por núcleo, interrupciones, softirqs, descartes y time squeezes de softnet, /proc/meminfo, /proc/vmstat, carga y E/S de disco. Un contenedor privilegiado añade el log del kernel como eventos con marca de tiempo y las cachés slab globales.

Capa de la API · el colector · 1 Hz

El contenedor tiene su propio espacio de nombres de red, así que /proc/net/dev describe al contenedor, no al router. Los bytes y paquetes por interfaz vienen de la API de RouterOS y los fusiona el colector, sin interpolar. privileged=yes no cambia eso (comprobado el 2026-09-12).

Cada escritura, listada antes de hacerla

Descarga el archivo para tu plataforma de la versión publicada, o compila la CLI desde una copia del repositorio con make build. El router necesita RouterOS 7.24 o posterior —el paso del contenedor escribe privileged=, un atributo que las versiones 7.x anteriores rechazan— con el paquete container y device-mode container=yes, que MikroTik condiciona a pulsar el botón de reset o a un corte de alimentación. arm64, arm y x86_64; ni MIPS ni TILE.

  1. mikroscope doctor

    Comprobación de solo lectura; nombra el arreglo de lo que falte.

  2. mikroscope plan

    Cada orden de RouterOS, sin escribir nada.

  3. mikroscope install

    Doctor, confirmación, las escrituras y luego una sonda al agente. La imagen sale de tu propia toolchain de Go, del tar del agente publicado o del registro del que el router se la descarga.

  4. mikroscope status

    Recuento de propiedad y salud del agente.

  5. mikroscope uninstall

    Elimina y verifica.

Lo que install escribe en tu router

  • una veth
  • una dirección
  • una pertenencia a lista de interfaces
  • una entrada de address-list
  • una envlist
  • el tar de la imagen, salvo que --remote-image haga que el router se la baje
  • el contenedor

Cada objeto lleva el comentario mikroscope:<name> (managed by mikroscope)

mikroscope plan imprime cada orden antes de escribir nada.

uninstall elimina por etiqueta exacta más identidad, nunca por patrón, y falla nombrando el paso si queda algo.

Lo que no se afirma

Por dónde seguir