Observabilité : journalisation, trace et mesures

L'observabilité est intégrée de manière transparente aux applications Oracle AI Data Platform Workbench via le package aidp_observability, ce qui permet la collecte automatique de télémesures (journaux, traces, mesures) avec une configuration minimale.

Initialisation

Importez et initialisez comme indiqué :

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

config = CollectorConfig()
config.service_name = "dummy_name"
observability = AIDPObservability(config)
observability.initialize()
Lors de l'initialisation :
  • Les exportateurs OpenTelemetry pour les traces, les mesures et les journaux sont créés.
  • Le point d'extrémité du collecteur est configuré pour toutes les données de télémétrie (port 4317, protocole GRpc).
  • Les journaliseurs d'application sont configurés.
  • Le mode Playground permet à l'exportateur en mémoire d'afficher la trace instantanément.
  • Le collecteur est préconfiguré pour la rotation des journaux, la mise en mémoire tampon et inclut un récepteur pour l'exportation de télémesures.
  • Les mesures par défaut, les journaux et les métadonnées AI Data Platform Workbench sont inclus dans tous les signaux de télémétrie.
  • Les attributs d'étendue/de session par défaut (par exemple, sessionId, traceId) sont définis pour la corrélation.

Modèle d'utilisation :

Aucune modification n'est nécessaire dans la logique de l'application pour émettre la télémétrie. En tant qu'utilisateur :
  • Utiliser le compteur OpenTelemetry pour les mesures.
  • Utilisez le standard `logging` de Python pour les journaux.
  • Utilisez le traceur OpenTelemetry pour les traces.

Exemple

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)

Remarques :

La télémétrie d'application est automatiquement exportée ; aucune modification d'instrumentation n'est requise par l'utilisateur. Le package d'observabilité auto-instruments LLM frameworks et LangGraph applications pour le reporting de trace.