Ir al contenido

Qué es

mikroscope son dos programas y un contenedor.

El agente es un binario Go estático en un contenedor scratch dentro del router. Un contenedor de RouterOS comparte el kernel del anfitrión, así que el /proc de dentro es el /proc del propio router: /proc/stat por núcleo, /proc/interrupts, /proc/softirqs, /proc/net/softnet_stat, /proc/meminfo, /proc/vmstat, /proc/diskstats, /dev/kmsg. Los muestrea con un temporizador de 1 a 100 Hz (10 Hz por defecto; medidos a 10, 50 y 100 Hz), guarda los últimos 300 segundos en un anillo y los sirve. No tiene conexión saliente ni presenta ninguna credencial; el único secreto que guarda es el token opcional que exige a quien lo lea.

La CLI corre en tu máquina. Instala y desinstala el agente, graba una ventana con marcadores, dibuja un SVG determinista de ella, y funciona como colector que tira del agente, fusiona una capa de la API de RouterOS a 1 Hz y reparte a fichero, Prometheus e InfluxDB 3. Se publica como un archivo por plataforma —linux, macOS, Windows y FreeBSD en amd64, arm64 y arm— y el agente a su lado como un tar de imagen por arquitectura y como imagen de registro, en Docker Hub como jmrplens/mikroscope-agent y en GHCR como ghcr.io/jmrplens/mikroscope-agent, así que instalar solo necesita una toolchain de Go cuando quieres el agente construido desde tu propio árbol.

  1. Los requisitos que la herramienta no puede quitar. RouterOS 7.24 o posterior con el paquete container y device-mode container=yes — que MikroTik protege tras una pulsación física del botón de reset o un ciclo de alimentación. El suelo es 7.24 porque el paso del contenedor escribe privileged=, un atributo que MikroTik añadió en esa versión; --privileged=false cambia su valor, no si se escribe. arm64, arm y x86_64; ni MIPS ni TILE.

  2. El suelo de resolución es el del kernel, no el de la herramienta. /proc/stat avanza a 100 Hz, así que una ventana de 100 ms resuelve un núcleo en escalones del 10 %. El agente envía ticks crudos para que la ventana la elijas tú. No esperes PSI: el kernel del RB5009 no tiene ni PSI ni schedstat.

    Medido en RB5009UG+S+ · 4 × 1,4 GHz Cortex-A72 · RouterOS 7.24.2 · Linux 5.6.3 · · /proc/pressure y /proc/schedstat ausentes

  3. El contenedor ve la CPU y la memoria del router, pero su propia red. /proc/net/dev, /proc/net/snmp y nf_conntrack_count son por espacio de nombres de red y describen el contenedor; la cuenta de conntrack del slab con privileged es la excepción, y describe el router. Los contadores de interfaz vienen de la API de RouterOS y se fusionan, no se inventan.

  4. El observador cuesta algo, y está escrito. Un 2,85 % de un núcleo a 10 Hz en un RB5009, un 17,81 % a 100 Hz. Lo que cuesta tiene la tabla completa y sus condiciones. Todas las cifras de este sitio salen de ese único equipo, un RB5009UG+S+ con RouterOS 7.24.2, arm64: las compilaciones para arm y x86_64 son cruzadas y pasan por CI, pero no han corrido nunca en hardware.

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.

No sustituye a la API de RouterOS: se fusiona con ella. No afirma un número que no haya medido: donde una fuente no existe en una placa, la métrica falta en vez de valer cero. Y no decide por ti qué significa un porcentaje, porque nunca calcula ninguno.