Configuración

El SDK se configura por completo mediante variables de entorno, fusionadas en el espacio de configuración monitor. Publicar config/monitor.php es opcional (consulte Instalación).

Configuración mínima

Añada lo siguiente al .env de su aplicación:

dotenv
MONITOR_ENABLED=true
MONITOR_URL=https://monitor.example.com
MONITOR_KEY=su-clave-api-de-proyecto
  • MONITOR_URL es la URL base de su servidor Quiet Guard (sin ruta final: el propio SDK añade /api/v1/...).
  • MONITOR_KEY es la clave de API por proyecto generada en el dashboard de Quiet Guard. Se muestra una sola vez, al crear el proyecto. Consulte la documentación del servidor para saber cómo crear los proyectos y las claves.

Cuando MONITOR_URL o MONITOR_KEY está vacío, el SDK permanece totalmente silencioso: nunca envía nada y nunca lanza errores.

Todas las opciones

Variable de entornoClave de configPor defectoDescripción
MONITOR_ENABLEDmonitor.enabledtrueInterruptor principal. En false, ningún dato sale de la aplicación.
MONITOR_URLmonitor.urlnullURL base del servidor Quiet Guard.
MONITOR_KEYmonitor.keynullClave de API por proyecto (enviada como token Bearer).
MONITOR_ENVIRONMENTSmonitor.environmentsproduction,stagingLista blanca, separada por comas, de los entornos desde los que se reporta. Vacía = reportar desde todos los entornos.
monitor.ignore_paths[]Rutas de petición cuyas excepciones nunca se reportan, en la sintaxis de Illuminate\Http\Request::is().
MONITOR_RELEASEmonitor.releasenullIdentificador de la versión desplegada (SHA de git o tag) adjuntado a los eventos.
MONITOR_TIMEOUTmonitor.timeout3Timeout HTTP en segundos para las llamadas de ingesta.
MONITOR_QUEUEmonitor.queuefalsefalse envía de forma síncrona, true pone los reportes en la conexión de cola por defecto de la aplicación, un nombre de conexión los pone en esa conexión.
MONITOR_TRACE_LIMITmonitor.trace_limit0Número máximo de frames de pila enviados por excepción. 0 (por defecto) envía la traza completa; fije un número de frames únicamente para aligerar los payloads.
MONITOR_LOGS_ENABLEDmonitor.logs.enabledfalseTransmisión opt-in de los logs de aplicación. Consulte Logs de aplicación.
MONITOR_LOG_LEVELmonitor.logs.levelwarningNivel PSR-3 mínimo que se transmite.
MONITOR_LOGS_MAX_BATCHmonitor.logs.max_batch200Número máximo de entradas de log en el búfer antes de un envío anticipado.
monitor.scrubver más abajoClaves de petición/contexto cuyos valores se enmascaran antes de cualquier envío.
monitor.redactemail, iban, nir, card, phoneFormas de valor enmascaradas estén donde estén, incluido el texto de un mensaje. Vea Reporte de excepciones.
monitor.redact_custom[]Sus propias formas, con el formato etiqueta => patrón PCRE.

Entornos

Por defecto, el SDK solo reporta desde production y staging. Dicho de otro modo, en local no se envía nada mientras no modifique la lista:

dotenv
# Reportar desde todos los entornos
MONITOR_ENVIRONMENTS=

# O añadir local mientras prueba la integración
MONITOR_ENVIRONMENTS=production,staging,local

La comprobación se apoya en app()->environment() de Laravel, es decir, el valor de su APP_ENV.

Release

Defina MONITOR_RELEASE en el momento del despliegue para que el servidor pueda vincular las incidencias a un despliegue concreto y correlacionarlas con los commits:

dotenv
MONITOR_RELEASE=${GIT_SHA}

Un SHA hexadecimal permite al servidor enlazar la release de una incidencia con el commit sincronizado correspondiente.

Envío asíncrono

Por defecto, los reportes se envían de forma síncrona durante la petición, dentro del límite de MONITOR_TIMEOUT. Para sacar ese trabajo del ciclo de vida de la petición, póngalo en una cola:

dotenv
# Usar una conexión de cola concreta
MONITOR_QUEUE=redis

# O la conexión por defecto
MONITOR_QUEUE=true

Los reportes se despachan entonces como jobs en cola (SendExceptionToMonitor, SendLogsToMonitor); por lo tanto, debe haber un worker de cola en ejecución.

Rutas de petición ignoradas

Por defecto se reporta toda excepción, dondequiera que ocurra. Defina ignore_paths con una lista de rutas de petición cuyas excepciones nunca se reportan, en la sintaxis que acepta Illuminate\Http\Request::is() de Laravel:

php
'ignore_paths' => ['api/v1/*'],

Vacía por defecto. Un comando de consola lleva una petición ficticia cuya ruta es /, que no coincide con ninguno de estos patrones, de modo que ignore_paths nunca silencia un job en cola ni una tarea programada, solo las peticiones HTTP. Esto afecta únicamente a las excepciones, los logs no se ven afectados.

Esta opción existe para una aplicación que aloja su propio endpoint de supervisión: las excepciones producidas al servirlo no deben reportarse de vuelta a él.

Claves enmascaradas

La lista monitor.scrub por defecto enmascara cualquier clave de petición/contexto cuyo nombre contenga uno de estos términos (sin distinción de mayúsculas y minúsculas, de forma recursiva):

password, password_confirmation, passphrase, token, secret,
authorization, cookie, php_auth_pw, api_key, access_token,
referer, referrer,
x-forwarded-for, x-real-ip, cf-connecting-ip,
true-client-ip, x-client-ip, forwarded

referer y referrer llevan la dirección de la página de la que viene el visitante, y una URL es donde las aplicaciones colocan sus secretos de un solo uso: un enlace para darse de baja, una descarga firmada, un restablecimiento de contraseña, un enlace para compartir. Se enmascara por el nombre, porque ese valor no tiene ninguna forma que un enmascarador de valores pueda reconocer.

Las seis últimas son las cabeceras que llevan la dirección IP del visitante. Detrás de un proxy inverso, que es la topología de producción habitual, una de ellas contiene la dirección de la persona que provocó el error. Es un dato personal, y no le concierne a usted sino a sus visitantes, que no eligieron nada. Por eso se enmascara por defecto. Si dispone de una base jurídica para conservarla, elimine la línea correspondiente: la decisión es suya, en su condición de responsable del tratamiento.

Para ampliarla, publique la configuración y modifique el array scrub. Los valores enmascarados se sustituyen por [scrubbed]. Consulte Reporte de excepciones para más detalles.

Está leyendo la documentación Laravel SDK v1.0.