Almacenamiento y ajustes del contenedor
install pone el tar de la imagen, la raíz del contenedor y el manifiesto de la instalación en un
mismo disco, y crea el contenedor con los ajustes de abajo. Ejecuta mikroscope plan con tus
opciones para ver cada valor antes de que se escriba nada.
Valores por defecto
Sección titulada «Valores por defecto»| Objeto | Por defecto | Opción |
|---|---|---|
| veth + /30 | veth-mikroscope, 172.30.10.0/30 (router .1, agente .2) |
--veth, --subnet |
| dirección del router | 172.30.10.1/30 en la veth |
derivada de --subnet |
| manifiesto de la instalación | mikroscope/ en la flash interna |
--disk, --ephemeral |
| tar de la imagen | <name>.tar, subido con scp y borrado en cuanto se extrae la imagen; ninguno con --remote-image |
--disk, --ephemeral, --remote-image |
| raíz del contenedor | mikroscope/<name> en la flash interna |
--disk, --ephemeral |
| contenedor | sin name=: RouterOS le pone nombre |
--container-name |
| envlist | <name>-env |
--rate, --buffer, --port, --token, … |
| etiqueta | mikroscope:<name> (managed by mikroscope) en cada objeto que admite comentario; como MIKROSCOPE_TAG en la envlist |
--name, por defecto mikroscope |
Desliza en horizontal para ver todas las columnas
--subnetes una /30 IPv4 dada en su dirección de red; el router toma la.1y el agente la.2. Si172.30.10.0/30está en uso en tu router, elige otra:doctornombra la ruta que se solapa con ella.--namey--container-nameadmiten hasta 32 caracteres y--vethhasta 64: letras, dígitos,_,.y-, empezando por letra o dígito.--diskes un slot de disco de RouterOS: vacío para la flash interna,tmpfs,disk1,usb1y así sucesivamente. Con--disk, el manifiesto, el tar y la raíz se mueven juntos:<disk>/<name>.tary<disk>/mikroscope/<name>.- Todo borrado selecciona el contenedor por su etiqueta, no por su nombre.
doctor comprueba el espacio y el disco antes de que install escriba:
| Comprobación, tal como se imprime | Pasa cuando | La solución que nombra |
|---|---|---|
| free flash ≥ <size> (image tar + extracted root) | sin --disk ni --ephemeral: free-hdd-space es al menos el doble de la imagen más 4 MiB. Con --remote-image no se sube nada y el nombre acaba en (extracted root): la raíz en la que se extrae la imagen descargada, 7 MiB, más 4 MiB | libera flash, o instala con --disk tmpfs o --ephemeral donde exista un disco tmpfs |
| disk <disk> exists | con --disk o --ephemeral: existe un disco con ese slot | /disk/add type=tmpfs tmpfs-max-size=64M slot=tmpfs para un disco en RAM, o nombra un disco existente con --disk |
| disk <disk> has ≥ <size> free (image tar + extracted root) | con --disk o --ephemeral, cuando el disco existe: su espacio libre es al menos el doble de la imagen más 4 MiB; con --remote-image, la raíz de 7 MiB más 4 MiB, como en la comprobación de la flash | libera espacio en ese disco, o da a un disco tmpfs un tmpfs-max-size mayor |
| disk tmpfs is RAM | con --ephemeral: el disco del slot tmpfs es de tipo tmpfs | libera el slot para un disco tmpfs, o instala con --disk <slot> sin --ephemeral |
| start-on-boot suits a root in RAM | un aviso, cuando el disco es tmpfs: start-on-boot queda en no, porque un reinicio vacía el disco y un contenedor que arranca con el equipo no tiene raíz | pasa --start-on-boot no, o --ephemeral |
Desliza en horizontal para ver todas las columnas
Persistente o efímera
Sección titulada «Persistente o efímera»| Por defecto | --disk tmpfs |
--ephemeral |
|
|---|---|---|---|
| Manifiesto, tar y raíz | flash interna | el disco tmpfs | el disco tmpfs |
start-on-boot |
yes |
yes; doctor avisa |
no |
| Escrituras en flash | el tar y la raíz | ninguna para el tar y la raíz | ninguna |
| Tras un reinicio | el agente vuelve a arrancar | la raíz desaparece, y un contenedor que arranca con el equipo no tiene ninguna | el contenedor está parado, sin raíz, imagen ni manifiesto |
Desliza en horizontal para ver todas las columnas
-
Persistente es lo predeterminado: la raíz en la flash interna,
start-on-boot=yesyrestart-policy=on-failurelimitado a cinco reinicios separados diez segundos, para que una imagen rota no entre en bucle al arrancar. -
--ephemeralpone el manifiesto, el tar y la raíz en el disco del slottmpfs, que tiene que ser un disco en RAM, y fijastart-on-boot=no. No se escribe nada en la flash (medido), y nada sobrevive a un reinicio. Un router sin ese disco no pasadoctor, cuya solución añade uno:/disk/add type=tmpfs tmpfs-max-size=64M slot=tmpfs -
--disk tmpfssin--ephemeralpone los mismos ficheros en el disco tmpfs y mantienestart-on-boot=yes, de lo quedoctoravisa. Añade--start-on-boot no, o usa--ephemeral.
Tras un reinicio, el contenedor de una instalación --ephemeral sigue configurado y parado, y su
manifiesto se fue con el disco (probado).
uninstall --ephemeral quita el resto por su etiqueta.
Ajustes del contenedor
Sección titulada «Ajustes del contenedor»| Ajuste | Valor | Opción |
|---|---|---|
name= |
no se escribe, así que RouterOS le pone nombre al contenedor | --container-name |
file= o remote-image= |
el tar subido, o la referencia entera, con el host del registro incluido | --agent-tar, --remote-image |
interface= |
la veth | --veth |
root-dir= |
mikroscope/<name> en el disco |
--disk, --ephemeral, --name |
envlist= |
<name>-env |
--name |
logging= |
yes, para que lo que imprime el agente llegue al log del router |
ninguna |
start-on-boot= |
yes; no con --ephemeral |
--start-on-boot: auto, yes o no |
restart-policy= |
on-failure |
ninguna |
restart-max-count= |
5 |
--restart-max-count, 0–100 |
restart-interval= |
10s |
--restart-interval, ^\d{1,4}[smh]$ |
memory-max= |
64M, aplicado como límite del cgroup del contenedor |
--memory-max |
privileged= |
yes |
--privileged=false |
ignore-remote-image-change= |
yes |
ninguna |
comment= |
la etiqueta | --name |
Desliza en horizontal para ver todas las columnas
--start-on-boot autoesnocon--ephemeralyyesen otro caso.privileged=yesquita el espacio de nombres de usuario del contenedor, para que el log del kernel,/proc/slabinfoy los contadores ECC de la MTD se puedan leer. No amplía el espacio de nombres de red ni el de PID; Modo privilegiado tiene el detalle.- El agente captura SIGTERM; RouterOS mata al instante un contenedor que no lo hace. El agente se detiene dentro del tiempo de parada por defecto de RouterOS, 10 s.
Limpieza del tar
Sección titulada «Limpieza del tar»RouterOS extrae la imagen cuando se añade el contenedor, y después el tar ya no sirve para nada. En
la vía del tar, install:
- añade el contenedor;
- espera a que RouterOS lo marque
stopped, que es cuando termina la extracción, hasta--extract-timeout(por defecto120s, de 10 a 600 s); - borra el tar;
- arranca el contenedor.
Si se agota el tiempo, se detiene con mikroscope: the image was not extracted within 120 s; mikroscope.tar stays. El tar se queda con el contenedor, y uninstall quita los dos juntos. Un tar
olvidado sería lo que uninstall tendría que encontrar después, en un índice de /file que puede ir
minutos por detrás del borrado de un contenedor.
El contenedor se crea con ignore-remote-image-change=yes. Con no, RouterOS vigila la imagen, y
quitar el tar hace que pare, quite y vuelva a extraer el contenedor minutos después
(verificado).
Hasta que se borra el tar, este y la raíz extraída de él comparten disco, así que doctor pide el
doble de la imagen más 4 MiB. Con --remote-image no se sube nada: RouterOS se baja las capas, no
hay tar al que esperar ni que borrar, y doctor pide la raíz extraída, 7 MiB, más 4 MiB. La raíz
sigue yendo donde digan --disk y --ephemeral.
Manifiesto de la instalación
Sección titulada «Manifiesto de la instalación»install escribe primero el manifiesto de la instalación, mikroscope/ junto a
la raíz del contenedor, y uninstall lo borra al final. Recoge cómo se hizo la instalación y cada
objeto que creó:
mikroscope-manifest=1name=mikroscopetag=mikroscope:mikroscope (managed by mikroscope)disk=veth=veth-mikroscopesubnet=172.30.10.0/30port=9123iface-list=LANaddr-list=LANsexpose=container-name=remote-image=registry-1.docker.io/jmrplens/mikroscope-agent:1.6.1token=nodir=mikroscopefile=mikroscope/mikroscope.manifest.txtobject=/interface/veth name=veth-mikroscopeobject=/ip/address interface=veth-mikroscopeobject=/interface/list/member interface=veth-mikroscope list=LANobject=/ip/firewall/address-list list=LANs address=172.30.10.0/30object=/container/envs list=mikroscope-envobject=/container interface=veth-mikroscopedir=mikroscope/mikroscope- Las líneas de cabecera son la forma de la instalación, con los nombres de las opciones de la CLI.
status,upgradeyuninstalllas leen, así que no necesitan ninguna opción de forma, y rechazan la que las contradiga. token=dice solo si se puso un token, nunca su valor. El manifiesto no guarda ningún secreto.dir=,file=yobject=enumeran lo que creó la instalación, en orden de creación: una ruta, o un menú y un selector que, con la etiqueta, selecciona el objeto.- Lo escriben todas las vías de instalación:
installyupgradede la CLI, y el script deplan --rsc. - Una instalación sin manifiesto, hecha por una CLI anterior o una
--ephemeraltras un reinicio, se lee de sus objetos etiquetados.
Contenido de la envlist
Sección titulada «Contenido de la envlist»La envlist guarda la configuración del agente y la marca de propiedad, y nada más:
| Clave | Se escribe | Viene de | Contiene |
|---|---|---|---|
MIKROSCOPE_TAG | siempre | --name | la marca de propiedad mikroscope:<name> (managed by mikroscope), que se escribe la primera y se borra la última; el agente la ignora |
RATE_HZ | siempre | --rate, por defecto 10, 1–100 | la cadencia del muestreador, en Hz |
BUFFER_S | siempre | --buffer, por defecto 60, 10–3600 | la longitud del anillo, en segundos |
PORT | siempre | --port, por defecto 9123, 1–65535 | el puerto HTTP del agente |
ADDR | siempre | --subnet | la dirección del agente, la .2 de la /30; el agente solo escucha ahí |
MEM_LIMIT_MB | siempre | --mem-limit-mb, 8–1024 | el límite blando de memoria de Go del agente, en MiB; se deriva del anillo (cadencia × búfer × línea, × 2,5, con un mínimo de 16 MiB y un máximo de tres cuartos de --memory-max mientras en él aún quepa el anillo) salvo que lo fije --mem-limit-mb |
FLOOR_HZ | solo cuando es mayor que 0 | --floor-hz, por defecto 0, 0–1000 | una sola cadencia para todas las fuentes de nivel, en Hz |
CAPTURE_MB | siempre | --capture-mb, por defecto 4, 0–256 | el presupuesto de capturas por disparo, en MiB; 0 las desactiva |
TRIGGERS | solo cuando se da | --triggers | las condiciones de disparo; sin ella, el agente usa su conjunto por defecto |
TOKEN | solo cuando se da | --token | el token bearer que exige el agente, de --token o MIKROSCOPE_TOKEN, con o sin --expose |
Desliza en horizontal para ver todas las columnas
No va en ella ninguna dirección de destino, ningún token de destino ni ninguna credencial de la API.
Trata todo lo que contiene, el token incluido, como legible por cualquier usuario de RouterOS con
read: un usuario así puede listar la envlist de cualquier contenedor por la API
(verificado). El plan imprime el token enmascarado como
(token). Modelo de seguridad dice qué credencial vive dónde, y
Variables de entorno enumera las variables que lee el agente
además de estas.
Tamaño de la memoria
Sección titulada «Tamaño de la memoria»Mueve --memory-max y --mem-limit-mb con --rate y --buffer:
- El anillo guarda
rate × bufferlíneas de unos 3,5 kB cada una. - El límite blando de Go quiere más o menos el doble del anillo y tiene que quedar holgadamente por
debajo de
memory-max.--mem-limit-mb 0, el valor por defecto, lo deriva: 16 MiB para 10 Hz y un anillo de 60 s bajo64M. - La comprobación de arranque del agente cuenta 3 456 B por línea
más
--capture-mb. Por encima dememory-maxse niega a arrancar; por encima de la mitad de--mem-limit-mbavisa.
Los valores por defecto aguantaron a 10, 50 y 100 Hz: --buffer 60, el --mem-limit-mb derivado y
--memory-max 64M (medido). Lo que cuesta un límite
ajustado está en Coste del agente, y cada cadencia en Techo de
muestreo.