nikkie-ftnextの日記

イベントレポートや読書メモを発信

Claude API の Ruby クライアントを OpenTelemetry で計装するのを試みる

はじめに

七尾百合子さん、お誕生日 348日目 おめでとうございます! nikkieです。

福岡Rubyist会議の登壇準備1で知ったことのアウトプットです。

目次

Anthropic Ruby API library

Ruby の OpenTelemetry の計装のライブラリ群を見ていて、「anthropic」の文字に気づきました。
https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/anthropic
そこから(OpenAI や Gemini は公式の Ruby SDK がなさそうですが)Claude にはあるということを知りました。

Web 検索の例も動かせました2
https://github.com/anthropics/anthropic-sdk-ruby/blob/v1.23.0/examples/web_search.rb

私の期待値:Python の google-genai SDK と同じかな?

Gemini の SDK google-genai には opentelemetry-instrumentation-google-genai があります。

google-genai を使ったコードの前に opentelemetry-instrumentation-google-genai を呼び出すことで、テレメトリを計装できます。
Gemini API 呼び出しのリクエストボディを覗くこともできます。

anthropic-sdk-ruby と opentelemetry-instrumentation-anthropic も同じ関係なのかなと当初思いました。

opentelemetry-instrumentation-anthropic のコードを追加

README を元に以下のコードを追加します。

ENV["OTEL_TRACES_EXPORTER"] = "console"
OpenTelemetry::SDK.configure do |c|
  c.use "OpenTelemetry::Instrumentation::Anthropic"
end

ところがこの状態では

I, [2026-02-28T22:41:16.374068 #6341] INFO -- : Instrumentation: OpenTelemetry::Instrumentation::Anthropic was successfully installed with the following options {}

のみの出力で、テレメトリは console に出力されません
README のとおりにやっているのに、なぜなのでしょう?

opentelemetry-instrumentation-net_http も追加する

gpt-5.3-codex medium でソースコードを読ませました。

README.md のとおりにやっても計装されないように思われる。何を間違えたか原因調査して

1. Anthropic 計装は Anthropic 呼び出しのスパンを自分では作りません
    - 実装は PooledNetRequester に prepend して、Fiber間で OpenTelemetry::Context を引き継ぐだけです。
    - 参照: instrumentation.rb:23, pooled_net_requester.rb:16
2. そのため、表示されるのが installed ログだけでも不思議ではありません
    - 実際のテストも HTTP POST スパン(= net/http 側)を前提にしています。
    - 参照: test_helper.rb:13, pooled_net_requester_test.rb:41

計装が見える実装に至りました。

コンソール出力のうちテレメトリ部分です

Claude の Messages API の呼び出しが記録されています。
ですが、リクエストボディまでは見えません(見誤りました)

終わりに

Ruby の Claude API クライアントとその計装ライブラリを見つけ、計装を試しました。
2026年2月時点では、opentelemetry-instrumentation-net_http を追加して、テレメトリが見えます。
しかしリクエストボディまでは見えません。
Python の google-genai とその計装ライブラリの関係を予想していましたが、現状はだいぶ異なりました。

ソースコードの全容はこちらです。

ruby 4.0.1、bundle 4.0.3 で動かしました


  1. パワポ作るマンで見たところだ〜