はじめに
生成AIを利用しているとどのぐらいトークンを使ったのか、といったメトリックや、生成AIへのプロンプトとレスポンスの生データを見たい、というLoggingの要望がかなりあるのではないかと思います。
Elastic v8.16.0からAWS BedrockのInvocation LogとMetricを取得して可視化するIntegrationがリリースされました。ドキュメントはこちらです。
https://www.elastic.co/docs/current/integrations/aws_bedrock
この機能についてのブログもリリースされています。
https://www.elastic.co/observability-labs/blog/llm-observability-aws-bedrock
本記事はv8.16.0をベースに記載しています
手順
以下の3ステップです。
- Bedrock Invocation Logの設定を行う
- Bedrock Integrationを設定する
- Elastic Agent (or Serverless ForwarderやFirehoseなど)でElasticsearchへの送信設定をする
データの流れとしては
Bedrock Invocation Log => CloudWatch Log => Elastic Agent => Elasticsearch
となります。
Bedrock
Bedrock Invocation Loggingで検索すると結構ヒットします。
例えばこことか。
https://dev.classmethod.jp/articles/amazon-bedrock-model-invocation-logging/
あらかじめCloudwatch LogのLog Groupを作成しておいてください。
Service roleはこの画面でCreate and use a new roleを選べばよしなに作成してくれます。
設定に問題がなければ、以下のようなログがCloudwatchに表示されます。

ログデータ確認
BedrockのPlaygroundでChatをやってみるのが一番手っ取り早いです。

その後、Cloudwatchには以下のようなログが出てきます。

AWS Bedrock Integration
Integrationはログを自動的に整形して可視化のダッシュボードを作成するものです。
Ingest PipelineとKibana Lensが主な構成要素です。
まず3本線メニューからManagementの下にあるIntegrationsをクリックします。

検索バーがあるのでbedrockと入力すると以下のようにフィルタされるので、表示されているAmazon Bedrockをクリックします。

右上のAdd Amazon Bedrockをクリックします。

次の画面はクラスタ作成後に初めてIntegrationsを追加する人だけ表示されます
この画面が表示されたら、一番下のAdd integration only (skip agent installation)をクリックします。

次の部分に入力して、最後に一番下にあるSave and continueをクリックして保存します。
- Access Key ID
- Secret Key
- Collect Logs from Cloudwatchを有効にしてから
Change defaultをクリックして詳細設定を展開してLog Group ARNを入力
次にAdd Elastic Agent to your hostsをクリックしてElastic Agentをインストールします。

少しスクロールダウンすると各環境におけるインストールコマンドが表示されていますので、これをコピー&ペーストしてインストールします。

問題なくインストールができて設定に問題がなければ以下のようになります。

ダッシュボード
データが来たところで、ダッシュボードで確認してみましょう。
3本線メニューからDashboardをクリックします。

[Amazon Bedrock] Overviewをクリックします。他にもダッシュボードがいっぱいあって見つからない場合は検索窓にbedrockと入れてください。

デフォルトでは直近15分のデータしか表示しません。PlaygroundのChatを触ったのはだいぶ前だと思いますので、右上のLast 15 minutesの横のカレンダーアイコンをクリックして、Playgroundを操作した時間が範囲に入るように時間範囲を選びます。

全体画面
上の方はメトリック、真ん中あたりにInvocation Logがあります。
メトリックで気になるのはToken Usageあたりではないかと思います。

Discoverで確認
Discoverに移ってlogs-*を表示し、フィールドをbedrockでフィルタします。Bedrock関係のフィールドが表示されるので、興味のあるフィールドをクリックしてみましょう。

aws_bedrock.invocation.model_idというフィールドは全てのログに入っているので、これが存在することを条件とするフィルタを掛けると、Invocation関係のログのみ表示できます。

当然全文検索エンジンなので、Chatで使った単語を打ち込めばそれでも検索できます。
例えばここでは"ERR-1000"というエラー番号で検索をかけています。
エラー番号などに曖昧な検索は必要ないので、ここはキーワード検索が必須になると思います。

誰が使っているかを知りたい場合はgen_ai.user.idに入っています。
まとめ
Elasticでは生成AIと連携するツールを数多く出してきました。
本記事の機能を利用することにより、生成AIにかかるコストの把握や、プロンプトエンジニアリングがやりやすくなります。
また誰が使用しているかも一目瞭然ですので、セキュリティチェックにも有用です。
検索/O11y/Security全てできるElasticは生成AIを利用するのに最適なプラットフォームです。
是非お試し下さい。
