Observability: registro, rastreo y métricas
La observabilidad se integra perfectamente en las aplicaciones de Oracle AI Data Platform Workbench a través del paquete helpp_observability, lo que permite la recopilación automática de telemetría (logs, rastreos, métricas) con una configuración mínima.
Inicialización
Importe e inicialice como se muestra:
from observability.aidp_observability import AIDPObservability
from observability.config import CollectorConfig
config = CollectorConfig()
config.service_name = "dummy_name"
observability = AIDPObservability(config)
observability.initialize()Tras la inicialización:
- Se crean los exportadores de OpenTelemetry para rastreos, métricas y logs.
- El punto final del recopilador está configurado para todos los datos de telemetría (puerto 4317, protocolo GRpc).
- Se configuran los registradores de aplicaciones.
- El modo de patio de recreo permite al exportador en memoria mostrar el rastreo instantáneo.
- El recopilador está preconfigurado para la rotación de logs, el almacenamiento en buffer e incluye un fregadero para la exportación de telemetría.
- Las métricas, los logs y los metadatos del área de trabajo de la plataforma de datos de IA por defecto se incluyen en todas las señales de telemetría.
- Los atributos de período/sesión por defecto (por ejemplo, sessionId, traceId) se definen para la correlación.
Patrón de uso:
No se necesitan cambios en la lógica de la aplicación para emitir telemetría. Como usuario:
- Utilice el medidor de OpenTelemetry para las métricas.
- Utilice el `logging` estándar de Python para los logs.
- Utilice el rastreador OpenTelemetry para los rastreos.
Ejemplo
import logging
import time
from opentelemetry import trace, metrics
tracer = trace.get_tracer(__name__)
meter = metrics.get_meter(__name__)
request_counter = meter.create_counter(
name="requests_total",
description="Number of requests processed",
unit="1",
)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("sample-app")
def process_request(user_id: str):
logger.info("Processing request for user %s", user_id)
request_counter.add(1, {"user.id": user_id})
with tracer.start_as_current_span("process_request") as span:
span.set_attribute("user.id", user_id)
time.sleep(0.1)
span.add_event("request_completed", {"status": "ok"})
if __name__ == "__main__":
for i in range(3):
process_request(f"user-{i}")
time.sleep(1)Note:
La telemetría de aplicación se exporta automáticamente; el usuario no requiere ningún cambio de instrumentación. El paquete de observabilidad autoinstrumenta los marcos LLM y las aplicaciones LangGraph para la generación de informes de rastreo.