GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/API / SDK
API / SDK/2026-03-30上級

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

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

gemini-api279observability11monitoring5logging2production105cost-optimization21python103

プレミアム記事

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/月 または ¥1,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 固有の失敗パターンを組み合わせ、プロンプト崩壊・安全フィルタ発火・トークン超過まで本番で観測する実装パイプラインを設計します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →