⚽️

Google CloudでLLMアプリ監視ツールLangfuseをセルフホスティングする方法

に公開

更新情報(2025 年 4 月)

重要: この記事は Langfuse v2 向けの手順を記載しています。2025 年 4 月現在は Langfuse v3 がリリースされており、この記事の手順ではそのままデプロイできません。

はじめに

こんにちは、クラウドエースの SRE 部に所属している遠矢です。
最近、多くの企業が LLM(大規模言語モデル)を活用したアプリケーションの開発に取り組んでいます。

そこで今回は、LLM アプリケーションの監視とマネジメントを支援するオープンソースツール「Langfuse」を Google Cloud 上にセルフホスティングしてみました。

Langfuse の概要と主要機能

  • 概要
    • Langfuse は、LLM アプリケーションのパフォーマンス向上に役立つオープンソースの LLM エンジニアリングプラットフォームです。 このツールは、デバッグ、分析、評価をサポートし、プロンプト管理やデータセットの作成を可能にします。
  • 主要機能
    • トレース
      • LLM の各呼び出しと関連ロジックを詳細に記録し、システムの動作を追跡します。
    • プロンプト管理
      • プロンプトの変更を追跡し、バージョンを管理することで、プロンプトの進化を把握します。
    • 応答評価
      • モデルベース評価やユーザーフィードバックを用いてモデルの応答品質を評価します。
    • パフォーマンスモニタリング
      • レスポンスタイムやコスト等の重要な指標を収集し、視覚的に分かりやすいダッシュボードで表示します。
        alt text

Google Cloud でセルフホスティングする利点

  • データの主権と制御

    • すべてのデータを自社のインフラに保持できます。
    • 社内の機密情報に関するコンプライアンス要件を満たしやすくなります。
  • カスタマイズと柔軟性

    • 特定のニーズに合わせてインフラを最適化できます。
  • LangChain に依存しない点

    • 類似したサービスに LangSmith が挙げられますが、LangChain に依存してしまいます。Langfuse であれば、LangChain に依存することなく利用が可能です。
  • コスト最適化

    • 長期的には、特に大規模な利用の場合、自社インフラでの運用がコスト効率的になる可能性があります。
      LangSmith でもセルフホスティングは可能ですが、Enterprise プラン(最上位プラン)に加入しないと使用できないため、セルフホスティングを安価に利用できます。

Google Cloud 環境のセットアップ

この章から Google Cloud 環境で Langfuse をセルフホスティングする手順を記載します。
基本は公式ドキュメントに従い Google Cloud 上で Langfuse をデプロイするためにコンテナ化されたアプリケーションに Cloud Run を使用し、データベースに Cloud SQL を使用します。

1. 必要な API の有効化

以下の API を有効にする必要があります。

  • Cloud SQL Admin API
  • Secret Manager API
  • Cloud Run API
  • Compute Engine API

Google Cloud Console のAPI とサービスから有効化してください。

2. ネットワーク設定

まずカスタムネットワークを作成します。

  • VPC ネットワークの作成
    デフォルトネットワークを利用するのはセキュリティ的に良くないため、カスタムネットワークを作成します。
    デフォルトネットワークを利用しない方が良い詳しい理由は弊社の記事をご覧ください。 以下のリンクから 「VPC ネットワークを作成」をクリックしてください。 alt text
    任意の VPC の名前を作成後、下にスクロールして作成をクリックしてください。
    alt text
  • サブネットの設定
    サブネットは任意の名前を入力し、VPC ネットワークで重複しないサブネットワークの IP 範囲を指定してください。
    必ず、限定公開の Google アクセスをオンに設定してください。
    alt text

3. Cloud SQL のセットアップ

次に Cloud SQL のインスタンスを作成していきます。

  • PostgreSQL インスタンスの作成

    • 以下のリンクから PostgreSQL を選択し、SQL インスタンスを作成する。
    • パラメータとしては以下のように設定をしてください。
      また、パスワードはこの後利用するため、メモ等をしておいてください。
      項目
      Cloud SQL のエディション Enterprise
      エディションのプリセット サンドボックス
      データベースのバージョン PostgreSQL 16
      インスタンス ID [任意の値]
      パスワード [任意の値]
      リージョン [任意の値]

    [インスタンス ID]、[パスワード]、[リージョン]の部分を「[任意の値]」としています。実際に使用する際は、これらの項目に具体的な値を入力・選択してください。

  • プライベート IP の設定
    以上の設定を入力後、下にスクロールし、インスタンスのカスタマイズ → 接続で以下の画面に遷移します。
    [プライベート IP] のみを選択し、作成したネットワークを選択します。
    alt text
    次にプライベートサービス接続を設定するために接続を設定のボタンをクリックし以下の画面に遷移します。[自動的に割り当てられた IP 範囲を使用する]を選択して、接続を作成します。
    alt text
    その後、最後に最下部までスクロールし [インスタンスを作成] をクリックします。

  • データベースの設定
    Cloud SQL インスタンスの作成後に表示されている詳細画面の、[ナビゲーションメニュー]から[データベース]を選択し postgres 以外のデータベースを新しく任意の名前を付け作成する。
    (db の名前はこの後利用します。)

4. Secret Manager 作成

  • Secret Manager の作成と設定
    Secret Manager には、アプリケーションの安全な動作のために必要な機密情報を格納します。具体的には、以下の値を Secret Manager に保存します。

    項目
    DATABASE_URL CloudSQL に接続可能な URL のスキーマ
    NEXTAUTH_SECRET openssl rand -base64 32 で作成した値
    SALT openssl rand -base64 32 で作成した値
  • DATABASE_URL の作成
    DATABASE_URL は、Cloud SQL データベースへの接続に必要な情報を記述した URL です。以下のテンプレートに従って作成します。

    postgresql://postgres:PASSWORD@localhost/DB_NAME?host=/cloudsql/PROJECT_ID:REGION:INSTANCE_ID&sslmode=none&pgbouncer=true
    

    それぞれの値は次のように設定します。

    項目
    PASSWORD db のパスワード
    DB_NAME 任意で設定したデータベース名
    PROJECT_ID Google Cloud プロジェクト ID
    REGION Cloud SQL のリージョンの値
    INSTANCE_ID Cloud SQL のインスタンス ID
  • NEXTAUTH_SECRET と SALT の作成
    NEXTAUTH_SECRET と SALT は、安全性を高めるためにランダムな文字列を使用します。ターミナルで以下のコマンドを実行し、それぞれ値を生成してください。

    openssl rand -base64 32
    
  • Secret Manager への格納
    以下のリンクを開き、上記で作成した 3 つの値を Secret Manager に格納します。

    alt text

    これで、Secret Manager の作成と必要な値の設定が完了しました。

Langfuse のデプロイ

1. サービスアカウントの作成と権限設定

  • Cloud Run で利用するカスタムのサービスアカウントを作成します。
    以下のロールを付与してください。

    付与するロール
    Compute ネットワーク ユーザー
    Cloud SQL クライアント
    Secret Manager のシークレット アクセサー

2. Cloud Run の設定・デプロイ

  • Cloud Run サービスの作成

    • アプリケーションとして Cloud Run を利用します。
      以下のリンクから Cloud Run の画面に遷移しコンテナをデプロイをクリック後サービスを選択します。

      alt text

    • [コンテナイメージ] は docker.io/langfuse/langfuse:2 を入力します。:2タグを指定することで v2 系の最新アップデートを自動取得できます。(注意: latest タグでは v3 が取得されるため、v2 を使用する場合は必ず:2を指定してください)
      alt text

    • [コンテナ、ボリューム、ネットワーキング、セキュリティ] を展開して、[コンテナ ポート] を 3000 に変更します。

    • [認証] の設定では、以下の 2 つの選択肢があります:

      • 未認証の呼び出しを許可:Langfuse のログイン画面に直接アクセスできるようになります
      • 認証が必要:Cloud Run レベルでの認証が必要となり、Langfuse のログイン画面にアクセスする前に追加の認証( Identity-Aware Proxygcloud run services proxyコマンド等)が必要になります

      どちらの選択肢でも、Langfuse 自体のログインは必要です。Langfuse はデフォルトでメールアドレス・パスワード認証を提供し、Google などの OAuth プロバイダーを使用した SSO も設定可能です。
      今回は簡単のため「未認証の呼び出しを許可」を選択します。メールアドレス認証や SSO の詳細設定についてはLangfuse の公式ドキュメントをご参照ください。

    • 環境変数の設定では NEXTAUTH_URL に Cloud Run サービスの URL(例: https://langfuse-abc123def456.asia-northeast1.run.app)を入力します。この URL はサービス作成後に表示される実際のエンドポイント URL をコピーして使用してください。
      その他の変数は Secret Manager から参照するようにしてください。(以下の画像のように設定)
      alt text

    • Cloud Run と Cloud SQL の接続設定
      今回は Cloud Run と Cloud SQL の接続は Direct VPC Egress を利用します。詳しい解説は弊社の記事をご覧ください。

      [コンテナ、ボリューム、ネットワーキング、セキュリティ]から[ネットワーキング]を選択し、アウトバウンドトラフィック用の VPC に接続するを有効にする。
      VPC に直接トラフィックを送信するを選択し、上記で作成したネットワークとサブネットを選択する。また、トラフィックルーティングではプライベート IP へのリクエストのみを VPC にルーティングするを選択する。
      alt text

      下にスクロールをして、 作成した Cloud SQL インスタンス名の接続を追加してください。
      alt text

デプロイ後の確認

Langfuse の管理画面へのアクセス確認

デプロイが完了したら、Cloud Run の URL にアクセスして Langfuse のログイン画面が表示されることを確認してください。初回ログイン時にはメールアドレスとパスワードでアカウント作成、プロジェクト作成、API キーの生成を行います。

alt text

まとめと今後の展望

  • まとめ
    本記事では、LLM アプリケーションの監視ツール Langfuse を Google Cloud 上でセルフホスティングする方法について詳しく解説しました。主なポイントは以下の通りです。

    • Langfuse は、LLM アプリケーションのトレース、プロンプト管理、応答評価、パフォーマンスモニタリングなどの重要な機能を提供する強力なツールです。
    • Google Cloud 上でのセルフホスティングには、データの主権確保、カスタマイズの柔軟性、LangChain への非依存、潜在的なコスト最適化など、多くの利点があります。
    • 各ステップを丁寧に実行することで、セキュアで効率的な Langfuse 環境を構築することができます。
    • このセルフホスティング方式により、企業は自社のインフラ内で LLM アプリケーションの監視と管理を行うことが可能になります。
  • 今後の展開
    今回は Langfuse をセルフホスティングする方法に焦点を当てましたが、今後はセルフホスティングした Langfuse の具体的な活用方法、特にプロンプト管理などの実践的な使用例について詳しく解説する予定です。

参考リンク

Discussion