trustgraph/docs/tech-specs/logging-strategy.es.md

216 lines
7.1 KiB
Markdown
Raw Normal View History

---
layout: default
title: "Estrategia de Registro de TrustGraph"
parent: "Spanish (Beta)"
---
# Estrategia de Registro de TrustGraph
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
## Visión general
TrustGraph utiliza el módulo integrado de Python `logging` para todas las operaciones de registro, con una configuración centralizada y la integración opcional de Loki para la agregación de registros. Esto proporciona un enfoque estandarizado y flexible para el registro en todos los componentes del sistema.
## Configuración predeterminada
### Nivel de registro
- **Nivel predeterminado**: `INFO`
- **Configurable a través de**: Argumento de línea de comandos `--log-level`
- **Opciones**: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
### Destinos de salida
1. **Consola (stdout)**: Siempre habilitado - asegura la compatibilidad con entornos contenedorizados
2. **Loki**: Agregación centralizada de registros opcional (habilitado por defecto, se puede deshabilitar)
## Módulo de registro centralizado
Todas las configuraciones de registro se gestionan mediante el módulo `trustgraph.base.logging`, que proporciona:
- `add_logging_args(parser)` - Agrega argumentos de línea de comandos estándar para registro
- `setup_logging(args)` - Configura el registro a partir de los argumentos analizados
Este módulo se utiliza en todos los componentes del lado del servidor:
- Servicios basados en AsyncProcessor
- API Gateway
- Servidor MCP
## Guía de implementación
### 1. Inicialización del registrador
Cada módulo debe crear su propio registrador utilizando el nombre del módulo:
```python
import logging
logger = logging.getLogger(__name__)
```
El nombre del registrador se utiliza automáticamente como etiqueta en Loki para filtrar y buscar.
### 2. Inicialización del servicio
Todos los servicios del lado del servidor obtienen automáticamente la configuración de registro a través del módulo centralizado:
```python
from trustgraph.base import add_logging_args, setup_logging
import argparse
def main():
parser = argparse.ArgumentParser()
# Agrega argumentos estándar de registro (incluida la configuración de Loki)
add_logging_args(parser)
# Agrega tus argumentos específicos del servicio
parser.add_argument('--port', type=int, default=8080)
args = parser.parse_args()
args = vars(args)
# Configura el registro temprano en el inicio
setup_logging(args)
# Resto de la inicialización del servicio
logger = logging.getLogger(__name__)
logger.info("Servicio iniciado...")
```
### 3. Argumentos de línea de comandos
Todos los servicios admiten estos argumentos de registro:
**Nivel de registro:**
```bash
--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
```
**Configuración de Loki:**
```bash
--loki-enabled # Habilita Loki (predeterminado)
--no-loki-enabled # Deshabilita Loki
--loki-url URL # URL de envío a Loki (predeterminado: http://loki:3100/loki/api/v1/push)
--loki-username USERNAME # Nombre de usuario opcional de autenticación
--loki-password PASSWORD # Contraseña opcional de autenticación
```
**Ejemplos:**
```bash
# Predeterminado - nivel INFO, Loki habilitado
./my-service
# Modo DEBUG, solo consola
./my-service --log-level DEBUG --no-loki-enabled
# URL de Loki personalizada con autenticación
./my-service --loki-url http://loki.prod:3100/loki/api/v1/push \
--loki-username admin --loki-password secret
```
### 4. Variables de entorno
La configuración de Loki admite los valores predeterminados de las variables de entorno:
```bash
export LOKI_URL=http://loki.prod:3100/loki/api/v1/push
export LOKI_USERNAME=admin
export LOKI_PASSWORD=secret
```
Los argumentos de la línea de comandos tienen prioridad sobre las variables de entorno.
### 5. Mejores prácticas de registro
#### Uso de los niveles de registro
- **DEBUG**: Información detallada para diagnosticar problemas (valores de variables, entrada/salida de funciones)
- **INFO**: Mensajes informativos generales (servicio iniciado, configuración cargada, hitos de procesamiento)
- **WARNING**: Mensajes de advertencia para situaciones potencialmente dañinas (características obsoletas, errores recuperables)
- **ERROR**: Mensajes de error para problemas serios (operaciones fallidas, excepciones)
- **CRITICAL**: Mensajes críticos para fallas del sistema que requieren atención inmediata
#### Formato de mensaje
```python
# Bueno - incluye contexto
logger.info(f"Procesando documento: {doc_id}, tamaño: {doc_size} bytes")
logger.error(f"No se pudo conectar a la base de datos: {error}", exc_info=True)
# No bueno - carece de contexto
logger.info("Procesando documento")
logger.error("Conexión fallida")
```
#### Consideraciones de rendimiento
```python
# Usa la incrustación para operaciones costosas
logger.debug("Resultado de la operación costosa: %s", expensive_function())
# Comprueba el nivel de registro para operaciones de depuración muy costosas
if logger.isEnabledFor(logging.DEBUG):
debug_data = compute_expensive_debug_info()
logger.debug(f"Datos de depuración: {debug_data}")
```
#### 6. Registro estructurado con Loki
Para datos complejos, usa el registro estructurado con etiquetas adicionales para Loki:
```python
logger.info("Solicitud procesada", extra={
'tags': {
'request_id': request_id,
'user_id': user_id,
'status': 'éxito'
}
})
```
Estas etiquetas se convierten en etiquetas de búsqueda en Loki, además de las etiquetas automáticas:
- `severity` - Nivel de registro (DEBUG, INFO, etc.)
- `logger` - Nombre del módulo (del `__name__`)
### 7. Registro de excepciones
Siempre incluye trazas de pila para las excepciones:
```python
try:
process_data()
except Exception as e:
logger.error(f"No se pudo procesar los datos: {e}", exc_info=True)
```
### 8. Dependencias
El módulo centralizado de registro requiere:
- `python-logging-loki` - Para la integración de Loki (opcional, funciona si falta)
Ya incluido en `trustgraph-base/pyproject.toml` y `requirements.txt`.
## Migración
Para código existente:
1. **Servicios que ya utilizan AsyncProcessor**: No se necesita cambios, la integración de Loki es automática
2. **Servicios que no utilizan AsyncProcessor** (api-gateway, mcp-server): Ya actualizado
3. **Herramientas de línea de comandos**: Fuera del alcance - continúe usando `print()` o registro simple
### De `print()` a registro:
```python
# Antes
print(f"Procesando documento {doc_id}")
# Después
logger = logging.getLogger(__name__)
logger.info(f"Procesando documento {doc_id}")
```
## Resumen de configuración
| Argumento | Predeterminado | Variable de entorno | Descripción |
|---|---|---|---|
| `--log-level` | `INFO` | - | Nivel de registro en la consola y Loki |
| `--loki-enabled` | `True` | - | Habilita el registro de Loki |
| `--loki-url` | `http://loki:3100/loki/api/v1/push` | `LOKI_URL` | Puntero al API de Loki |
| `--loki-username` | `None` | `LOKI_USERNAME` | Nombre de usuario de autenticación para Loki |
| `--loki-password` | `None` | `LOKI_PASSWORD` | Contraseña de autenticación para Loki |