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.