Observabilidade: Logging, Tracing e Metrics

A observabilidade é perfeitamente integrada às aplicações do Oracle AI Data Platform Workbench por meio do pacote aidp_observability, permitindo a coleta automática de telemetria (logs, rastreamentos, métricas) com configuração mínima.

Inicialização

Importe e inicialize conforme mostrado:

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

config = CollectorConfig()
config.service_name = "dummy_name"
observability = AIDPObservability(config)
observability.initialize()
Após a inicialização:
  • Os exportadores do OpenTelemetry para rastreamentos, métricas e logs são criados.
  • O ponto final do coletor é configurado para todos os dados de telemetria (porta 4317, protocolo GRpc).
  • Os loggers do aplicativo são configurados.
  • O modo Playground permite que o exportador na memória exiba rastreamento instantâneo.
  • O coletor é pré-configurado para rotação de log, buffer e inclui um coletor para exportação de telemetria.
  • Métricas, logs e metadados do AI Data Platform Workbench padrão são incluídos em todos os sinais de telemetria.
  • Atributos de intervalo/sessão padrão (por exemplo, sessionId, traceId) são definidos para correlação.

Padrão de uso:

Nenhuma alteração é necessária na lógica do aplicativo para emitir telemetria. Como usuário:
  • Use o Medidor OpenTelemetry para métricas.
  • Use o `logging` padrão do Python para logs.
  • Use o Rastreador OpenTelemetry para rastreamentos.

Exemplo

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)

Observação:

A telemetria de aplicação é automaticamente exportada; nenhuma alteração de instrumentação é necessária pelo usuário. O pacote de observabilidade monitora estruturas LLM e aplicativos LangGraph para relatórios de rastreamento.