Guía10 min

SLO y error budget en agentes: 4 SLIs, burn rápido/lento y política 50/100

Resumen

La observabilidad te dice qué pasó; el SLO contrata qué es aceptable. Cuatro SLIs de agente (entrega, tools, latencia, calidad), error budget = 1 − SLO, alertas de burn rápido y lento, y una política 50 % / 100 % que congela features antes de que el presupuesto se acabe. Distinto de dashboards y de evals.

Google CloudOpenAI
Cuatro indicadores de un agente frente a un presupuesto de error que se consume con burn rápido y lento

Qué resuelve

Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.

La observabilidad mide. El SLO contrata. Sin contrato, un dashboard de Langfuse es un diario: útil para debug, inútil para decidir si hoy se mergea el modelo nuevo o se congela.

Google SRE separa tres palabras que en Slack se usan mal: SLI (número), SLO (objetivo interno), SLA (contrato legal). Un “SLA violation” casi siempre es un SLO fallido. Un SLO que no puede fallar no es un SLO: es 100 % uptime disfrazado.

Contrato de esta guía: cuatro SLIs, error budget = 1 − SLO, burn rápido pagina, burn lento abre ticket, política 50 % / 100 %.

No es el circuit breaker (corta una dependencia). No es el kill switch (apaga el proceso). No es el juez LLM (una métrica más). El SLO decide si hay permiso para cambiar el sistema.

Cuatro SLIs, no un “uptime del bot”

SRE Workbook: el SLI útil es un ratio good / total entre 0 % y 100 %. Así el error budget es aritmética, no un panel de 14 gráficas. Un agente no es HTTP puro, pero el mismo molde cabe si dejas de medir “el contenedor está up”.

SLIGood eventTotalUmbral de partidaQué no cuenta
EntregaTurno con ack + respuesta visible al usuarioInbound autenticado (webhook, cola, cron)99.5 % / 28 dProbes internos, retries del mismo update_id
ToolsTool que termina sin 5xx / timeout / schema inválidoTool calls ejecutadas99.0 % / 28 dRechazo de guardrail (eso es calidad)
LatenciaTurno bajo presupuesto (p. ej. TTFB < 8 s y fin < 45 s)Turnos entregados95 % / 28 dCola de HITL a propósito
CalidadTarea que pasa golden / rúbrica o no dispara loop, fuga, acción no pedidaTareas cerradas98 % / 28 dOpinión del modelo sobre sí mismo

Especificación ≠ implementación. Ratio of home page requests that loaded in < 100 ms es spec; medirlo en el log del server no ve al cliente que nunca llegó. En un agente: medir “200 del webhook” no es entrega. Entrega es el mensaje que el usuario vio (ack Telegram / Slack ok: true / SSE cerrado con done). Tools se miden en el adapter, no en el texto que el modelo dijo que llamó.

Empieza por lo que ya tienes. El Workbook admite el performance actual solo si hay proceso para iterar. No ancles 99.99 % porque el bot estuvo quieto un domingo.

Error budget: permiso para cambiar

error budget = 1 − SLO. Un 99.5 % de entrega en 28 días, con 20 000 turnos, son 100 fallos contratados. SRE: If a service receives 3 million requests over four weeks, a 99.9 % success ratio SLO gives a budget of 3,000 errors. Un incidente de 50 fallos se come el 50 % del presupuesto de entrega. Eso no es “un mal día”: es una decisión de producto.

El presupuesto no es el spend de tokens. Los techos por tenant protegen la factura. El error budget protege la calidad percibida. Queman ambos si un loop de tools dispara 5xx y además paga el modelo; se operan con palancas distintas.

Ventana: 28 días rolling (el ejemplo canónico de política es four-week). No reinicies el mes calendario para “empezar de cero” después de un outage: eso es hacer trampa al usuario.

Burn rápido y burn lento

Alertar “error rate > 1 %” pagina de más o de menos. SRE Workbook, Alerting on SLOs: burn rate = qué tan rápido, relativo al SLO, se come el presupuesto. Burn 1 con SLO 99.9 % / 30 d es 0.1 % de error constante: agotas el mes justo al final. Burn 14.4 en 1 h consume ~2 % del presupuesto; burn 6 en 6 h consume ~5 %.

Tabla de partida para un agente con SLO 99.5 % (error 0.5 %) — mismos porcentajes de presupuesto que Table 5-8, no copies el 0.001 de 99.9 %:

SeveridadVentana largaVentana corta (1/12)PresupuestoQué haces
Page (rápido)1 h5 min2 %Página: dependencia o deploy reciente
Page (rápido)6 h30 min5 %Página: degradación que no es un spike
Ticket (lento)3 d6 h10 %Ticket al siguiente día laboral

La ventana corta evita que un incidente ya cerrado te siga paginando una hora. Notify only when we’re still actively burning. AND de larga + corta; OR entre pares. Si 10 % en 5 min también cumple 2 % en 1 h, suprime el duplicado.

Tráfico bajo: un agente de soporte con 8 turnos/hora no puede paginar por un 5xx. El Workbook lo dice: 1 fallo / 10 req = 10 % en la hora, 1 000× burn para un 99.9 %. Opciones honestas: bajar el SLO (99 % no es vergüenza), medir minutos buenos (good user minutes), o sumar un probe sintético que no cuente como usuario real. No infles el denominador con healthchecks para “mejorar” el ratio.

Burn rápido pagina y burn lento abre ticket sobre el mismo presupuesto de 28 días

Política 50 % / 100 %

Un SLO sin dientes es un wallpaper. La política de ejemplo de SRE (2018-02-19, Steven Thurgood) congela releases que no sean P0/security cuando el servicio agotó el presupuesto de las 4 semanas. Para un agente chico, esperar al 0 % es tarde: el modelo nuevo ya salió. Política operativa:

Presupuesto restante (28 d, el SLI más flojo)ReleasesFeaturesOn-call
> 50 %Según la política normalBurn como arriba
≤ 50 %Solo reliability + P0 + securityFreeze de tools nuevas, modelos, prompts de sistemaReliability primero
0 % (100 % consumido)Halt total salvo P0/security hasta volver al SLOCeroPostmortem si un incidente se comió ≥ 20 %

SRE: This policy is not intended to serve as a punishment. El freeze da permiso para dejar de shippear. Must trabajar reliability si el miss fue bug propio o error de procedimiento. May seguir con features si el outage fue red de la empresa, un proveedor ya frozen, o carga fuera de alcance (pentest, load test). Un incidente ≥ 20 % del presupuesto en 4 semanas → postmortem con al menos un P0. Una clase de outage ≥ 20 % en el trimestre → P0 del siguiente quarter.

El freeze no es el kill switch. El agente sigue sirviendo. Lo que para es cambiarlo.

Política 50/100: freeze de features a mitad de presupuesto, halt al agotarlo

Checklist de un SLO que se puede defender

  1. Cuatro ratios good/total con spec e implementación escritos (log, probe o cliente).
  2. Ventana 28 d rolling; error budget visible por SLI, no un “score” mezclado.
  3. Alertas multiwindow: page 1 h/5 min y 6 h/30 min; ticket 3 d/6 h.
  4. Política 50/100 firmada por quien mergea (tú, si eres el equipo).
  5. Un incidente ≥ 20 % dispara postmortem; el juez LLM no vota el freeze.

Si no hay stakeholders que acepten el número, el Workbook es claro: without SLOs, there is no need for SREs. En un indie agent: sin SLO, no hay permiso para decir “hoy no se deploya”.

FAQ

¿99.9 % para un bot de Telegram? Casi nunca. 99.9 % / 28 d con 5 000 turnos son 5 fallos. Un timeout de OpenAI se come el mes. Empieza 99 %–99.5 % en entrega y 95 % en latencia.

¿El juez LLM es el SLI de calidad? No. Es un grader. Calíbralo con kappa contra humanos; el SLO de calidad usa goldens + fallos duros (loop, fuga, acción no pedida). El juez puede alimentar el numerador, no sustituirlo.

¿Páginas por CPU / RAM? No. Eso es síntoma. El SLI es el usuario. CPU sirve para capacity, no para el contrato.

¿Dónde encaja el curso? Si aún no hay loop de tools + logs, empieza por instalar un agente y el hub de seguridad, coste y operación. El SLO llega con tráfico real, no en la demo.

Fuentes verificadas 2026-09-06: SRE Book cap. 4; Workbook Implementing SLOs, Alerting on SLOs (Table 5-8) y Example Error Budget Policy.