mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
216 lines
7.1 KiB
Markdown
216 lines
7.1 KiB
Markdown
|
|
---
|
||
|
|
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 |
|