GenAI オブザーバビリティ実装のベストプラクティス
概要
このガイドでは、本番環境に対応した GenAI オブザーバビリティソリューションを構築するための、実装に特化した戦術的なベストプラクティスを提供します。これらのプラクティスは、実際のデプロイメントと得られた教訓に基づいています。
OpenTelemetry インストルメンテーション
メトリクスの命名規則
一貫性のある説明的な名前を使用します。
# ✅ Good - Clear, hierarchical naming
"genai.token.input.count"
"genai.token.output.count"
"genai.request.duration"
"genai.request.error.count"
# ❌ Bad - Ambiguous, inconsistent
"tokens"
"input_tok"
"req_time"
"errors"
必須ディメンション
常にこれらのディメンションを含めてください:
dimensions = {
"model": "anthropic.claude-3-haiku-20240307-v1:0",
"cloud_provider": "aws", # aws, gcp, azure, on-prem
"application": "chatbot",
"environment": "production",
"region": "us-east-1"
}
オプションですが推奨されるディメンション
optional_dimensions = {
"user_id": "hashed_user_id", # Hash for privacy
"session_id": "session_123",
"prompt_template": "customer_support_v2",
"model_version": "2024-03-07",
"feature_flag": "new_prompt_enabled"
}
インストルメンテーションコードの例
from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
# Initialize meter
meter = metrics.get_meter(__name__)
# Create instruments
token_input_counter = meter.create_counter(
name="genai.token.input.count",
description="Number of input tokens consumed",
unit="tokens"
)
token_output_counter = meter.create_counter(
name="genai.token.output.count",
description="Number of output tokens generated",
unit="tokens"
)
latency_histogram = meter.create_histogram(
name="genai.request.duration",
description="Request duration in milliseconds",
unit="ms"
)
# Record metrics
def record_llm_metrics(model, provider, input_tokens, output_tokens, latency_ms):
dimensions = {
"model": model,
"cloud_provider": provider
}
token_input_counter.add(input_tokens, dimensions)
token_output_counter.add(output_tokens, dimensions)
latency_histogram.record(latency_ms, dimensions)
CloudWatch の設定
メトリクス名前空間戦略
階層的な名前空間を使用します。
AIObservability # Root namespace
├── Production # Environment-specific
│ ├── Chatbot # Application-specific
│ └── SearchAssistant
└── Development
メトリクス期間の選択
適切な期間を選択します。
- 高頻度メトリクス(リクエスト数、エラー): 60 秒
- 中頻度メトリクス(レイテンシ、トークン): 300 秒(5 分)
- 低頻度メトリクス(日次コスト): 3600 秒(1 時間)
CloudWatch Logs の構造
構造化ログを使用します。
{
"timestamp": "2026-03-04T10:30:00Z",
"level": "INFO",
"model": "gpt-4o",
"cloud_provider": "azure",
"input_tokens": 45,
"output_tokens": 234,
"latency_ms": 1523,
"cost_usd": 0.0234,
"user_id": "hashed_abc123",
"prompt_template": "summarization_v3",
"success": true
}
ログ グループの構成
/genai-observability/
├── application-logs # Application-level logs
├── model-invocations # LLM request/response logs
├ ── errors # Error logs only
└── audit # Compliance audit trail
Grafana ダッシュボードのデザイン
ダッシュボード階層
さまざまなオーディエンス向けのダッシュボードを作成します。
-
エグゼクティブダッシュボード - 高レベル KPI
- 1 日の総コスト
- リクエスト量のトレンド
- エラー率
- 使用量上位のモデル
-
オペレーションダッシュボード - リアルタイムモニタリング
- 現在のリクエストレート