Beobachtbarkeit: Logging, Tracing und Metriken

Die Beobachtbarkeit ist über das helpp_observability-Package nahtlos in Oracle AI Data Platform Workbench-Anwendungen integriert und ermöglicht die automatische Erfassung von Telemetrie (Logs, Traces, Metriken) bei minimalem Setup.

Initialisierung

Import und Initialisierung wie dargestellt:

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

config = CollectorConfig()
config.service_name = "dummy_name"
observability = AIDPObservability(config)
observability.initialize()
Bei der Initialisierung:
  • OpenTelemetry-Exporteure für Traces, Metriken und Logs werden erstellt.
  • Der Collector-Endpunkt ist für alle Telemetriedaten konfiguriert (Port 4317, GRpc-Protokoll).
  • Anwendungslogger sind eingerichtet.
  • Playground-Modus ermöglicht In-Memory-Exporter für sofortige Trace-Anzeige.
  • Der Collector ist für Logrotation, -pufferung vorkonfiguriert und enthält eine Senke für den Telemetrieexport.
  • Standardmetriken, -logs und AI Data Platform Workbench-Metadaten sind in allen Telemetriesignalen enthalten.
  • Standardspalten/Sessionattribute (z.B. sessionId, traceId) sind für die Korrelation festgelegt.

Verwendungsmuster:

In der Anwendungslogik sind keine Änderungen erforderlich, um Telemetrie auszugeben. Als Benutzer:
  • Verwenden Sie den OpenTelemetry Meter für Metriken.
  • Verwenden Sie das Standard-Logging von Python für Logs.
  • Verwenden Sie den OpenTelemetry Tracer für Traces.

Beispiel

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)

Hinweis:

Die Anwendungstelemetrie wird automatisch exportiert. Der Benutzer benötigt keine Instrumentierungsänderungen. Das Beobachtbarkeitspaket automatisiert LLM-Frameworks und LangGraph-Anwendungen für das Trace-Reporting.