# Primera grabación

Graba el kernel del router mientras cambias algo, marca los momentos, añade el log del propio router y dibújalo como un solo gráfico.

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

Graba el kernel del router mientras cambias algo en él, y lee en un solo gráfico qué hizo el
cambio. Para esto hace falta un agente ya instalado:
[Instalación rápida](https://docs.jmrp.io/mikroscope/es/start/) pone uno.

## Antes de empezar

- `mikroscope status --router admin@192.168.88.1` imprime una línea `agent:`. Las órdenes de abajo
  llegan al agente en su dirección por defecto, `172.30.10.2:9123`; pasa `--subnet` y `--port` si
  instalaste con otras.
- Para el paso 3, un usuario de la API de RouterOS con acceso de lectura.
  [Usuario de la API](https://docs.jmrp.io/mikroscope/es/security/api-user/) tiene las dos órdenes que lo crean.

El paso 3 lee tres variables de entorno:

| Variable                  | Opción       |
| ------------------------- | ------------ |
| `MIKROSCOPE_API_ADDR`     | `--api`      |
| `MIKROSCOPE_API_USER`     | `--api-user` |
| `MIKROSCOPE_API_PASSWORD` | ninguna      |

La contraseña no tiene opción, así que no aparece en `ps` ni en el historial de tu shell. La CLI no
lee `.env` por su cuenta: exporta las variables, o copia [`.env.example`](https://github.com/jmrplens/mikroscope/blob/main/.env.example) a `.env` y
cárgalo con `set -a; . ./.env; set +a`.
[Variables de entorno](https://docs.jmrp.io/mikroscope/es/reference/environment/) enumera todas.

## Pasos

1. **Graba mientras haces el cambio.**

   ```sh
   mikroscope record --for 60s --out burst
   ```

   En un terminal, escribe una línea y pulsa Intro en cualquier momento que quieras recordar: se
   convierte en una marca con el reloj del agente. La CLI lo dice al arrancar:
   `type a line and press Enter to add a marker; Ctrl-C stops`. Sin `--for` graba hasta Ctrl-C.
   Al terminar imprime lo que escribió:

   ```text
   recorded 600 samples (seq 11..610), 0 gap(s), 0 marker(s), via direct http://172.30.10.2:9123
     burst.jsonl
     burst.csv
     burst.markers.csv
     burst.meta.json
   ```

   El resumen cuenta las marcas escritas en el propio `record`, y nombra cualquier tramo de
   muestras que ya hubiera salido del anillo del agente.

2. **Marca desde otro terminal.**

   ```sh
   mikroscope mark --out burst "queue tree applied"
   ```

   Imprime `marker added to burst.markers.csv at <time>`. `mark` añade al mismo fichero mientras
   `record` sigue, y también funciona después de la grabación.

3. **Añade el log del propio router.**

   ```sh
   export MIKROSCOPE_API_ADDR=192.168.88.1:8728 MIKROSCOPE_API_USER=mikroscope MIKROSCOPE_API_PASSWORD=…
   mikroscope mark --out burst --log-markers --router-tz Europe/Madrid
   ```

   Cada línea del log dentro de la ventana de la grabación cuyo tema sea `system`, `interface` o
   `container` se convierte en una marca:

   ```text
   7 log marker(s) added to burst.markers.csv (window <start> → <end>, topics system,interface,container)
   ```

   Añade `firewall` o `script` con `--topics`. `--router-tz` es la zona IANA que muestra el reloj
   del router, porque las horas del log de RouterOS no llevan zona; por defecto es la de tu
   máquina. `record --log-markers` hace lo mismo al acabar la grabación.

4. **Dibújalo.**

   ```sh
   mikroscope plot --in burst
   ```

   Escribe `burst.svg` e imprime `burst.svg: 600 samples, 10 markers`. `--title` fija el título y
   `--svg` otra ruta. La misma grabación da siempre los mismos bytes.

5. **Sigue recogiendo (opcional).** Para guardar las muestras y no solo una ventana,
   [ejecuta el colector](https://docs.jmrp.io/mikroscope/es/sinks/) hacia Prometheus, InfluxDB 3 u otro destino; con
   `--grafana` también publica el dashboard
   ([Configurar en Grafana](https://docs.jmrp.io/mikroscope/es/dashboards/import-and-check/)).

## Leer el gráfico

El gráfico tiene tres paneles sobre un mismo eje de tiempo:

- **Ocupación por núcleo.** La parte de cada tick de 100 ms que un núcleo pasó trabajando. Una
  muestra de un núcleo al 100 % son 100 ms de trabajo, y mueve una media de cuatro núcleos y un
  segundo solo 2,5 %: las excursiones cortas que una media esconde
  son el motivo de muestrear a 10 Hz.
- **softnet, por segundo.** `dropped` cuenta los paquetes que el kernel perdió de su cola, que
  ningún contador de interfaz muestra; `time_squeeze` cuenta las veces que el kernel se contuvo. Un
  squeeze por sí solo no es una avería.
- **Memoria disponible.** Lo que el kernel podría entregar sin recurrir al swap.

Cada marca es una línea vertical discontinua, dibujada en todos los paneles, con su etiqueta al
lado. Las marcas del log que caen en el mismo segundo se funden en una línea etiquetada `N×` con el
primer mensaje. Un hueco en las muestras es una línea roja. Una etiqueta de más de 40 caracteres se
corta a 37 y unos puntos suspensivos.

[Línea base en reposo](https://docs.jmrp.io/mikroscope/es/playbooks/idle/#gráfico-grabado) lee línea a línea una grabación real de un
router en reposo, la forma con la que se comparan las demás, y
[Diagnosticar fallos](https://docs.jmrp.io/mikroscope/es/playbooks/) tiene las firmas que deja una avería en estos
paneles.

## Quitar el agente

```sh
mikroscope uninstall --router admin@192.168.88.1 --yes
```

Retira cada objeto que creó la instalación, leyendo la lista del manifiesto de la instalación en el
router, y termina con `verified: nothing mikroscope created remains on the router`. Sin `--yes`
solo los enumera. [Actualizar y desinstalar](https://docs.jmrp.io/mikroscope/es/install/upgrade/) tiene lo que nunca
toca, y cómo quitar dashboards y datos guardados.

> **ssh no es una ruta de datos**
>
> `record`, `mark` y `plot` nunca usan ssh: las muestras viajan por HTTP a la dirección de la veth,
> o por el relé de la API de RouterOS. Solo las órdenes de instalación se conectan por ssh, una
> conexión por cada lote de lecturas.

## Véase también

- [Grabar, marcar y dibujar](https://docs.jmrp.io/mikroscope/es/record/): los ficheros, los transportes y las marcas al
  completo.
- [Captura por disparo](https://docs.jmrp.io/mikroscope/es/record/triggers/): deja que el agente guarde por ti los
  segundos alrededor de una avería.
- [Ejecutar el colector](https://docs.jmrp.io/mikroscope/es/sinks/): lo que fusiona `forward` y adónde lo envía.
- [Diagnosticar fallos](https://docs.jmrp.io/mikroscope/es/playbooks/): las firmas que deja una avería en estos
  paneles.
