LLMシステムの可観測性:本番環境におけるメトリクス、トレース、ログ、およびテスト

LLM推論およびLLMアプリケーションのためのエンドツーエンドの可視化戦略

目次

LLM(大規模言語モデル)システムは、従来のAPIモニタリングでは検知できない方法で失敗します。キューが静かに埋め尽くされ、CPUが忙しい状態になる遥か前にGPUメモリが飽和し、レイテンシはアプリケーションレイヤーではなくバッチ処理レイヤーで急増します。

本ガイドでは、LLM推論およびLLMアプリケーション向けの観測性戦略について包括的に解説します。何を測定し、Prometheus、OpenTelemetry、Grafanaを用いてどのように計装し、テリメトリパイプラインをどのように大規模にデプロイするかを説明します。

完全なアシスタントスタックは、生推論の上に検索、ツール呼び出し、ルーティングを追加します。AIアシスタントアーキテクチャは、これらのレイヤーの中で観測性がどの位置づけになるかを明確に示しています。

observability monitoring dashboard happy user

TL;DR(実行要約)

LLMシステムは、従来の「HTTPレイテンシ+エラーレート」モニタリングでは説明できない方法で劣化します。プロダクショングレードの**LLMシステム向けの観測性**は、迅速かつ根拠を持って以下の問いに答える必要があります。

  • ユーザー体験が劣化しているかどうか(尾部レイテンシ、最初のトークンまでの時間(TTFT)、トークン間レイテンシ、エラー、中断)。
  • 時間がどこに費やされているか(キューイングvsバッチ処理vsモデル実行;検索/ツール/セーフティフィルターvs推論)。
  • 何が最初に飽和するか(GPU利用率とメモリ圧力、KVキャッシュ/キュー圧力、CPUトークン化)。
  • コストと容量のドリフト(リクエストあたりのトークン数、GPUあたりのトークン/秒、キャッシュヒット率、無駄な生成)。
  • テリメトリの保存が安全かどうか(プロンプトにPIIが含まれる可能性があるため、ログ/属性への機密情報の漏洩を防ぐ)。

最も強靭な設計は、マルチシグナルパイプラインです。

  • メトリクス: 迅速な検知とキャパシティプランニングのため(Prometheus + PromQL;Thanos/Cortex/Mimir/VictoriaMetricsによるオプションの長期ストレージ)。
  • トレース: リクエストレベルの因果関係のため(OTLPを使用したOpenTelemetry;Tempo/Jaeger/Zipkin/Elastic APMなどのバックエンド)。
  • ログ: トレースに関連付けられたコンテキストのため(Loki/Elastic/OpenSearch)、低カーディナリティメタデータ用に設計。
  • プロファイリング: CPU/メモリのホットスポットと尾部レイテンシのため(Grafana Pyroscope)。
  • 合成テスト+ロードテスト: ユーザーが気づく前に回帰を検知するため(Grafana k6;ブラックボックス式のプロービング)。
  • SLO: ユーザー結果を測定し、実行可能なアラートを駆動するため(エラーバジェット;バーンレート方式)。

LLMシステムの観測性を特別にする要因

範囲に関する注記: 対象となるLLMフレームワークは特定されていません。この記事の例は一般的なサーバー/フレームワーク(Triton、vLLM、TGI、LangChain/LangSmith)をカバーしており、同等のメトリクスとスパンに置き換えることで他のスタックにも適用可能です。

LLMは、従来のWebサービスとは異なる運用上の振る舞いを導入します。

  • リクエストあたりの作業量の変動: トークン数(入力/出力)は大きく変動するため、「リクエスト毎秒数」は安定して見える一方で、トークンスループットは崩壊する可能性があります。TGIとvLLMは、この種のモニタリングをサポートするために、トークン関連およびトークンレイテンシ関連のテリメトリを明示的にエクスポートします。
  • キューイング+継続的バッチ処理: スループットはバッチ処理/キューの規則に依存します。キューサイズとバッチサイズが一次指標となります(TGIは両方を公開しています)。
  • ストリーミングUX: ユーザーは完全なレスポンス時間と同じくらい、TTFTやトークン間レイテンシを重視します。OpenTelemetryは、GenAIのセマンティック規約の下で、サーバーのTTFTやトークン毎時間を標準化しています。
  • GPU圧力が失敗モードを支配: GPU利用率とGPUメモリ(使用メモリを含む)は信頼性の中心です。NVIDIAのDCGMエクスポートャーは、Prometheus /metrics エンドポイントでGPUテリメトリを公開するために特別に存在します。
  • マルチステップパイプライン: 検索、ツール呼び出し、セーフティフィルター、後処理により、エンドツーエンドのレイテンシは複数のスパン/キューの構成要素となります。これにより、分散トレーシングと慎重なメトリクス設計が不可欠になります。

人気のある推論サーバーからの具体的な例がこれを強調しています。

  • NVIDIA Triton Inference Server/metrics(一般的には :8002/metrics)経由でプレーンテキストとしてメトリクスを公開し、メトリクスの有効化/無効化やメトリクスポートの選択を制御するフラグを提供します。
  • vLLMvllm: プレフィックスを持つ広範なPrometheus /metrics エンドポイントを公開しています。そのドキュメントには、生成トークンのカウンターや最初のトークンまでの時間などのヒストグラムが含まれています。
  • Hugging Face TGI は、キューサイズ、バッチサイズ、エンドツーエンドリクエスト継続時間、生成トークン、キュー継続時間を含む /metrics エンドポイントを文書化しています。

基本的な観測性タスクと必要なLLMテリメトリ

LLMシステムの観測性は、タスク→シグナル→ツールをマッピングし、最初の日からカーディナリティとサンプリングを制限することで、最も簡単に実装できます。

メトリクス: オンラインサービングシステムにおいて、Prometheus自身の計装ガイダンスは、クエリ数、エラー、レイテンシを主要メトリクスとして強調しています。LLMはこれにTTFT、トークン毎のスループット/レイテンシ、キュー長、バッチサイズ、GPU利用率を追加します。

トレース: トレースは、検索/ツール/セーフティ/推論ステージ間でレイテンシや失敗を帰属させる方法です。OpenTelemetryは、トレース/エクスポートャーをベンダー中立なテリメトリの送信およびコレクターやバックエンドへの送信方法として枠組み化しています。

ログ: ログは人間が読めるコンテキストと「なぜ」を提供しますが、無制限の値のインデックス作成を避けない限り、大規模では使用できません(例: Lokiはラベルのみをインデックスし、圧縮されたログチャンクをオブジェクトストレージに保存します)。

プロファイリング: 継続的プロファイリングは、低オーバーヘッドのサンプリングでプロダクションのCPU/メモリ振る舞いをキャプチャします。Grafana Pyroscopeはこれに明示的に位置づけられています。

合成テストとロードテスト: Grafana k6はオープンソースのロードテストツールであり、GrafanaはSynthetic Monitoringがk6によって駆動され、単なるプロトコルチェックを超えていると述べています。

SLO: GoogleのSREガイダンスは、SLOをSLIによって測定されるサービスレベルの目標値/範囲として定義し、SLOのアラート化(精度/再現性/検出時間のトレードオフ)に関するガイダンスを提供しています。

主要LLMメトリクスブループリント

カテゴリー 例示メトリクス名(実際の例) タイプ 重要性の理由 例示ソース
エンドツーエンドレイテンシ tgi_request_duration ヒストグラム 尾部レイテンシはユーザー体験である TGIはこれを明示的にエクスポート
最初のトークンまでの時間 vllm:time_to_first_token_seconds ; gen_ai.server.time_to_first_token ヒストグラム ストリーミング/遅延された最初のトークンは、飽和の最初の兆候であることが多い vLLMおよびOTelセマンティック規約GenAI
出力トークン毎時間 tgi_request_mean_time_per_token_duration ; gen_ai.server.time_per_output_token ヒストグラム トークン間レイテンシ;リクエストが完了しても「遅く感じる」 TGIおよびOTelセマンティック規約GenAI
トークン使用量/ボリューム tgi_request_generated_tokens ; gen_ai.client.token.usage ヒストグラム / カウンター コスト+容量はトークン駆動である TGIおよびOTelセマンティック規約GenAI
リクエスト tgi_request_count ; vllm:request_success_total カウンター トラフィックのベースラインと結果 TGIおよびvLLM
キュー長 tgi_queue_size ゲージ キューイングはレイテンシの急増を予測する TGI
バッチサイズとバッチ制限 tgi_batch_current_size ; tgi_batch_current_max_tokens ゲージ スループット–レイテンシのトレードオフ TGI
GPU利用率/メモリ DCGM_*(エクスポートャー提供) ゲージ 飽和、OOMリスク、スケーリングトリガー DCGMエクスポートャーは /metrics でGPUメトリクスをエクスポート
推論サーバーテリメトリエンドポイント :8002/metrics(Tritonのドキュメント/アーカイブでのデフォルト) Prometheusの標準スケープトarget Tritonドキュメント

標準化のためのOpenTelemetry GenAIセマンティック規約

OpenTelemetryは、GenAIメトリクス用の標準命名を提供するGenAIセマンティック規約(ステータス:「開発中」)を提供しています。

  • gen_ai.client.token.usage および gen_ai.client.operation.duration
  • gen_ai.server.request.durationgen_ai.server.time_per_output_token、および gen_ai.server.time_to_first_token

この標準化は、「OpenTelemetryによるLLMモデルのモニタリング」戦略のポータブルなレバーとして実用的です:一度送信し、後に同じテリメトリをOSSまたはベンダーバックエンドにルーティングします。

テリメトリパイプラインの設計

llm observability flowchart

プル vs プッシュ

Prometheusはプルファーストです。 プロセスはサポートされる exposition 形式でメトリクスを公開し、Prometheusは構成されたスケープロブに従ってそれらをスクレイプします。

プッシュは例外用です。 Prometheusの「Pushgatewayを使用するタイミング」ガイドは、Pushgatewayを限られたケースでのみ(一般的なプッシュの代替としてではなく)使用することを明示的に推奨しており、PushgatewayのREADMEは、それが「Prometheusをプッシュベースのモニタリングシステムに変える」ことができないことを強調しています。

LLM固有の実践パターン:

  • 推論サーバー/エクスポートャー(Triton/vLLM/TGIメトリクスエンドポイント;DCGMエクスポートャー;ノードメトリクス)にはプルを使用します。
  • トレース/ログ/OTelメトリクスにはOTLPプッシュを使用します(OpenTelemetry Protocolは、ソース、コレクター、バックエンド間のトランスポート/エンコーディング/配信を定義します)。
  • 単一のPrometheusを超えてスケーリングする際にリモライトを使用します(Prometheusはリモライトのチューニングガイダンスを提供し、Mimir/Thanos/Cortexは長期および/またはHAストレージオプションを提供します)。

エージェント vs サイドカー vs ゲートウェイコレクター

OpenTelemetryは、エージェントデプロイメントパターンを文書化しており、ここでテリメトリはアプリケーションまたは同じホスト(サイドカー/DaemonSet)で動作するコレクターに送信され、その後エクスポートされます。

Kubernetesの場合、サイドカーの挿入はOpenTelemetry Operator(注釈ベースの挿入)によってサポートされています。

LLMスタックのための実用的な経験則:

  • ホストレベルのエンリッチメントと多くのポッド間の共有パイプラインにはDaemonSetエージェントを使用します。
  • 厳格なワーカーロードごとの分離や専用ローカルフィルタリングが必要な場合はサイドカーを使用します(プロンプトに機密データが含まれる可能性がある場合によく見られます)。
  • センタライズされた尾部サンプリング、バッチ処理、リトライ、エクスポートのファンアウトにはゲートウェイコレクターを使用します。

サンプリングとカーディナリティ制御

OpenTelemetryは、尾部サンプリングが、トレースから派生した基準を使用してサンプリング決定を可能にする(単なるヘッドサンプリングでは不可能)ことを明確にしています。

Prometheusの計装ガイダンスは、ラベルの過剰使用を警告し、カーディナリティを低く保つための経験則を提供し、潜在的なカーディナリティが〜100を超える場合はメトリクスを再設計するよう助言します。

早期に禁止すべきLLM固有の「カーディナリティ罠」:

  • プロンプトテキスト、レスポンステキスト、会話ID、リクエストIDをラベル/属性として使用。
  • ツール引数ブロブをスパン属性として使用。
  • 無制限の「user_id」ラベル。

有界なディメンションを優先: modelmodel_familyendpointregionstatus_codedeploymenttenant(有界の場合のみ)。

LLM観測性ツールの比較

観測性タスクにマッピングされたツール

ツール メトリクス トレース ログ プロファイリング 合成テスト SLO / アラート LLM関連性
Prometheus ◻️ ◻️ ◻️ ◻️ 計装ガイダンス+アラートモデル;プルベースのスクレイピング
Grafana ✅ (可視化) ✅ (可視化) ✅ (可視化) ダッシュボードはデータソース上のパネル;広範なデータソースをサポート
OpenTelemetry ✅ (プロファイルは進化中) ◻️ ◻️ OTLP仕様+GenAIセマンティック規約;ベンダー中立な計装
Jaeger ◻️ ◻️ ◻️ ◻️ ◻️ OTLP(gRPC/HTTP)を受け付け、一般的なトレーシングバックエンド
Grafana Tempo ◻️ ◻️ ◻️ ◻️ ◻️ 高規模トレーシング;メトリクスジェネレーター経由でスパンからメトリクスを生成可能
Grafana Loki ◻️ ◻️ ◻️ ◻️ ◻️ ラベルのみをインデックス;圧縮チャンクを保存;大規模でのログコスト削減
Elastic Stack (ELK) ◻️ ◻️ Elastic StackはElasticsearch+Kibanaの基盤をリスト;Elastic APMはOTel統合をサポート
DCGMエクスポートャー ◻️ ◻️ ◻️ ◻️ ◻️ /metrics スケープエンドポイントをエクスポートするGPUメトリクスエクスポートャー
Mimir / Thanos / Cortex ◻️ ◻️ ◻️ ◻️ ◻️ 長期/HAのPrometheus互換メトリクスストレージ
Datadog OTelトレース/メトリクス/ログを受け付け;機密データスキャン機能を含む
New Relic OTLPエンドポイント設定とサポートされるOTLP/HTTPプラクティスを文書化
Honeycomb ◻️ ◻️ gRPC/HTTP経由のOTLP受信をサポート;OTelファーストのインジェスト
LangSmith ◻️ ◻️ ◻️ ◻️ ◻️ LLMアプリ向けのOpenTelemetryベースのトレーシングをサポート

可視化におけるGrafana vs 代替ツール

  • Grafanaダッシュボードは、データソース(LokiおよびMimirを含む)をクエリしてチャートや可視化を生成するパネルで構成されます。
  • Kibanaは、Elastic Stack内のUIレイヤーとしてダッシュボード/可視化を提供します。
  • OpenSearch Dashboardsは、OpenSearchのためのデータ可視化ツールを提供します。
  • InfluxDataのドキュメントは、ChronografをInfluxエコシステム内の可視化コンポーネントとして位置づけています。

メトリクスバックエンドにおけるPrometheus vs 代替ツール

  • Prometheusローカルストレージのデフォルト: 保持期間フラグが設定されていない場合、保持期間はデフォルトで15日です(早期に保持期間/コストを計画)。
  • Grafana Mimirは、PrometheusおよびOpenTelemetryメトリクス用の水平スケーラブル、HA、マルチテナントの長期ストレージと説明されます。
  • Thanosは、長期ストレージ機能を持つ高可用性Prometheusセットアップと説明されます。
  • Cortexは、PrometheusおよびOpenTelemetryメトリクス用の水平スケーラブル、HA、マルチテナントの長期ストレージソリューションと自己説明します。
  • VictoriaMetrics Cloudは、長期ストレージのためのPrometheusリモライト統合を文書化しています。
  • Amazon Managed Service for Prometheusは、インジェスト/クエリのニーズに合わせてスケーリングし、PromQLとリモライトをサポートするマネージドオファリングを説明しています。

実践的実装クックブック

今日実装すべきメトリクス名とタイプ

OpenTelemetry GenAIセマンティック規約(ステータス:開発中)は、すぐに標準化できるメトリクス名を定義しています。

  • gen_ai.client.token.usage
  • gen_ai.client.operation.duration
  • gen_ai.server.request.duration
  • gen_ai.server.time_per_output_token
  • gen_ai.server.time_to_first_token

すぐにスクレイプできるサーバー側例:

  • vLLMのPrometheusエンドポイントには、カウンター(例: 生成トークン合計)とヒストグラム(TTFT)が含まれ、model_name ラベル戦略を文書化しています。
  • TGIは、キューサイズ、リクエスト継続時間、生成トークン、および平均トークン毎時間を含むメトリクスを文書化しています。
  • Tritonは /metrics の公開とメトリクストグルを文書化しています。

LLMレイテンシとスループットダッシュボードのためのPromQL例

# アプリケーションヒストグラムのp95エンドツーエンドレイテンシ
histogram_quantile(
  0.95,
  sum(rate(llm_request_latency_seconds_bucket[5m])) by (le, model)
)

# エラーレートパーセント(5xx)
100 *
(
  sum(rate(llm_requests_total{status_code=~"5.."}[5m]))
  /
  sum(rate(llm_requests_total[5m]))
)

# すべてのモデル横断的なトークン/秒(出力)
sum(rate(llm_tokens_total{direction="out"}[5m]))

# TGIキューサイズ(ゲージ)
max(tgi_queue_size) by (instance)

# vLLM TTFT p95
histogram_quantile(
  0.95,
  sum(rate(vllm:time_to_first_token_seconds_bucket[5m])) by (le, model_name)
)

Prometheusのヒストグラムガイダンスは、ヒストグラムパーセンタイルが histogram_quantile() を使用してバケットからサーバー側で計算されることを説明しています。

LLMシステムのためのOpenTelemetry計装ノート

  • OTLPは、OpenTelemetry Protocolであり、テリメトリがソース、コレクター、バックエンド間でどのようにエンコード/伝送されるかを指定します。
  • OpenTelemetry SDK設定は、テリメトリのエクスポートのための環境変数(OTEL_EXPORTER_OTLP_ENDPOINT およびプロトコルオプションなど)を文書化しています。
  • OpenTelemetry Python contribは、自動および手動計装のためのFastAPI計装サポートを文書化しています。
  • GenAIセマンティック規約には、GenAI規約の移行のための OTEL_SEMCONV_STABILITY_OPT_IN によるオプトイン安定性メカニズムが含まれています。

短いPython例: メトリクス+トレース+ログ

以下のスニペットは、次のことをデモンストレーションします。

  • 「PrometheusによるLLM推論のモニタリング」のためのメトリクス公開(/metrics
  • OTLP経由のエクスポートされたOpenTelemetryトレース(ベンダー中立)
  • トレースコンテキストと相関する構造化ログ、プライバシーセーフデフォルト(生プロンプトをログに記録しない)
import logging
import time

from fastapi import FastAPI, Request
from pydantic import BaseModel

# Prometheus (プルベースメトリクス)
from prometheus_client import Counter, Histogram, generate_latest, CONTENT_TYPE_LATEST
from starlette.responses import Response

# OpenTelemetry (OTLPトレース)
from opentelemetry import trace
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

app = FastAPI(title="LLM推論API", version="1.0.0")
FastAPIInstrumentor.instrument_app(app)

# --- ロギング (プライバシーセーフデフォルト) ---
logger = logging.getLogger("llm")
logging.basicConfig(level=logging.INFO, format="%(message)s")

def trace_id_hex() -> str:
    span = trace.get_current_span()
    ctx = span.get_span_context()
    return format(ctx.trace_id, "032x") if ctx.is_valid else ""

# --- Prometheusメトリクス ---
LLM_REQUESTS = Counter(
    "llm_requests_total",
    "LLMリクエスト合計",
    ["route", "status_code", "model"],
)
LLM_LATENCY = Histogram(
    "llm_request_latency_seconds",
    "エンドツーエンドLLMリクエストレイテンシ (秒)",
    ["route", "model"],
    buckets=(0.1, 0.2, 0.35, 0.5, 0.75, 1, 1.5, 2, 3, 5, 8, 13),
)

# --- OpenTelemetryトレーサープロバイダー ---
resource = Resource.create({"service.name": "llm-inference-api"})
trace.set_tracer_provider(TracerProvider(resource=resource))
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(OTLPSpanExporter())  # OTEL_EXPORTER_OTLP_* 環境変数経由で設定
)
tracer = trace.get_tracer(__name__)

class GenerateRequest(BaseModel):
    prompt: str
    model: str = "unspecified"
    max_tokens: int = 256

class GenerateResponse(BaseModel):
    model: str
    output: str
    latency_ms: int

@app.post("/v1/generate", response_model=GenerateResponse)
async def generate(req: GenerateRequest, request: Request):
    route = "/v1/generate"
    start = time.perf_counter()

    with tracer.start_as_current_span("llm.generate") as span:
        # 完全なプロンプトのログ記録を避ける;安全なメタデータを送信
        span.set_attribute("gen_ai.request.model", req.model)
        span.set_attribute("gen_ai.request.max_tokens", req.max_tokens)

        # 実際のLLM呼び出しに置き換える (Triton/vLLM/TGIクライアント)
        time.sleep(0.15)
        output = "モデルからのこんにちは。"

        latency_s = time.perf_counter() - start
        LLM_LATENCY.labels(route=route, model=req.model).observe(latency_s)
        LLM_REQUESTS.labels(route=route, status_code="200", model=req.model).inc()

        logger.info(
            {
                "msg": "llm_request_complete",
                "trace_id": trace_id_hex(),
                "model": req.model,
                "latency_ms": int(latency_s * 1000),
                # ポリシーが許可しない限り、生プロンプト/出力を含めないこと。
            }
        )

        return GenerateResponse(model=req.model, output=output, latency_ms=int(latency_s * 1000))

@app.get("/metrics")
def metrics():
    return Response(generate_latest(), media_type=CONTENT_TYPE_LATEST)

デプロイ、スケーリング、セキュリティ、およびトラブルシューティング

llm dashboard deployment

デプロイオプション

デプロイオプション 最適用途 トレードオフ
Kubernetes + kube-prometheus-stack (Helm) 標準化されたクラスターモニタリングバンドル (Prometheus Operator、ダッシュボード、ルール) CRD/オペレーターライフサイクル管理
Kubernetes + OpenTelemetry Collector (DaemonSet/サイドカー) 標準化されたOTLPパイプライン;ローカル機密フィルタリング サンプリング/制限のチューニングが必要
Docker Compose 単一ホストでの迅速なプロトタイピング HAではない;ストレージは手動
systemd / VMインストール ベアメタルGPUフリートと伝統的な運用 手動ディスカバリと設定
マネージドサービス (Grafana Cloud / Datadog / New Relic / AMP) 迅速な価値実現;マネージドスケーリング コストとガバナンス;ベンダーロックインのトレードオフ

スケーリングと保持:実践的制約

  • Prometheusローカルストレージ: 明示的なサイズ/時間フラグがない場合、保持期間はデフォルトで15日です。
  • Prometheusリモライト: Prometheusは、「健全なデフォルト」を超えてスケーリングするためのリモライトのチューニングを文書化しています。
  • Grafana Tempo: 高規模トレーシングバックエンドとして位置づけられ、メトリクスジェネレーターを使用してスパンからメトリクスを生成できます(Prometheusデータソースへのリモライト)。
  • Lokiストレージ: Lokiのドキュメントは、ラベルのみインデックスと圧縮チャンクストレージ(オブジェクトストレージ)を強調しており、ラベル戦略がスケーリングとコストの中心であることを示しています。

セキュリティとプライバシー:プロンプトにPIIが含まれる可能性がある

OpenTelemetryのセキュリティガイダンスは、テリメトリ収集が不注意に機密/個人情報をキャプチャする可能性があることを強調しており、適切な処理はあなたの責任です。

Prometheusのセキュリティモデルは、Prometheusエンドポイントを公開ネットワーク(インターネットなど)に公開すべきではないと警告しています。なぜなら、それらはモニタリング対象システムに関する情報を提供するためです。

「LLMシステムの観測性」を安全に保つ運用プライバシー制御:

  • デフォルトで生プロンプト/レスポンスをログに記録しないこと;代わりにトークン数、モデル名、レイテンシ、トレースIDをログに記録します。
  • コレクター/パイプラインで機密属性を削除/ドロップする(コレクターレベルのフィルタリングはエコシステム全体で一般的なアプローチです)。
  • ログ/トレースのRBACと保持ポリシーを強制する;適切な場合に機密データスキャンを検討する(例: ベンダーはテリメトリ用のスキャンャーを文書化しています)。

トラブルシューティングチェックリスト

GrafanaダッシュボードのLLMレイテンシが正しくないように見える場合、この順序でデバッグします。

  • インジェストヘルス
    • Prometheus: スケープの成功と設定セマンティクスを検証する(Prometheus設定はスケープジョブ/インスタンスを定義)。
    • OTLP: エクスポートャーエンドポイント設定を確認する(SDKは OTEL_EXPORTER_OTLP_ENDPOINT とプロトコル設定を使用)。
  • スキーマ不整合
    • ダッシュボードは model を期待しているが、サーバーは model_name を送信している(vLLMは明示的に model_name ラベルを文書化)。
  • カーディナリティ爆発
    • 誰かがリクエストID/プロンプトハッシュでラベル付けした;PrometheusはラベルセットがRAM/CPU/ディスク/ネットワークコストを増加させることを警告し、カーディナリティガイダンスを提供しています。
  • ヒストグラムの誤用
    • rate()le を使用して _bucket シリーズからパーセンタイルを計算することを確認;Prometheusはヒストグラムパーセンタイル計算のトレードオフを説明しています。
  • トレースサンプリングのギャップ
    • ヘッドサンプリングを過度に実行すると、稀な遅い/エラートレースが消えます;尾部サンプリングは、完全なトレース基準に基づいて「重要な」トレースを保持します。
  • Tempoスパンメトリクス問題
    • Tempoメトリクスジェネレーターとスパンメトリクスを使用している場合、それが有効化およびチューニングされていることを確認(Tempoはメトリクスジェネレーターとスパンメトリクスプロセッサを文書化;ジェネレーター問題のトラブルシューティングが存在)。
  • GPUメトリクスの欠落
    • DCGMエクスポートャーがデプロイされ、/metrics が到達可能であることを確認(DCGMエクスポートャーはPrometheus用にHTTP経由でGPUメトリクスをエクスポート)。

有用なリンク

購読する

システム、インフラ、AIエンジニアリングの新記事をお届けします。