可観測性: ロギング、トレースおよびメトリック

可観測性は、aidp_observabilityパッケージを介してOracle AI Data Platform Workbenchアプリケーションにシームレスに統合され、最小限の設定で自動テレメトリ(ログ、トレース、メトリック)収集を実現します。

初期化

次に示すように、インポートと初期化を行います。

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

config = CollectorConfig()
config.service_name = "dummy_name"
observability = AIDPObservability(config)
observability.initialize()
初期化時:
  • トレース、メトリックおよびログのOpenTelemetryエクスポータが作成されます。
  • コレクタ・エンドポイントは、すべてのテレメトリ・データ(ポート4317、GRpcプロトコル)に対して構成されます。
  • アプリケーション・ロガーが設定されます。
  • プレイグラウンド・モードでは、インスタント・トレース表示用のインメモリー・エクスポータが有効になります。
  • コレクタは、ログのローテーションおよびバッファリング用に事前構成されており、テレメトリ・エクスポート用のシンクが含まれています。
  • デフォルトのメトリック、ログおよびAI Data Platform Workbenchメタデータは、すべてのテレメトリ・シグナルに含まれています。
  • デフォルトのスパン/セッション属性(sessionId、traceIdなど)が相関用に設定されます。

用途パターン:

テレメトリを生成するためにアプリケーション・ロジックを変更する必要はありません。ユーザーとして:
  • メトリックにはOpenTelemetryメーターを使用します。
  • ログにはPythonの標準`logging`を使用します。
  • トレースにはOpenTelemetryトレーサを使用します。

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)

ノート:

アプリケーションの遠隔測定は自動的にエクスポートされます。計測の変更はユーザーが行う必要はありません。追跡レポート用の可観測性パッケージ自動計測LLMフレームワークおよびLangGraphアプリケーション。