はじめに
七尾百合子さん、お誕生日 341日目 おめでとうございます! nikkieです。
登壇準備1からセーブポイントです。
Python で計装するのと同様にできないか、GPT 5.2 や Opus 4.6 の知恵を借りながら手を動かしました。
※Ruby は経験がなくフィルターバブルに陥っている可能性もありますので、よりよいやり方に気づいた方はぜひ教えてください
目次
- はじめに
- 目次
- 前回の登壇準備:Ruby で Gemini API を呼び出す
- やりたいこと:Python のように計装したい
- faraday で Gemini API を呼び出したときのリクエストボディやレスポンスボディを計装できた方法
- 終わりに
前回の登壇準備:Ruby で Gemini API を呼び出す
mise で Ruby を導入し、faraday で DeepMind の Gemini API(API キー発行して無料で利用できる2)を呼び出しました
この状態がこちらです。
ここから opentelemetry-instrumentation-faraday を試します
やりたいこと:Python のように計装したい
Python だと opentelemetry-instrumentation-google-genai を使って、google-genai SDK から Gemini API へのリクエストもレスポンスも計装できます。
LLM への入力は全部分かりたい束縛系の私にとって、これは非常に助かります(私の癖を満たすだけでなく、開発中のデバッグが捗りますので)
環境変数
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTをtrueに設定します
これと同じことをやってみたいなと思いました。
結論としては、HTTPX の計装でコードを書いたのと近い感じになりました
faraday で Gemini API を呼び出したときのリクエストボディやレスポンスボディを計装できた方法
faraday の Middleware を使いました。
また、conn.builder.handlersの順番を確認し、以下の順番にしています。
[OpenTelemetry::Instrumentation::Faraday::Middlewares::Old::TracerMiddleware, OtelBodyCaptureMiddleware]
f.use OtelBodyCaptureMiddlewareという設定だと逆順になり、ボディはトレースされません。
OtelBodyCaptureMiddlewareが先に call されると、instrumentation のスパンが開始されていないということらしいです(理解を深めたい宿題事項)
トレースの全体はこちら
https://gist.github.com/ftnext/d582f2e9aada6919cbf97d8e70ebe8c3
OpenTelemetry について短い詩を書いてください。
暗闇を編む、見えない糸、(省略)
この時点のコードはこちらです。
終わりに
Python で opentelemetry-instrumentation-google-genai を使ったときと同じようなリクエストボディとレスポンスボディのトレースを faraday で試みました。
今回動いたコードとしては、faraday の Middleware を使って、また順序に注意を払って計装します