Osservabilità: log, trace e metriche

Observability è perfettamente integrato nelle applicazioni Oracle AI Data Platform Workbench tramite il package aidp_observability, consentendo la raccolta automatica della telemetria (log, trace, metriche) con un'impostazione minima.

Inizializzazione

Importare e inizializzare come mostrato di seguito.

from observability.aidp_observability import AIDPObservability
from observability.config import CollectorConfig

config = CollectorConfig()
config.service_name = "dummy_name"
observability = AIDPObservability(config)
observability.initialize()
Al momento dell'inizializzazione:
  • Vengono creati gli esportatori OpenTelemetry per trace, metriche e log.
  • L'endpoint del collector è configurato per tutti i dati di telemetria (porta 4317, protocollo GRpc).
  • I logger dell'applicazione sono impostati.
  • La modalità Playground consente all'esportatore in-memory di visualizzare la traccia istantanea.
  • Il collector è preconfigurato per la rotazione del log, il buffering e include un sink per l'esportazione della telemetria.
  • Metriche, log e metadati AI Data Platform Workbench predefiniti sono inclusi in tutti i segnali di telemetria.
  • Gli attributi intervallo/sessione predefiniti (ad esempio sessionId, traceId) sono impostati per la correlazione.

Pattern di utilizzo:

Non sono necessarie modifiche nella logica dell'applicazione per emettere la telemetria. Come utente:
  • Utilizzare il contatore OpenTelemetry per le metriche.
  • Utilizzare il `logging` standard di Python per i log.
  • Utilizzare il Tracer OpenTelemetry per i trace.

Esempio

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)

Nota

La telemetria dell'applicazione viene esportata automaticamente; nessuna modifica della strumentazione è richiesta dall'utente. I framework LLM del package di osservabilità e le applicazioni LangGraph per il reporting delle tracce.