Recetas LogQL para Loki en Grafana Cloud (API, PDV, biometría, etc.).
Copie la query, ábrala en Explore y ajuste namespace / container / fechas.
¿Dónde lo pongo en Grafana?
- Entre a su Grafana Cloud.
- Menú izquierdo → Explore (brújula).
- Data source → Loki (el de Apptenticate / cluster).
- Pegue la query → elija el rango de tiempo arriba a la derecha → Run query.
- Para alertas: Alerting → Alert rules → New alert rule, use una query métrica (
count_over_time / sum).
Cómo elegir fechas (ayer o un día concreto)
En Explore, el reloj / time picker (arriba derecha):
- Yesterday o absolute: From
now-1d/d → To now/d (ayer calendario).
- Día fijo: Absolute time range → From
2026-09-17 00:00:00 → To 2026-09-18 00:00:00.
- Si puede, timezone America/Panama.
- Query de logs (líneas): tipo Logs. Query de conteo para gráfico/alerta: Metrics + Range.
Namespaces habituales: apptenticate-staging (QA) y apptenticate-production.
HTTPConnectionPool en API (día de ayer)
Errores de conexión saliente en la API (timeout, pool, host caído). Ver líneas de ayer:
{namespace="apptenticate-production", container=~".*api.*"} |= `HTTPConnectionPool`
Staging: cambie a namespace="apptenticate-staging". En el time picker elija Yesterday.
Contar cada 5 minutos (para ver picos / armar alerta):
sum(
count_over_time(
{namespace="apptenticate-production", container=~".*api.*"}
|= `HTTPConnectionPool`
[5m]
)
)
Alerta sugerida: IS ABOVE 20, evaluate 1m, pending 5m.
Errores de un contenedor (día de ayer)
Reemplace el nombre del container (ej. pdv-liveness, apptenticate-biometria):
{namespace="apptenticate-production", container="NOMBRE_CONTAINER"}
|~ `(?i)(error|exception|traceback|failed|fatal)`
Listar containers disponibles en un namespace:
{namespace="apptenticate-production"}
En Explore → Label browser / label_values({namespace="apptenticate-production"}, container).
Rechazos de negocio (valid=false)
El servicio respondió, pero rechazó captura/match (no es caída de plataforma):
{namespace="apptenticate-production", container=~".*"} |= `valid=false`
Conteo en 5m:
sum(count_over_time({namespace="apptenticate-production"} |= `valid=false` [5m]))
Buscar por query_id
Investigar una transacción concreta en Loki:
{namespace="apptenticate-production"} |= `query_id=123456`
También puede preguntar al chat (menú 1 o 3) con ese número.
Timeouts / Max retries / Connection refused
Patrones típicos cuando un micro no responde (SIB, PDV, App, etc.):
{namespace="apptenticate-production", container=~".*api.*"}
|~ `HTTPConnectionPool|Max retries exceeded|Connection refused|ConnectTimeout|Read timed out`
Errores 5xx / códigos de plataforma (65x)
Fallos de plataforma o comunicación con micros (no “acerque la cara”):
{namespace="apptenticate-production"}
|~ `(error_code[=:\s]+(65[0-9]|5[0-9]{2})|" (5[0-9]{2}) ")`
Ej. 654/656 comunicación micro; 655 registro consumo; 650/659 cliente/servicio.
Cómo crear la alerta (HTTPConnectionPool)
- Alerting → Alert rules → New alert rule.
- Query A = Loki + la query
sum(count_over_time(...[5m])) de arriba.
- Reduce (Last) → Threshold IS ABOVE 20.
- Evaluate every 1m, pending 5m.
- Contact point (Slack/email) → Save.
Explore sirve para validar ayer; la alerta solo evalúa el presente en adelante.