Ir al contenido

Blog ·

Un libro mayor que cuenta antes del precio

La monitorización produce una cifra por comprobación mucho antes de que exista un precio. Así se construyó primero el recuento, y por qué ese orden protege.

Por Provibr

La monitorización no tiene precio. Ni importe, ni moneda, ni plan, ni línea de factura. Lo que sí hay, desde esta ronda, es un libro mayor que registra cada comprobación que la plataforma envió realmente, la conserva trece meses y cierra cada hora en un cubo que ya no se modifica nunca más.

Construir el recuento antes del cobro parece el orden equivocado hasta que se ha hecho al revés una vez. Un contador que nace junto a una factura hereda toda comodidad que esa factura desee: un reintento que se suma en silencio porque si no el total quedaba raro, una corrección aplicada editando la fila. Son decisiones, y resultan más fáciles de tomar bien cuando ningún total depende de ellas.

Así que el libro mayor existe, no contiene dinero, y una de sus columnas está deliberadamente vacía.

Cuenta lo que salió de verdad

Una comprobación programada recorre unos pocos estados, y el libro mayor plantea una sola pregunta por estado: si salió tráfico del edificio. Eso está escrito como tabla sobre todos los desenlaces y no como una bifurcación con rama por defecto, porque una rama por defecto es justo el camino por el que un séptimo desenlace pasa a «no cuenta» en silencio y falta un mes.

DesenlaceFila escritaCuentaMotivo
programadononola ranura está reservada, todavía no se ha enviado nada
reclamadononoreclamado pero no enviado; la fila nace en el envío
enviadosísíuna comprobación salió realmente
completadosísíterminado; ya obtuvo su fila al enviarse
perdidonononunca se envió: sin agente, sin sonda sana, mantenimiento o ranura vencida
caducadononoel plazo venció sin que saliera nada

Dos de esas filas merecen una frase propia.

Una comprobación que alcanza una máquina muerta cuenta igual. Hubo tráfico y hubo medición; que la respuesta sea «caída» es el resultado y no la pregunta. Una regla que solo contara comprobaciones exitosas cobraría menos precisamente a los clientes por los que más se trabaja.

Y «caducado» es más sutil de lo que parece, porque una petición puede caducar después de haberse enviado. No se cuenta dos veces, y no por suerte: un tic llega a ese estado únicamente por el barrido que toca los tics que nunca superaron el paso de envío, y lo que sí salió ya constaba como enviado y tiene su fila desde entonces.

La clase de origen, la sonda propia o el agente del cliente, figura en la fila y en la firma de la función que decide. Hoy ambas cuentan igual, y precisamente por eso la clase queda escrita en lugar de darse por supuesta.

Un tic, una fila

La conmutación por error es el caso que infla una cifra de uso en silencio. Una comprobación se lanza desde un origen, ese origen no responde, otro toma el relevo, y ahora hay dos intentos para una sola medición.

Aquí eso es un índice único sobre una clave con la forma tick:<identificador del tic>. Los reintentos y las conmutaciones dentro del mismo tic producen la misma clave, de modo que la segunda inserción colisiona y no devuelve nada. Ambos caminos de escritura lo hacen así; ninguno consulta antes, porque entre una consulta y una inserción cabe una segunda pasarela.

La clave es una columna de texto y no la referencia al tic, y ahí está lo interesante. Los tics viven siete días; el uso, trece meses. Cuando el barrido retira el tic, esa referencia queda vacía, y en Postgres un valor vacío nunca es igual a otro valor vacío, así que un índice único sobre esa columna empezaría a permitir duplicados en silencio una semana después.

Una prueba manual también es tráfico

Hay un botón que ejecuta una comprobación de inmediato. No cuenta, y aun así queda registrado.

Ambas mitades importan. No cuenta porque una persona pulsando un botón no es el servicio programado. Queda registrado porque sigue siendo tráfico hacia la máquina de alguien, y mil pulsaciones por hora son exactamente lo que un sistema de uso debe poder mostrar. Una segunda tabla que ningún informe consulta escondería justo el caso en el que la cifra resulta interesante.

Lo que separa a ambas no es una convención sino una restricción en la base de datos: una fila de tipo manual no puede contar ni llevar tic. «Manual y contable» no puede existir, y eso importa porque una fila así parece perfectamente normal en cualquier informe.

Una hora cierra tarde, y después ya no cambia

Los cubos van por organización, hora, clase de origen y tipo de comprobación. Una hora solo se cierra cuando han pasado quince minutos de la hora siguiente.

El motivo evidente, un resultado de medición tardío, no es el real; los resultados no tocan el total. Lo que sí puede llegar tarde es la propia fila: una transacción que confirma a las 10:59:59 se vuelve visible a las 11:00:00, varias pasarelas leen cada una su reloj, y una que estuvo ausente un rato recupera su retraso después. Quince minutos es un orden de magnitud más que todo lo que una comprobación puede durar, donde el tiempo máximo de espera es de 120 segundos y la reserva de 45.

Una vez cerrada, una hora no se edita. Un evento tardío produce una fila nueva que apunta a la fila base con un motivo legible por máquina, jamás una modificación. Eso lo impone la forma y no la disciplina: el índice único sobre organización, hora, clase de origen y tipo es parcial y solo cubre las filas que no son correcciones, de modo que una segunda corrección sobre la misma hora no choca con la primera ni desaparece. Si las correcciones compartieran ese índice, se perdería exactamente la prueba que hace falta en una discrepancia. El motivo en sí es una palabra y no una frase libre, porque el panel lo traduce a nueve idiomas y una exportación agrupa por él.

Límites que no son una lista de precios

Cada organización tiene un margen permitido, y cada cifra dentro de él se eligió para frenar un accidente, no para describir un paquete.

Como mucho 200 reglas, deliberadamente la misma cifra que la acción de creación ya imponía: un valor por defecto más bajo habría empujado cuentas existentes por encima de su límite el primer día y habría disparado la regla de pausa de más abajo sin aviso. Como mucho 9 orígenes por regla, es decir las ocho ubicaciones alojadas más un agente que el esquema ya permitía. Todos los tipos de comprobación conocidos, derivados de esa lista en lugar de enumerados a mano, para que un séptimo tipo no quede prohibido por defecto para todo el mundo. Un suelo de 60 segundos, que un margen puede subir y nunca bajar; bajarlo es un derecho de pago aparte que tiene nombre y no existe.

El número de revisión de esa fila es lo que acaba en el libro mayor, y cero significa «no hay fila, esto es el valor por defecto». Sin esa distinción, una fila de uso del año pasado no se puede vincular a lo que estaba permitido entonces, que es justamente para lo que se guarda una revisión.

Qué se pausa cuando el margen se reduce

Si alguien reduce un margen por debajo de lo que una cuenta utiliza, algunas reglas se detienen. Cuáles es una decisión, y había dos candidatas.

Primero las más caras no es viable, porque no hay precio. Supondría deducir lo caro del número de orígenes o del intervalo, y entonces se pausa precisamente la vigilancia más fina que tiene el cliente. Quien reduce su plan prefiere perder una medición periférica antes que el aviso que lo despierta de noche.

Así que las reglas más antiguas siguen y las más recientes se pausan. Las antiguas cargan el historial de incidentes más largo y los avisos en los que la gente confía, y «lo último que se encendió es lo primero que se apaga» es el único orden que un cliente puede predecir sin leer nuestro código. La ordenación es fecha de creación y luego identificador de regla, dos claves porque aplicar una plantilla crea varias reglas en el mismo milisegundo; sin ese segundo criterio la vista previa no coincidiría con lo que ocurre después.

Las reglas que rompen un límite de forma, un tipo prohibido, orígenes alojados que ya no se permiten, demasiados orígenes, se retiran primero y luego cuentan dentro de lo que queda. Un intervalo que ahora resulta demasiado rápido no pausa nada en absoluto: un suelo elevado rechaza una regla nueva o modificada y deja en paz a las que ya corren hasta que alguien las toca.

La columna vacía

Los cubos tienen una columna invoice_ref y está vacía. Es una costura con nombre y no un descuido, con el mismo espíritu que el derecho que tiene nombre y no implementación: cuando llegue la facturación, la forma que necesita ya está ahí, y no habrá que revisar nada del recuento bajo presión de plazos.

Dos decisiones emparentadas siguen el mismo razonamiento. El libro mayor tiene tabla propia en vez de derivarse de los tics, porque los tics viven siete días y esto 395. Y las filas por comprobación quedan fuera de la exportación de datos personales, con el motivo escrito al lado: cientos de miles al mes, una exportación que corta cada sección en 25.000 filas, y cubos horarios que llevan los mismos totales. Los cubos y la fila de límites sí van dentro.

Lo que dejaríamos escrito

  1. Construya el contador antes que el precio. Toda pregunta se responde con más honestidad cuando ningún total depende de la respuesta.
  2. Registre en el momento en que el trabajo sale, no cuando llega la respuesta, y una respuesta tardía deja de ser un problema de medición.
  3. Haga que la clave de idempotencia sobreviva a su sujeto. Una clave apoyada en una fila que se barre empieza a admitir duplicados según calendario.
  4. Enumere cada desenlace en una tabla. Una rama por defecto convierte un estado nuevo en un cero silencioso.
  5. Las correcciones son filas, nunca ediciones, y la unicidad que protege el original no debe bloquear la corrección.
  6. Elija el orden que su cliente pueda predecir, y deje escrito cuál descartó.

Para que quede claro qué es esto: la monitorización está detrás de un interruptor de despliegue apagado por defecto, no hay una capa de derechos con dinero dentro, y nada de esto se puede comprar hoy. Dos cosas quedan sin probar. El barrido de retención nunca se ejecutó contra una fila realmente antigua, solo contra el esquema. Y el componente que cierra horas se ejerció a través de su función y no de un proceso de larga duración, así que una pasarela ausente una noche que luego recupera su retraso está razonada y no observada.

Del trabajo de monitorización en Provibr. Por qué una sonda no lleva permisos que no necesita está en una sonda a la que no se puede convencer de nada, y por qué un incidente no se cierra porque cesen las mediciones está en un incidente que nunca cierra por silencio.

Empiece con un host y un agente

Cree una cuenta, instale el agente con un solo comando y conecte su primer host de Proxmox. El periodo de prueba dura 14 días y no pide ningún dato de pago.