GEMINI LABEN
ROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応していますROBOTICS — 8月31日に停止した ER 1.6 preview には後継があります。Gemini Robotics ER 2 が公開プレビュー中で、通常版とストリーミング版の2種類が提供されていますVIDEO — ER 2 の成功・失敗判定は静止画ではなく生の映像フィード上で動きます。こぼれ・滑り・位置ずれのような、実行の途中で起きる失敗を捉えられる設計ですDEADLINE — 次の期限は9月30日、gemini-omni-flash-preview の廃止です。移行先は8月27日に GA になった gemini-omni-1.1-flash で、残り4週間を切りましたAPIKEY — 残りの標準 API キーは、制限付きのものも含めて9月中に全面停止します。移行先は Google Cloud サービスアカウントに紐付く auth キー形式ですPRICE — Gemini 3.7 Flash の導入価格 $0.75/$3.75 per 1M は12月31日までです。2027年1月1日から $1.50/$7.50 になるため、年を跨ぐ見積もりは2本立てが要りますAUDIO — Gemini 3.5 Transcribe は85言語以上の言語検出、話者ダイアライゼーション、単語単位タイムスタンプ、最大1,000語のカスタム語彙バイアスに対応しています
記事一覧/API / SDK
API / SDK/2026-03-30上級

Gemini API 本番環境のオブザーバビリティ — ログ・監視・コスト追跡の実践パターン

Gemini APIを本番運用する際に不可欠なオブザーバビリティ基盤を構築する方法を解説。構造化ログ、トークン使用量の追跡、レイテンシ監視、コスト最適化ダッシュボードまで、実装コード付きで網羅します。

gemini-api285observability11monitoring5logging2production105cost-optimization22python103

プレミアム記事

Gemini APIを個人プロジェクトから本番サービスへスケールさせるとき、多くの開発者が直面する壁があります。「APIが遅いのはモデルの問題か、ネットワークの問題か」「今月のAPI費用がなぜ急増したのか」「ユーザーからエラー報告があったが、どのリクエストで何が起きたのか」——これらの問いに即座に答えられる仕組みが、オブザーバビリティです。

ここで扱うのはGemini APIを本番運用するために必要なオブザーバビリティ基盤を、構造化ログ設計からコスト追跡ダッシュボードまで、実装コード付きで体系的に解説します。なお、APIのエラーハンドリングやリトライ戦略についてはGemini API エラーハンドリングとリトライパターン、コスト最適化の基本はGemini API コスト最適化ガイドも併せてご覧ください。

オブザーバビリティの3本柱とGemini API

オブザーバビリティは「ログ(Logs)」「メトリクス(Metrics)」「トレース(Traces)」の3本柱で構成されます。Gemini APIの本番運用においては、それぞれ以下の役割を担います。

ログはAPIリクエストとレスポンスの詳細を記録し、問題発生時の原因調査に使います。プロンプトの内容、モデルのレスポンス、エラーメッセージなど、個別のイベントを時系列で追跡できます。

メトリクスはシステムの健全性を数値で示します。レイテンシの中央値・P95・P99、トークン消費量、エラー率、秒間リクエスト数(RPS)など、集約された統計値をモニタリングします。

トレースは1つのユーザーリクエストがシステム内部をどう流れたかを可視化します。特にRAGパイプラインやマルチエージェントシステムでは、Gemini API呼び出しがどのステップで行われ、どこがボトルネックになっているかを特定するために不可欠です。

構造化ログの設計と実装

Gemini APIのログを効果的に活用するには、構造化ログ(Structured Logging)が重要です。プレーンテキストのログではフィルタリングや集計が難しく、大量のリクエストを処理する本番環境では役に立ちません。

以下は、Python の structlog を使った Gemini API 用の構造化ログ設計です。

import structlog
import time
import uuid
from google import genai
from google.genai import types
 
# structlog の設定
structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.add_log_level,
        structlog.processors.JSONRenderer()
    ]
)
logger = structlog.get_logger()
 
class GeminiObservableClient:
    """オブザーバビリティ機能付きGemini APIクライアント"""
 
    def __init__(self, api_key: str, default_model: str = "gemini-2.5-pro"):
        self.client = genai.Client(api_key=api_key)
        self.default_model = default_model
        self.metrics = MetricsCollector()
 
    def generate(self, prompt: str, model: str = None,
                 config: dict = None, trace_id: str = None):
        """ログ・メトリクス付きでコンテンツを生成する"""
        request_id = str(uuid.uuid4())[:8]
        trace_id = trace_id or str(uuid.uuid4())
        model_name = model or self.default_model
        start_time = time.monotonic()
 
        # リクエストログ
        logger.info("gemini_request_start",
                     request_id=request_id,
                     trace_id=trace_id,
                     model=model_name,
                     prompt_length=len(prompt),
                     config=config)
 
        try:
            response = self.client.models.generate_content(
                model=model_name,
                contents=prompt,
                config=types.GenerateContentConfig(**(config or {}))
            )
 
            elapsed = time.monotonic() - start_time
            input_tokens = response.usage_metadata.prompt_token_count
            output_tokens = response.usage_metadata.candidates_token_count
 
            # 成功ログ
            logger.info("gemini_request_success",
                        request_id=request_id,
                        trace_id=trace_id,
                        model=model_name,
                        latency_ms=round(elapsed * 1000, 2),
                        input_tokens=input_tokens,
                        output_tokens=output_tokens,
                        total_tokens=input_tokens + output_tokens,
                        finish_reason=str(response.candidates[0].finish_reason))
 
            # メトリクス記録
            self.metrics.record_request(
                model=model_name,
                latency=elapsed,
                input_tokens=input_tokens,
                output_tokens=output_tokens,
                success=True
            )
 
            return response
 
        except Exception as e:
            elapsed = time.monotonic() - start_time
            # エラーログ
            logger.error("gemini_request_error",
                         request_id=request_id,
                         trace_id=trace_id,
                         model=model_name,
                         latency_ms=round(elapsed * 1000, 2),
                         error_type=type(e).__name__,
                         error_message=str(e))
 
            self.metrics.record_request(
                model=model_name,
                latency=elapsed,
                input_tokens=0,
                output_tokens=0,
                success=False,
                error_type=type(e).__name__
            )
            raise

このクライアントは、すべてのAPI呼び出しに対して request_idtrace_id を自動付与します。request_id は個々のAPI呼び出しを識別し、trace_id はユーザーリクエスト全体を通して紐づけるための識別子です。

ログ出力は以下のようなJSON形式になります。

# 出力例:
# {"event": "gemini_request_success", "request_id": "a1b2c3d4",
#  "trace_id": "550e8400-...", "model": "gemini-2.5-pro",
#  "latency_ms": 1523.45, "input_tokens": 256,
#  "output_tokens": 1024, "total_tokens": 1280,
#  "finish_reason": "STOP", "timestamp": "2026-03-30T10:15:00Z",
#  "level": "info"}

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Gemini API呼び出しの構造化ログ設計とトレーシング実装を習得できる
トークン使用量・コストをリアルタイムで追跡するダッシュボードを構築できる
レイテンシ異常検知とアラート設定により、障害を未然に防げるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

API / SDK2026-07-04
Gemini API の英語出力に日本語が『たまに』混ざるとき — 混入率を計測して段階的に締める運用メモ
英語出力を指示したGemini APIが、100回に数回だけ日本語を混ぜてくる——この『たまに』を止められない本当の理由と、混入率をSLOとして計測し、段階的リカバリで本番品質まで締める運用パターンを実装コード付きで整理します。
API / SDK2026-07-02
Gemma 4 ローカル推論と Gemini API の使い分けで月額¥32,000を¥9,000台にした — ハイブリッドルーターの本番設計
月額¥32,000のGemini APIコストを¥9,000台まで下げたハイブリッド推論構成の記録です。ルーティング設計・Python実装・本番の落とし穴に加え、2026年7月のGemma 4 API提供開始を踏まえた構成見直しの指針もまとめました。
API / SDK2026-05-23
Gemini API × Sentry でLLMエラー追跡とプロンプト失敗を観測する本番運用パイプライン
Sentry と Gemini API を組み合わせ、プロンプトの破綻や安全フィルタ発火、トークン超過といった LLM 特有の失敗を本番で観測するパイプラインを構築します。クライアントラッパー、成功に見える失敗を捕捉するインスペクタ、PII を守る before_send まで実装します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →