# mikroscope

Telemetría de kernel por debajo del segundo desde dentro de un router MikroTik, con el coste del observador medido y no prometido.

Source: https://docs.jmrp.io/mikroscope/es/

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

- [**2,69 %** — de un núcleo a 10 Hz, la cadencia por defecto](https://docs.jmrp.io/mikroscope/es/about/status/#campaign-rates-2026-09-18)
- [**13,2 MiB** — de memoria residente a 10 Hz](https://docs.jmrp.io/mikroscope/es/about/status/#campaign-rates-2026-09-18)
- [**16,83 %** — de un núcleo a 100 Hz, el máximo de la CLI](https://docs.jmrp.io/mikroscope/es/about/status/#campaign-rates-2026-09-18)
- [**0 / 0** — huecos y descartes, en seis ejecuciones](https://docs.jmrp.io/mikroscope/es/about/status/#campaign-rates-2026-09-18)

Las tres primeras salen del propio cgroup del agente, en cada muestra; la cuarta, de InfluxDB 3, el único destino al que reenviaba el colector. Cada una de las tres primeras es una sola ventana de 300 s en régimen estacionario, sin repetir, así que ninguna tiene dispersión. A 10 Hz la memoria está dentro de los ≤ 16 MiB que pide el presupuesto y la CPU por encima del ≤ 2 %. El router, la versión de RouterOS y la fecha están en [Probado en](https://docs.jmrp.io/mikroscope/es/about/status/#campaign-rates-2026-09-18).

## 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 %. No hay nada más fino que leer donde el kernel no tiene PSI ni schedstat, y el router probado no tiene ninguno de los dos ([Probado en](https://docs.jmrp.io/mikroscope/es/about/status/#campaign-kernel-2026-09-11)).

[Cuántos segundos promedia `cpu-load` →](https://docs.jmrp.io/mikroscope/es/sinks/api-tier/#cuántos-segundos-promedia-el-cpu-load-de-routeros)

## Lo que cuesta, a tres cadencias

Condiciones: ventanas de 300 s en régimen estacionario (con el anillo ya lleno), conjunto completo de fuentes, la configuración que se envía —anillo de 60 s, límite de memoria derivado de él y el tope de contenedor de serie de 64M— con el colector reenviando a InfluxDB 3. Cada fila es una sola ventana, sin repetir, así que ninguna fila tiene dispersión; la memoria cambia por fila porque cambian el anillo y el límite de memoria.

Las ejecuciones medidas:

| cadencia | suelos | CPU de un núcleo | µs/muestra | RSS | ticks retrasados | huecos / descartes |
| --- | --- | --- | --- | --- | --- | --- |
| 10 Hz (por defecto) | por defecto | **2,69 %** | 2 685 | 13,2 MiB | **0** | 0 / 0 |
| 50 Hz | por defecto | **9,63 %** | 1 926 | 23,3 MiB | **0** | 0 / 0 |
| 100 Hz | por defecto | **16,83 %** | 1 684 | 45,7 MiB | 5 (0,02 %) | 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,7 % de las muestras, dentro de un periodo de 10 ms.

[Las seis ejecuciones, incluida la de todas las fuentes en cada tick →](https://docs.jmrp.io/mikroscope/es/cost/rate-ceiling/)

## 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.

## Cada escritura, listada antes de hacerla

Versión actual: [1.6.1](https://github.com/jmrplens/mikroscope/releases/tag/v1.6.1), 2026-10-06 · [Registro de cambios](https://github.com/jmrplens/mikroscope/blob/main/CHANGELOG.md)

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 que nombra el arreglo de lo que falte, y luego lo que muestra el anillo del agente en marcha: un bucle de capa 2, churn de STP, un link flap o descartes de softnet.

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

- el manifiesto de la instalación, un fichero `mikroscope/<name>.manifest.txt` en el disco de la instalación que lista las opciones y cada objeto de abajo
- una veth
- una dirección
- una pertenencia a lista de interfaces, salvo con `--iface-list none`
- una entrada de address-list, salvo con `--addr-list none`
- una envlist
- el tar de la imagen, que se borra en cuanto el contenedor está extraído, salvo que `--remote-image` haga que el router se la baje
- el contenedor, y su raíz `mikroscope/<name>` en el mismo disco

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.

[Instalación rápida, paso a paso →](https://docs.jmrp.io/mikroscope/es/start/)

## Probado en

Las cifras de esta página salen de un solo router. [Probado en](https://docs.jmrp.io/mikroscope/es/about/status/) dice cuál, con las versiones de RouterOS, las fechas y las condiciones de cada ejecución.

También dice lo que no se ha probado: otras placas, un tráfico mayor que la carga corriente de ese router, y los destinos y las compilaciones que no han corrido en hardware. No se afirma ninguna cadencia en otra placa.

El coste depende de la velocidad del núcleo, del conjunto de fuentes y del tamaño del anillo. [Mídelo en tu propio router](https://docs.jmrp.io/mikroscope/es/cost/#medirlo-en-tu-propio-equipo) antes de presupuestarlo.

## Por dónde seguir

- [Instalación rápida](https://docs.jmrp.io/mikroscope/es/start/): Instala la CLI, comprueba el router y pon en marcha el agente en un contenedor de RouterOS
- [Cómo funciona](https://docs.jmrp.io/mikroscope/es/how-it-works/): El agente, el colector y el camino de los datos entre ellos, qué lee y qué añade cada uno, y lo que la herramienta no hace
- [Comparado con alternativas](https://docs.jmrp.io/mikroscope/es/start/compared/): Las otras formas de vigilar un equipo RouterOS, qué lee cada una y cuándo usar otra herramienta
- [Primera grabación](https://docs.jmrp.io/mikroscope/es/start/walkthrough/): Graba mientras cambias algo, márcalo y dibuja el gráfico
- [Métodos de instalación](https://docs.jmrp.io/mikroscope/es/install/routes/): Todas las maneras de llevar el agente a un router, y lo que necesita cada una
- [Ejecutar el colector](https://docs.jmrp.io/mikroscope/es/sinks/): Extraer, fusionar, derivar, repartir a once destinos, y por qué uno lento nunca para el bucle
- [Diagnosticar fallos](https://docs.jmrp.io/mikroscope/es/playbooks/): Qué aspecto tiene cada fallo en los datos del kernel y de los puertos, y qué comprobar antes de fiarte de una lectura
- [Límites de la evidencia](https://docs.jmrp.io/mikroscope/es/cost/limits/): Cada límite de las cifras de arriba
