🦒

Langfuse を Sentry統合で導入した際に料金が大変なことになった話

に公開

こんにちは。 PeopleX エンジニアの竹内です。

現在、私が担当しているプロダクトでは LLM のトレーシングや評価に Langfuse を採用しています。
OpenTelemetry の仕組みにより、上流に設置すると枝葉の関数やメソッドで LLM を実行した際のログが簡単に取れたり、そのトレース結果に対して評価を回していくことができるのは大変便利です。

弊社ではエラートラッキング・パフォーマンス分析のツールに Sentry を採用しています。Langfuseと同じく OpenTelemetry を用いたツールなので、同じ OpenTelemetry のインスタンスを使い回すことができます。

想定外の料金使用料通知が届く

年末、弊社CTOからこんなSlackが届きました。
langfuse_cto_slack

弊社ではLangfuseを導入しているプロダクトはいくつかあるのですが、いずれもこの従量課金額に到達するほど大量の検証というものをしていた記憶はありません。

Dashboardで確認したところ、以下のような統計が表示されました。
langfuse_pic1

上位2つの Trace は LLM 呼び出しに関係のないものですが、ご覧の通り稼働サーバーに対して定期的にアクセスが来るものにまで Trace が紐づけられてしまっています。

LLMに関係した呼び出しの Span のみに絞る

# Using Langfuse with Sentry

こちらのドキュメントを確認し、Sentry と併用した導入方法について注意事項などを確認したところ、以下の記載とともに2つの対応策が書いてありました。

Sentry’s tracesSampleRate applies to all traces, including those going to Langfuse.

  • tracesSampleRate を絞る方法
  • Langfuse Span に絞る方法

前者は単純に Tracing として送る頻度を 0 ~ 100% の割合に絞る機能のため、関係のない Trace も送られる状況は変わりません。
そのため、後者の「Langfuse Span に絞る方法」を採用しました。

langfuse-sdk と AI SDK(Vercel)に関する呼び出しのみ Langfuse に送る

ShouldExportSpan 型のオブジェクトを用意し、エクスポートする Instrumentation Scope を指定します。

new LangfuseSpanProcessor({ shouldExportSpan: ({ otelSpan }) => ["langfuse-sdk", "ai"].includes(otelSpan.instrumentationScope.name)})

もしこれらの他に絞りたいものがある場合、Langfuse のWeb管理画面から metadata.scope.name を辿ることで見つけることができます。

用意した shouldExportSpanLangfuseSpanProcessor に渡せるのでこれでフィルタすることができます。

return new LangfuseSpanProcessor({
    baseUrl: process.env.LANGFUSE_BASE_URL,
    publicKey: process.env.LANGFUSE_PUBLIC_KEY,
    secretKey: process.env.LANGFUSE_SECRET_KEY,
    environment: process.env.APP_ENV ?? "local",
    shouldExportSpan,
  });

これで、しばらく運用した際に Trace の数が減少していることが確認できました。

langfuse_pic2

まだ GET /healthPOST /graphql が残っていますが、設定してから1ヶ月経過しきっていないため 1ヶ月区切りでみたときに対象に入っているためです。

おわりに

複数プロダクトで Langfuse を導入しているため、導入方法も他プロダクトのものを見よう見まねで入れた結果、ドキュメントを深く確認していなかったために気づくのが遅れたのかなと思います。

また、Langfuse 側でよしなにフィルタしてくれているものと勝手に思い込んでしまっていましたが、自分達で調整すべき部分もあることがわかったのは学びかなと思います。

Langfuse を用いたLLMのトレーシングは精度向上やエラーの検知に大変便利なため、今後も活用していければと思います。

参考

/以上

GitHubで編集を提案
PeopleXテックブログ

Discussion