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

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

Cuántos segundos promedia cpu-load →

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
cadenciasuelosCPU de un núcleoµs/muestraRSSticks retrasadoshuecos / descartes
10 Hz (por defecto)por defecto2,69 %2 68513,2 MiB00 / 0
50 Hzpor defecto9,63 %1 92623,3 MiB00 / 0
100 Hzpor defecto16,83 %1 68445,7 MiB5 (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 →

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, · Registro de cambios

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 →

Probado en

Las cifras de esta página salen de un solo router. Probado en 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 antes de presupuestarlo.

Por dónde seguir