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.