日本語

トラブルシューティング

よくある問題と解決方法

ログが記録されない

症状

SDKを導入したが、ダッシュボードにログが表示されない。

確認ポイント

  1. APIキーが正しいか確認

    at- で始まるAPIキーを使用していることを確認してください。

  2. enabled=True になっているか確認

    初期化時に enabled=False が設定されていないか確認してください。

  3. クライアントがラップされているか確認

    OpenAI等のクライアントを tracer.wrap_openai() でラップしていることを確認してください。

  4. プロジェクト名を確認

    ダッシュボードで正しいプロジェクトを選択しているか確認してください。

# 正しい設定例
from aitracer import AITracer
from openai import OpenAI

tracer = AITracer(
    api_key="at-xxxx",       # ← at- で始まる
    project="my-project",
    enabled=True              # ← True であること
)

# クライアントをラップする
client = tracer.wrap_openai(OpenAI())  # ← ラップを忘れない

# これでログが記録される
response = client.chat.completions.create(...)

非同期モードの場合

デフォルトの非同期モードでは、ログはバッファされてから送信されます。すぐにログを確認したい場合は flush() を呼び出してください。

# 即座にログを送信
tracer.flush()

APIキーエラー

エラーメッセージ

Invalid API key または Unauthorized

解決方法

  1. APIキーの形式を確認

    at- で始まる正しい形式のキーを使用してください。

  2. キーが無効化されていないか確認

    ダッシュボードの「設定」→「APIキー」でキーのステータスを確認してください。

  3. 環境変数を確認

    環境変数 AITRACER_API_KEY が正しく設定されているか確認してください。

  4. キーを再発行

    問題が解決しない場合は、新しいAPIキーを発行してください。

# 環境変数の確認(Python)
import os
print(os.getenv("AITRACER_API_KEY"))  # at-xxxx が表示されるはず

# 環境変数の確認(Bash)
# echo $AITRACER_API_KEY

レート制限

エラーメッセージ

Rate limit exceeded または 429 Too Many Requests

解決方法

  1. プランの上限を確認

    現在のプランのログ上限に達していないか確認してください。

  2. プランをアップグレード

    上限に達している場合は、より上位のプランにアップグレードしてください。

  3. 一時的な対処

    SDKは自動的にリトライしますが、大量のログを送信している場合は間隔を空けてください。

プラン別のログ上限

プラン 月間ログ上限
Free1,000
Starter10,000
Pro100,000
Enterprise無制限

ネットワークエラー

エラーメッセージ

Connection errorTimeoutName resolution failed

解決方法

  1. インターネット接続を確認

    api.aitracer.co に接続できることを確認してください。

  2. ファイアウォール/プロキシを確認

    企業ネットワークの場合、api.aitracer.co:443 への接続が許可されているか確認してください。

  3. DNS設定を確認

    DNSが正しく解決できることを確認してください。

# 接続テスト(Bash)
curl -I https://api.aitracer.co/health

# DNS解決テスト
nslookup api.aitracer.co
アプリケーションへの影響
ネットワークエラーが発生しても、SDKはアプリケーションの動作を妨げません。ログの送信に失敗するだけで、LLMのAPI呼び出しは正常に動作します。

パフォーマンスの問題

症状

AITracerを導入後、アプリケーションが遅くなった気がする。

確認ポイント

  1. 非同期モードを使用しているか確認

    デフォルトは非同期モード(sync=False)です。同期モードになっていないか確認してください。

  2. 影響は3ms以下

    非同期モードでの影響は通常3ms以下です。それ以上の遅延がある場合は他の原因を調査してください。

# 同期モードになっていないか確認
tracer = AITracer(
    api_key="at-xxxx",
    sync=False  # ← Falseであること(デフォルト)
)

# サーバーレス環境以外では同期モードは非推奨

データの問題

トークン数が0になる

症状

ログは記録されるが、トークン数が0と表示される。

原因

一部のLLMプロバイダーはレスポンスにトークン数を含めない場合があります。また、ストリーミングモードではトークン数が取得できない場合があります。

コストが計算されない

症状

コストが0または「-」と表示される。

原因

  • トークン数が取得できていない
  • モデル名が認識されていない(カスタムモデル名の場合)
  • 新しいモデルで価格情報が未登録

手動ログの場合は、input_tokensoutput_tokens を明示的に指定してください。

サーバーレス環境

症状

AWS Lambda / Cloud Functions / Vercel でログが記録されない、または一部しか記録されない。

解決方法

サーバーレス環境では、関数終了時にバッファが送信される前にプロセスが終了する場合があります。以下のいずれかの対策を行ってください。

対策1: 同期モードを使用

tracer = AITracer(
    api_key="at-xxxx",
    sync=True  # ← サーバーレス環境では True を推奨
)

対策2: 終了前に flush() を呼び出す

def handler(event, context):
    try:
        response = client.chat.completions.create(...)
        return {"statusCode": 200, "body": response}
    finally:
        tracer.flush()  # ← 必ず呼び出す
コールドスタートへの影響
同期モードを使用すると、各リクエストで若干のレイテンシが追加されます。パフォーマンスが重要な場合は、flush() を使用する方法をお試しください。

デバッグ方法

デバッグログを有効にする

import logging

# AITracerのログレベルをDEBUGに設定
logging.getLogger("aitracer").setLevel(logging.DEBUG)

# ハンドラを追加
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logging.getLogger("aitracer").addHandler(handler)

送信前のデータを確認

# バッファの内容を確認(デバッグ用)
print(tracer._buffer)  # 内部バッファを表示

# 統計情報を確認
print(tracer.stats())  # 送信済み/失敗のログ数を表示

それでも解決しない場合

以下の情報を添えてサポートにお問い合わせください。

  • 使用しているSDKのバージョン
  • 使用しているPython / PHP / Node.jsのバージョン
  • エラーメッセージ(スクリーンショットまたはテキスト)
  • 問題が発生するコードの抜粋
  • 実行環境(ローカル / AWS Lambda / GCP など)