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.